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);
以上就是实现远程图片本地化的全部代码,希望对大家的学习有所帮助。