找回密码
 立即注册
搜索
查看: 829|回复: 1

[面向对象] php实现下载图片的方法

[复制链接]

581

主题

110

回帖

4066

积分

管理员

积分
4066

众神之神

发表于 2022-2-21 15:38:14 | 显示全部楼层 |阅读模式
php实现下载图片的方法:1、使用“file_get_contents”实现下载图片;2、通过使用CURL实现下载图片;3、通过使用fopen实现下载图片即可。


PHP下载远程图片的几种方法总结

本文演示3个从远程URL下载图片,并保存到本地文件中的方法,包括file_get_contents,curl和fopen。

1、使用file_get_contents


  1. function dlfile($file_url, $save_to)

  2. {

  3. $content = file_get_contents($file_url);

  4. file_put_contents($save_to, $content);

  5. }
复制代码


2、使用CURL


  1. function dlfile($file_url, $save_to)

  2. {

  3. $ch = curl_init();

  4. curl_setopt($ch, CURLOPT_POST, 0);

  5. curl_setopt($ch,CURLOPT_URL,$file_url);

  6. curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);

  7. $file_content = curl_exec($ch);

  8. curl_close($ch);

  9. $downloaded_file = fopen($save_to, 'w');

  10. fwrite($downloaded_file, $file_content);

  11. fclose($downloaded_file);

  12. }
复制代码


3、使用fopen


  1. function dlfile($file_url, $save_to)

  2. {

  3. $in=  fopen($file_url, "rb");

  4. $out=  fopen($save_to, "wb");

  5. while ($chunk = fread($in,8192))

  6. {

  7. fwrite($out, $chunk, 8192);

  8. }

  9. fclose($in);

  10. fclose($out);

  11. }
复制代码



下载与保存完整方法(输出日志那行可删除):


  1. private function downloadImage($url)

  2. {

  3.     $ch = curl_init();

  4.     curl_setopt($ch, CURLOPT_URL, $url);

  5.     curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);

  6.     curl_setopt($ch, CURLOPT_CONNECTTIMEOUT, 30);

  7.     $file = curl_exec($ch);

  8.     curl_close($ch);

  9.     $this->saveAsImage($url, $file);

  10. }

  11. private function saveAsImage($url, $file)

  12. {

  13.     $filename = pathinfo($url, PATHINFO_BASENAME);

  14.     $dirname = pathinfo(parse_url($url, PHP_URL_PATH), PATHINFO_DIRNAME);

  15.     $path =  'public' . $dirname . '/';

  16.     $fullpath =  'public' . $dirname . '/' . $filename;

  17.     // 如果目录不存在,则创建

  18.     if(!is_dir($path)) {

  19.         mkdir($path, 0777, true);

  20.     }

  21.     if(file_exists($fullpath)) {

  22.         //$this->output->writeln("【已存在】输出路径" . $fullpath);

  23.     } else {

  24.         $resource = fopen($fullpath, 'a');

  25.         fwrite($resource, $file);

  26.         fclose($resource);

  27.         //$this->output->writeln("【已保存】输出路径" . $fullpath);

  28.     }

  29. }
复制代码


581

主题

110

回帖

4066

积分

管理员

积分
4066

众神之神

 楼主| 发表于 2022-2-21 15:38:53 | 显示全部楼层
https的解决方案
  1. $url = 'https://www.baidu.com/';

  2. $ch = curl_init($url);
  3. curl_setopt($ch, CURLOPT_IPRESOLVE, CURL_IPRESOLVE_V4);
  4. curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
  5. curl_setopt($ch, CURLOPT_HEADER, 0);
  6. curl_setopt($ch, CURLOPT_CONNECTTIMEOUT, 20);
  7. curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false);
  8. curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, false);
  9. $output = curl_exec($ch);
复制代码
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

Archiver|手机版|小黑屋|十三博客 ( 鲁ICP备2023000528号 )

GMT+8, 2026-6-1 18:45 , Processed in 0.110063 second(s), 21 queries .

Powered by Discuz! X3.5

© 2001-2024 Discuz! Team.

快速回复 返回顶部 返回列表