//保存远程文件
function saveRemoteImg($sUrl){
global $upExt,$maxAttachSize;
$reExt='('.str_replace(',','|',$upExt).')';
if(substr($sUrl,0,10)=='data:image'){//base64编码的图片,可能出现在firefox粘贴,或者某些网站上,例如google图片
if(!preg_match('/^data:image\/'.$reExt.'/i',$sUrl,$sExt))return false;
$sExt=$sExt[1];
$imgContent=base64_decode(substr($sUrl,strpos($sUrl,'base64,')+7));
}
else{//url图片
if(!preg_match('/\.'.$reExt.'$/i',$sUrl,$sExt))return false;
$sExt=$sExt[1];
$imgContent=getUrl($sUrl);
}
if(strlen($imgContent)>$maxAttachSize)return false;//文件体积超过最大限制
$sLocalFile=getLocalPath($sExt);
file_put_contents($sLocalFile,$imgContent);
//检查mime是否为图片,需要php.ini中开启gd2扩展
$fileinfo= @getimagesize($sLocalFile);
if(!$fileinfo||!preg_match("/image\/".$reExt."/i",$fileinfo['mime'])){
@unlink($sLocalFile);
return false;
}
return str_replace('../','/',$sLocalFile);
}
//抓URL数据
function getUrl($sUrl,$jumpNums=0){
$arrUrl = parse_url(trim($sUrl));
if(!$arrUrl)return false;
$host=$arrUrl['host'];
$port=isset($arrUrl['port'])?$arrUrl['port']:80;
$path=$arrUrl['path'].(isset($arrUrl['query'])?"?".$arrUrl['query']:"");
$fp = @fsockopen($host,$port,$errno, $errstr, 30);
if(!$fp)return false;
$output="GET $path HTTP/1.0\r\nHost: $host\r\nReferer: $sUrl\r\nConnection: close\r\n\r\n";
stream_set_timeout($fp, 60);
@fputs($fp,$output);
$Content='';
while(!feof($fp))
{
$buffer = fgets($fp, 4096);
$info = stream_get_meta_data($fp);
if($info['timed_out'])return false;
$Content.=$buffer;
}
@fclose($fp);
global $jumpCount;//重定向
if(preg_match("/^HTTP\/\d.\d (301|302)/is",$Content)&&$jumpNums<5)
{
if(preg_match("/Location:(.*?)\r\n/is",$Content,$murl))return getUrl($murl[1],$jumpNums+1);
}
if(!preg_match("/^HTTP\/\d.\d 200/is", $Content))return false;
$Content=explode("\r\n\r\n",$Content,2);
$Content=$Content[1];
if($Content)return $Content;
else return false;
}
php保存远程文件及抓URL数据
最新推荐文章于 2021-03-25 02:21:04 发布