当前位置:Gxlcms > PHP教程 > php获取远程图片并下载保存到本地的方法分析

php获取远程图片并下载保存到本地的方法分析

时间:2021-07-01 10:21:17 帮助过:38人阅读

本文实例讲述了php获取远程图片并下载保存到本地的方法。分享给大家供大家参考,具体如下:

远程图片指的是远端服务器上的数据我们可以通过php的许多函数来读取下载了,这里整理了两个可以自动下载远程图片并下载保存到本地的例子。

例1,可以自动识别图片类型然后进行对应的保存

  1. /*
  2. *功能:php完美实现下载远程图片保存到本地
  3. *参数:文件url,保存文件目录,保存文件名称,使用的下载方式
  4. *当保存文件名称为空时则使用远程文件原来的名称
  5. */
  6. function getImage($url,$save_dir='',$filename='',$type=0){
  7. if(trim($url)==''){
  8. return array('file_name'=>'','save_path'=>'','error'=>1);
  9. }
  10. if(trim($save_dir)==''){
  11. $save_dir='./';
  12. }
  13. if(trim($filename)==''){//保存文件名
  14. $ext=strrchr($url,'.');
  15. if($ext!='.gif'&&$ext!='.jpg'){
  16. return array('file_name'=>'','save_path'=>'','error'=>3);
  17. }
  18. $filename=time().$ext;
  19. }
  20. if(0!==strrpos($save_dir,'/')){
  21. $save_dir.='/';
  22. }
  23. //创建保存目录
  24. if(!file_exists($save_dir)&&!mkdir($save_dir,0777,true)){
  25. return array('file_name'=>'','save_path'=>'','error'=>5);
  26. }
  27. //获取远程文件所采用的方法
  28. if($type){
  29. $ch=curl_init();
  30. $timeout=5;
  31. curl_setopt($ch,CURLOPT_URL,$url);
  32. curl_setopt($ch,CURLOPT_RETURNTRANSFER,1);
  33. curl_setopt($ch,CURLOPT_CONNECTTIMEOUT,$timeout);
  34. $img=curl_exec($ch);
  35. curl_close($ch);
  36. }else{
  37. ob_start();
  38. readfile($url);
  39. $img=ob_get_contents();
  40. ob_end_clean();
  41. }
  42. //$size=strlen($img);
  43. //文件大小
  44. $fp2=@fopen($save_dir.$filename,'a');
  45. fwrite($fp2,$img);
  46. fclose($fp2);
  47. unset($img,$url);
  48. return array('file_name'=>$filename,'save_path'=>$save_dir.$filename,'error'=>0);
  49. }

例2,如果不是图片会自动跳过

  1. <?php
  2. function GrabImage($url, $filename = "") {
  3. if ($url == ""):return false;
  4. endif;
  5. //如果$url地址为空,直接退出
  6. if ($filename == "") {
  7. //如果没有指定新的文件名
  8. $ext = strrchr($url, ".");
  9. //得到$url的图片格式
  10. if ($ext != ".gif" && $ext != ".jpg"):return false;
  11. endif;
  12. //如果图片格式不为.gif或者.jpg,直接退出
  13. $filename = date("dMYHis") . $ext;
  14. //用天月面时分秒来命名新的文件名
  15. }
  16. ob_start();//打开
输出 readfile($url);//输出图片文件 $img = ob_get_contents();//得到浏览器输出 ob_end_clean();//清除输出并关闭 $size = strlen($img);//得到图片大小 $fp2 = @fopen($filename, "a"); fwrite($fp2, $img);//向当前目录写入图片文件,并重新命名 fclose($fp2); return $filename;//返回新的文件名 } $img = GrabImage("http://www.gxlcms.com /6648d73db0edd1e89f3d62f7.jpg", ""); if ($img):echo '<pre><img src="' . $img . '"></pre>'; //如果返回值为真,这显示已经采集到服务器上的图片 else:echo "false"; endif; //否则,输出采集失败 ?>

其实上面的下载方式小编最喜欢的不是这两个而是curl保存异步下载图片会比较好。

希望本文所述对大家PHP程序设计有所帮助。

更多php获取远程图片并下载保存到本地的方法分析相关文章请关注PHP中文网!

人气教程排行