php将远程图片保存到本地服务器的实现代码
php如何将远程图片本地化,本文分享了实现代码
<?php //站点根目录 $cfg_basedir=dirname(__FILE__); //停建目录属性 $cfg_dir_purview='0755'; /*Get请求远程内容函数*/ $cookie_file=dirname(__FILE__).'/cookie.txt';//COOKIE存放地址 functionpget($url,$ref=false,$head=false){ $curl=curl_init();//启动一个CURL会话 curl_setopt($curl,CURLOPT_URL,$url);//要访问的地址 curl_setopt($curl,CURLOPT_SSL_VERIFYPEER,0);//对认证证书来源的检查 curl_setopt($curl,CURLOPT_SSL_VERIFYHOST,1);//从证书中检查SSL加密算法是否存在 curl_setopt($curl,CURLOPT_USERAGENT,$_SERVER['HTTP_USER_AGENT']);//模拟用户使用的浏览器 curl_setopt($curl,CURLOPT_FOLLOWLOCATION,1);//使用自动跳转 if($ref){curl_setopt($curl,CURLOPT_REFERER,$ref);//带来的Referer }else{ curl_setopt($curl,CURLOPT_AUTOREFERER,1);//自动设置Referer } curl_setopt($curl,CURLOPT_HTTPGET,1);//发送一个常规的Post请求 curl_setopt($curl,CURLOPT_COOKIEJAR,$GLOBALS['cookie_file']);//存放Cookie信息的文件名称 curl_setopt($curl,CURLOPT_COOKIEFILE,$GLOBALS['cookie_file']);//读取上面所储存的Cookie信息 curl_setopt($curl,CURLOPT_TIMEOUT,30);//设置超时限制防止死循环 curl_setopt($curl,CURLOPT_HEADER,0);//显示返回的Header区域内容 curl_setopt($curl,CURLOPT_RETURNTRANSFER,1);//获取的信息以文件流的形式返回 $tmpInfo=curl_exec($curl);//执行操作 if(curl_errno($curl)){ echo'Errno'.curl_error($curl); } if($head){$data['head']=curl_getinfo($curl);} curl_close($curl);//关键CURL会话 $data['data']=$tmpInfo; return$data;//返回数据 } /** *创建所有目录 * *@paramstring$truepath真实地址 *@paramstring$mmode模式 *@returnbool */ if(!function_exists('MkdirAll')) { functionMkdirAll($truepath) {global$cfg_dir_purview; if(!file_exists($truepath)) { mkdir($truepath,$cfg_dir_purview); chmod($truepath,$cfg_dir_purview); returntrue; } else { returntrue; } } } /** *获得文章body里的外部资源 * *@accesspublic *@paramstring$body文档内容 *@returnstring */ functionGetCurContent($body) { global$cfg_multi_site,$cfg_basehost,$cfg_basedir,$cfg_image_dir,$arcID,$cuserLogin,$dsql; $cfg_uploaddir='/c'; $basehost="http://".$_SERVER["HTTP_HOST"]; $img_array=array(); preg_match_all("/src=[\"|'|\s]{0,}(http:\/\/([^>]*)\.(gif|jpg|png))/isU",$body,$img_array); $img_array=array_unique($img_array[1]); $imgUrl=$cfg_uploaddir.'/'.date("ymd",time()); $imgPath=$cfg_basedir.$imgUrl; if(!is_dir($imgPath.'/')) { MkdirAll($imgPath,$GLOBALS['cfg_dir_purview']); CloseFtp(); } $milliSecond=date('His',time()); foreach($img_arrayas$key=>$value) { if(preg_match("#".$basehost."#i",$value)) { continue; } if(preg_match("#".$basehost."#i",$value)) { continue; } if(!preg_match("#^http:\/\/#i",$value)) { continue; } $http=pget($value,'$value',true); $itype=($http['head']['content_type']); if(!preg_match("#\.(jpg|gif|png)#i",$itype)) { if($itype=='image/gif') { $itype=".gif"; } elseif($itype=='image/png') { $itype=".png"; } else { $itype='.jpg'; } } $milliSecondN=rand(1000,9999).rand(1000,9999); $value=trim($value); $rndFileName=$imgPath.'/'.$milliSecondN.'-'.$key.$itype; $fileurl=$imgUrl.'/'.$milliSecondN.'-'.$key.$itype; $tp=fopen($rndFileName,'wb'); fwrite($tp,$http['data']); fclose($tp); if(file_exists($cfg_basedir.$fileurl)) { $info=''; $imginfos=GetImageSize($rndFileName,$info); $fsize=filesize($rndFileName); $body=str_replace($value,$fileurl,$body); } } return$body; } //调用方式 echoGetCurContent($body);
以上就是实现远程图片本地化的全部代码,希望对大家的学习有所帮助。