php获取远程图片并下载保存到本地的方法分析
官网
20-11-29
这篇文章主要介绍了php获取远程图片并下载保存到本地的方法,结合实例形式对比分析了php基于curl与缓存操作获取远程图片及图片保存的相关操作技巧,需要的朋友可以参考下
本文实例讲述了php获取远程图片并下载保存到本地的方法。分享给大家供大家参考,具体如下:
远程图片指的是远端服务器上的数据我们可以通过php的许多函数来读取下载了,这里整理了两个可以自动下载远程图片并下载保存到本地的例子。
例1,可以自动识别图片类型然后进行对应的保存
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 | /**功能:php完美实现下载远程图片保存到本地*参数:文件url,保存文件目录,保存文件名称,使用的下载方式*当保存文件名称为空时则使用远程文件原来的名称*/function getImage($url,$save_dir='',$filename='',$type=0){if(trim($url)==''){return array('file_name'=>'','save_path'=>'','error'=>1);}if(trim($save_dir)==''){$save_dir='./';}if(trim($filename)==''){//保存文件名$ext=strrchr($url,'.');if($ext!='.gif'&&$ext!='.jpg'){return array('file_name'=>'','save_path'=>'','error'=>3);}$filename=time().$ext;}if(0!==strrpos($save_dir,'/')){$save_dir.='/';}//创建保存目录if(!file_exists($save_dir)&&!mkdir($save_dir,0777,true)){return array('file_name'=>'','save_path'=>'','error'=>5);}//获取远程文件所采用的方法if($type){$ch=curl_init();$timeout=5;curl_setopt($ch,CURLOPT_URL,$url);curl_setopt($ch,CURLOPT_RETURNTRANSFER,1);curl_setopt($ch,CURLOPT_CONNECTTIMEOUT,$timeout);$img=curl_exec($ch);curl_close($ch);}else{ob_start();readfile($url);$img=ob_get_contents();ob_end_clean();}//$size=strlen($img);//文件大小$fp2=@fopen($save_dir.$filename,'a');fwrite($fp2,$img);fclose($fp2);unset($img,$url);return array('file_name'=>$filename,'save_path'=>$save_dir.$filename,'error'=>0);} |
例2,如果不是图片会自动跳过
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 | <?phpfunction GrabImage($url, $filename = "") {if ($url == ""):return false;endif;//如果$url地址为空,直接退出if ($filename == "") {//如果没有指定新的文件名$ext = strrchr($url, ".");//得到$url的图片格式if ($ext != ".gif" && $ext != ".jpg"):return false;endif;//如果图片格式不为.gif或者.jpg,直接退出$filename = date("dMYHis") . $ext;//用天月面时分秒来命名新的文件名}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("https://www.jb51.net /6648d73db0edd1e89f3d62f7.jpg", "");if ($img):echo '<pre><img src="' . $img . '"></pre>';//如果返回值为真,这显示已经采集到服务器上的图片else:echo "false";endif;//否则,输出采集失败?> |
免责声明:
1.资讯内容不构成投资建议,投资者应独立决策并自行承担风险
2.本文版权归属原作所有,仅代表作者本人观点,不代表本站的观点或立场
1.资讯内容不构成投资建议,投资者应独立决策并自行承担风险
2.本文版权归属原作所有,仅代表作者本人观点,不代表本站的观点或立场