前段时间工作原因接触到需要保存远程图片,尝试了几种方法,最后总结封装出来了一个函数,可适应任何远程图片,代码如下:
<span style="white-space:pre"> </span>/**
* $url 目标网址
* $filename 保存文件名
* $savefile 保存文件路径(绝对路径)
* @return 返回文件名
*/
function photoDownload($url,$filename='',$savefile='/home/data/www/card/Web/uploads/tmp/'){
$imgArr = array('gif','bmp','png','ico','jpg','jepg');
if(!$url){return false;}
if(!$filename){
$url_arr = explode('.',$url);
$url_ext = array_pop($url_arr);
$ext=strtolower($url_ext);
if(!in_array($ext,$imgArr)){return false;}
$filename=date("dMYHis").'.'.$ext;
}
if(!is_dir($savefile)){mkdir($savefile, 0777);}
if(!is_readable($savefile)){ chmod($savefile, 0777);}
$filename = $savefile.$filename;
ob_start();
readfile($url);
$img = ob_get_contents();
ob_end_clean();
$size = strlen($img);
$fp2=@fopen($filename, "a");
fwrite($fp2,$img);
fclose($fp2);
$tmp = '..';
$filename_arr = explode('/',$filename);
$new_filename_arr = array($tmp,$tmp,$filename_arr[6],$filename_arr[7],$filename_arr[8]);
$filename = implode('/',$new_filename_arr);
return $filename;
}
这个函数应用的原理为:获取网址后,将图片放置在缓存之中,然后通过写入另外一个文件中,最后将扩展名连接上这个文件即完成了远程文件保存在本地。