>  기사  >  백엔드 개발  >  PHP를 사용하여 원격 사진을 로컬로 수집하는 방법

PHP를 사용하여 원격 사진을 로컬로 수집하는 방법

PHPz
PHPz원래의
2017-04-03 16:30:292326검색

오늘 이 기능을 작성하여 친구들과 공유했습니다. 원격 이미지를 얻어 로컬에 저장할 수 있습니다. 실제로 이 기능이 있는 많은 PHP 관리 시스템을 참조할 수 있습니다.

첫 번째 단계로, 정규식을 사용하여 기사에서 모든 a2e895f50458a10b2f286564b51b8302를 추출합니다.

코드는 다음과 같습니다.

$message //文章内容 
//正则(这个还不是) 
$reg = "/<img[^>]*src=\"(http:\/\/(.+)\/(.+)\.(jpg|gif|bmp|bnp))\"/isU"; 
//把抠出来的 img 地址存放到 $img_array 变量中 
preg_match_all($reg, $message, $img_array, PREG_PATTERN_ORDER); 
//过滤重复的图片 
$img_array = array_unique($img_array[1]);

두 번째 단계. $img_array 배열을 반복합니다. 이미지를 저장하고 기사 위치를 바꿉니다.

코드는 다음과 같습니다.

foreach ($img_array as $img){ 
//判断是否是自己网站上的 图片 
if(&#39;xxx.com&#39; != get_domain($img)){// 如果这个图片不是自己服务器上的 
//读取图片文件 
$Gimg = new GetImage(); 
$Gimg->source = $img; 
$Gimg->save_to = &#39;./data/temp/&#39;; 
$FILE = $Gimg->download(); //图片移动到本地 
//保存到相册 得到图片保存的位置 
$img_path = pic_save($FILE,0,&#39;&#39;); 
//文本路径替换 
$message = str_replace($img, $img_path, $message); 
} 
}

.... 이때 이미지는 $message에서 서버의 로컬 주소가 자체적으로 대체되었으며, 이미지도 자체 서버에 저장됩니다.

코드는 다음과 같습니다.

//下面一个函数 和 类是从网络上找的. 
//从url中获得域名 
function get_domain($url){ 
$pattern = "/[\w-]+\.(com|net|org|gov|cc|biz|info|cn)(\.(cn|hk))*/"; 
preg_match($pattern, $url, $matches); 
if(count($matches) > 0) { 
return $matches[0]; 
}else{ 
$rs = parse_url($url); 
$main_url = $rs["host"]; 
if(!strcmp(long2ip(sprintf("%u",ip2long($main_url))),$main_url)) { 
return $main_url; 
}else{ 
$arr = explode(".",$main_url); 
$count=count($arr); 
$endArr = array("com","net","org","3322");//com.cn net.cn 等情况 
if (in_array($arr[$count-2],$endArr)){ 
$domain = $arr[$count-3].".".$arr[$count-2].".".$arr[$count-1]; 
}else{ 
$domain = $arr[$count-2].".".$arr[$count-1]; 
} 
return $domain; 
}// end if(!strcmp...) 
}// end if(count...) 
}// end function 
// 从远程吧图片载到服务器本地 的 类 
class GetImage { 
var $source; 
var $save_to; 
var $quality; 
function download($method = &#39;curl&#39;) { 
$info = @GetImageSize($this->source); 
$mime = $info[&#39;mime&#39;]; 
// What sort of image? 
$type = substr(strrchr($mime, &#39;/&#39;), 1); 
switch ($type){ 
case &#39;jpeg&#39;: 
$image_create_func = &#39;ImageCreateFromJPEG&#39;; 
$image_save_func = &#39;ImageJPEG&#39;; 
$new_image_ext = &#39;jpg&#39;; 
// Best Quality: 100 
$quality = isSet($this->quality) ? $this->quality : 100; 
break; 
case &#39;png&#39;: 
$image_create_func = &#39;ImageCreateFromPNG&#39;; 
$image_save_func = &#39;ImagePNG&#39;; 
$new_image_ext = &#39;png&#39;; 
// Compression Level: from 0 (no compression) to 9 
$quality = isSet($this->quality) ? $this->quality : 0; 
break; 
case &#39;bmp&#39;: 
$image_create_func = &#39;ImageCreateFromBMP&#39;; 
$image_save_func = &#39;ImageBMP&#39;; 
$new_image_ext = &#39;bmp&#39;; 
break; 
case &#39;gif&#39;: 
$image_create_func = &#39;ImageCreateFromGIF&#39;; 
$image_save_func = &#39;ImageGIF&#39;; 
$new_image_ext = &#39;gif&#39;; 
break; 
case &#39;vnd.wap.wbmp&#39;: 
$image_create_func = &#39;ImageCreateFromWBMP&#39;; 
$image_save_func = &#39;ImageWBMP&#39;; 
$new_image_ext = &#39;bmp&#39;; 
break; 
case &#39;xbm&#39;: 
$image_create_func = &#39;ImageCreateFromXBM&#39;; 
$image_save_func = &#39;ImageXBM&#39;; 
$new_image_ext = &#39;xbm&#39;; 
break; 
default: 
$image_create_func = &#39;ImageCreateFromJPEG&#39;; 
$image_save_func = &#39;ImageJPEG&#39;; 
$new_image_ext = &#39;jpg&#39;; 
} 
if(isSet($this->set_extension)){ 
$ext = strrchr($this->source, "."); 
$strlen = strlen($ext); 
$new_name = basename(substr($this->source, 0, -$strlen)).&#39;.&#39;.$new_image_ext; 
}else{ 
$new_name = basename($this->source); 
} 
$save_to = $this->save_to."/blog_insert_temp_".time().mt_rand(1,99).".".$new_image_ext; 
//输出对象 组成跟$_FILE变量一样 得到后自己和平常图片上传处理一样了 
$img_info[&#39;name&#39;] = basename($this->source); 
$img_info[&#39;type&#39;] = $mime; 
$img_info[&#39;size&#39;] = 1000; 
$img_info[&#39;tmp_name&#39;] = $save_to; 
$img_info[&#39;error&#39;] = 0; 
if($method == &#39;curl&#39;){ 
$save_image = $this->LoadImageCURL($save_to); 
}elseif($method == &#39;gd&#39;){ 
$img = $image_create_func($this->source); 
if(isSet($quality)){ 
$save_image = $image_save_func($img, $save_to, $quality); 
}else{ 
$save_image = $image_save_func($img, $save_to); 
} 
} 
return $img_info; 
} 
function LoadImageCURL($save_to){ 
$ch = curl_init($this->source); 
$fp = fopen($save_to, "wb"); 
// set URL and other appropriate options 
$options = array(CURLOPT_FILE => $fp, 
CURLOPT_HEADER => 0, 
CURLOPT_FOLLOWLOCATION => 1, 
CURLOPT_TIMEOUT => 60); // 1 minute timeout (should be enough) 
curl_setopt_array($ch, $options); 
curl_exec($ch); 
curl_close($ch); 
fclose($fp); 
} 
}

위 내용은 PHP를 사용하여 원격 사진을 로컬로 수집하는 방법의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

성명:
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.