PHP下载远程图片

迷南。 2023-06-06 10:47 74阅读 0赞

PHP下载远程图片

最简单的方法:

  1. $image_url = 'http://xxxx.com/xxx.png';
  2. $image_content = file_get_contents($image_url);
  3. $save_path = '1.png';
  4. file_put_contents($save_path, $image_content);

但是如果图片地址是有302跳转的或者gzip压缩或者需要登录状态才能下载,这时就需要用到curl来下载。

header方式传cookie和请求的资源有gzip:

  1. $url = 'http://xxxx.com/xxx.png';
  2. $headers = array(
  3. 'Referer: https://xxx.cn',
  4. 'Cookie: xxxxx'
  5. );
  6. $save_path = '1.png';
  7. $tmp_file = tempnam(sys_get_temp_dir(), 'image'); // 创建临时文件
  8. $resource = fopen($tmp_file, 'wb');
  9. $curl = curl_init();
  10. curl_setopt($curl, CURLOPT_URL, $url);
  11. curl_setopt($curl, CURLOPT_HEADER, false);
  12. curl_setopt($curl, CURLOPT_HTTPHEADER, $headers);
  13. curl_setopt($curl, CURLOPT_CUSTOMREQUEST, 'GET');
  14. curl_setopt($curl, CURLOPT_FILE, $resource);
  15. curl_setopt($curl, CURLOPT_ENCODING, 'gzip'); // 如果请求的资源没有gzip则不需要这一行
  16. curl_exec($curl);
  17. curl_close($curl);
  18. fclose($resource);
  19. copy($tmp_file, $save_path);
  20. @unlink($tmp_file);

cookie是通过传存文件方式请求:

  1. $url = 'http://xxxx.com/xxx.png';
  2. $headers = array(
  3. 'Referer: https://xxx.cn'
  4. );
  5. $cookie_path = 'test_cookie.txt'; // 如果是cookie文件方式,需要先获取cookie信息写入到文件,具体方法自行百度
  6. $save_path = '1.png';
  7. $tmp_file = tempnam(sys_get_temp_dir(), 'image'); // 创建临时文件
  8. $resource = fopen($tmp_file, 'wb');
  9. $curl = curl_init();
  10. curl_setopt($curl, CURLOPT_URL, $url);
  11. curl_setopt($curl, CURLOPT_HEADER, false);
  12. curl_setopt($curl, CURLOPT_HTTPHEADER, $headers);
  13. curl_setopt($curl, CURLOPT_COOKIEJAR, $cookie_path); // cookie有2种方式,可以通过cookie文件或者直接在请求头写死cookie
  14. curl_setopt($curl, CURLOPT_COOKIEFILE, $cookie_path); // cookie有2种方式,可以通过cookie文件或者直接在请求头写死cookie
  15. curl_setopt($curl, CURLOPT_CUSTOMREQUEST, 'GET');
  16. curl_setopt($curl, CURLOPT_FILE, $resource);
  17. curl_setopt($curl, CURLOPT_ENCODING, 'gzip'); // 如果请求的资源没有gzip则不需要这一行
  18. curl_exec($curl);
  19. curl_close($curl);
  20. fclose($resource);
  21. copy($tmp_file, $save_path);
  22. @unlink($tmp_file);

发表评论

表情:
评论列表 (有 0 条评论,74人围观)

还没有评论,来说两句吧...

相关阅读

    相关 laravel php 默认图片下载

    一般情况下a标签的图片地址会默认在浏览器中打开,我们需要点击直接下载图片,不是打开图片 我们需要使用流的方式进行访问下载 //获取要下载的文件名

    相关 php图片打包下载

            前天在实现公司一个需求的时候,由于需要提供多图下载的功能,所以想到了多图打包压下载的思路,今天在这里跟大家分享如何实现这个功能。        我们先封装我们