php保存远程图片,下面这段代码是我自己写的,但是有一个问题就是放在服务器就保存图片的成功不是很高,我用的是file_get_contents来取得,最后发现如果主机有防盗的就读取了,我们欺骗主机的方法来做,就是用fsockopen向主机发送一个用户包
function get_remote($body){
set_time_limit(0);
$img_array = array();
$img_path = get_pic/;
preg_match_all(/(src|src)=[|'| ]{0,}(http://(.*).(gif|jpg|jpeg|png))/isu,$body,$img_array);
$img_array = array_unique($img_array[2]);
foreach ($img_array as $key => $value) {
$get_file = @file_get_contents($value);
$filetime = time();
!is_dir($img_path) ? mkdir($img_path) : null;
$filename = date(ymdhis,$filetime).rand(1,999).'.'.substr($value,-3,3);
if(empty($get_file)){
sleep(3);
$get_file = @file_get_contents($value);
if(empty($get_file)){
$body = preg_replace(/.addcslashes($value,/)./isu, 'http://www.111cn.cn/notfound.jpg', $body);
continue;
}
}
if(!empty($get_file) ){
$fp = fopen($img_path.$filename,w);
if(fwrite($fp,$get_file)){
$body = preg_replace(/.addcslashes($value,/)./isu, $img_path.$filename, $body);
}
}
fclose($fp);
sleep(1);
}
//$body =str_replace(' //$body =str_replace(' return $body;
}
下面我们来看看fsockopen的方法喽.
if($gcookie== && !empty($rfurl)) $gcookie = refurlcookie($rfurl);
$sessionquery = get $gquery http/1.1rn;
$sessionquery .= host: $ghostrn;
$sessionquery .= referer: $rfurlrn;
$sessionquery .= accept: */*rn;
$sessionquery .= user-agent: mozilla/4.0 (compatible; msie 5.00; windows 98)rn;
if($gcookie!=&&!ereg([rn],$gcookie)) $sessionquery .= $gcookie.rn;
$sessionquery .= connection: keep-alivernrn;
$errno = ;
$errstr = ;
$url ='http://www.moko.cc';
$m_fp = fsockopen($url,80,$errno,$errstr,10);
fwrite($m_fp,$sessionquery);
function refurlcookie($gurl){
global $gcookie,$lastrfurl;
$gurl = trim($gurl);
if(!empty($gcookie) && $lastrfurl==$gurl) return $gcookie;
else $lastrfurl=$gurl;
if(trim($gurl)=='') return '';
$urlinfos = gethostinfo($gurl);
$ghost = $urlinfos['host'];
$gquery = $urlinfos['query'];
$sessionquery = get $gquery http/1.1rn;
$sessionquery .= host: $ghostrn;
$sessionquery .= accept: */*rn;
$sessionquery .= user-agent: mozilla/4.0 (compatible; msie 5.00; windows 98)rn;
$sessionquery .= connection: closernrn;
$errno = ;
$errstr = ;
$m_fp = fsockopen($ghost, 80, $errno, $errstr,10) or die($ghost.'
');
fwrite($m_fp,$sessionquery);
$lnum = 0;
//获取详细应答头
$gcookie = ;
while(!feof($m_fp)){
$line = trim(fgets($m_fp,256));
if($line == || $lnum>100) break;
else{
if(eregi(^cookie,$line)){
$gcookie = $line;
break;
}
}
}
fclose($m_fp);
}
哈这样的话就可以保存远程有图片防盗的主机的图片了喽.
http://www.bkjia.com/phpjc/630485.htmlwww.bkjia.comtruehttp://www.bkjia.com/phpjc/630485.htmltecharticlephp保存远程图片,下面这段代码是我自己写的,但是有一个问题就是放在服务器就保存图片的成功不是很高,我用的是file_get_contents来取得,最后...
