前段時間工作原因接觸到需要保存遠程圖片,嘗試了幾種方法,最後總結封裝出來了一個函數,可適應任何遠程圖片,代碼如下:
<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;
}
這個函數應用的原理爲:獲取網址後,將圖片放置在緩存之中,然後通過寫入另外一個文件中,最後將擴展名連接上這個文件即完成了遠程文件保存在本地。