ホームページ  >  記事  >  php教程  >  PHP 記事内のリモート画像がローカル コードに収集される

PHP 記事内のリモート画像がローカル コードに収集される

WBOY
WBOYオリジナル
2016-06-13 12:22:08904ブラウズ

最初のステップでは、正規表現を使用して記事からすべての

コードをコピーします。コードは次のとおりです。 :

$message //記事の内容

//通常(まだです)
$reg = "/]*src="(http ://(. ) /(. ).(jpg|gif|bmp|bnp))"/isU";
//抽出した画像アドレスを $img_array 変数に格納
preg_match_all($reg, $ message, $img_array , PREG_PATTERN_ORDER);
//重複する画像をフィルターします
$img_array = array_unique($img_array[1]);


ステップ 2. $img_array 配列をループします。画像 記事の場所を保存して置き換えます



コードをコピー コードは次のとおりです:

foreach ($img_array as $img){

/ /画像が自分のウェブサイト上にあるかどうかを判断します
if('xxx.com' != get_domain($img)){// 画像が自分のサーバー上にない場合
//読み取り画像ファイル
$Gimg = new GetImage();
$Gimg->source = $img;
$Gimg->save_to = './data/temp/'; FILE = $Gimg-> ;down​​load(); //写真をローカルの場所に移動します
//写真の保存場所を取得するにはアルバムに保存します
$img_path = pic_save($FILE,0, '');
//テキストパス置換
$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); " ホスト"];
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...)
} // 関数の終了
// リモート バーからローカル サーバーに画像をロードするクラス
class GetImage {
var $source;
var $quality;
function download($method = 'curl') {
$info = @GetImageSize($this->source);
$mime = $info['mime'];どのような画像ですか?
$type = substr($mime, '/'), 1);
switch ($type){
case 'jpeg':
$image_create_func = ' ImageCreateFromJPEG';
$image_save_func = 'ImageJPEG';
$new_image_ext = 'jpg';
// 最高品質: 100
$quality = isSet($this->quality) ? ->品質: 100;
break;
ケース 'png':
$image_create_func = 'ImagePNG';
/ / 圧縮レベル: 0 (圧縮なし) から 9
$quality = isSet($this->quality) $this->quality : 0;
break
case; 'bmp':
$image_create_func = 'ImageCreateFromBMP';
$new_image_ext = 'bmp';
case ':
$image_create_func = ' ImageCreateFromGIF';
$image_save_func = 'gif';
case 'vnd.wap.wbmp':
$image_create_func = 'ImageCreateFromWBMP';
$image_save_func = 'ImageWBMP';
case 'xbm':
$image_createFromXBM'; $image_save_func = 'ImageXBM';
$new_image_ext = 'xbm';
デフォルト:
$image_create_func = 'ImageJPEG'; $new_image_ext = ' jpg';
}
if(isSet($this->set_extension)){
$ext = strrchr($this->source, "."); $strlen = strlen ($ext);
$new_name = Basename(substr($this->source, 0, -$strlen)).'.'.$new_image_ext;
$new_name = ベース名 ($this->source);
}
$save_to = $this->save_to."/blog_insert_temp_".time().mt_rand(1,99)."."。 $new_image_ext;
//出力オブジェクトの構成は $_FILE 変数と同じです。取得後は通常の画像アップロード処理と同じです。 this->source);
$img_info['type'] = $mime;
$img_info['tmp_name'] = $save_to; >$img_info['error'] = 0;
if($method == 'curl'){
$save_image = $this->LoadImageCURL($save_to); == 'gd'){
$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; LoadImageCURL($save_to){
$ch =curl_init( $this->source);
$fp = fopen($save_to, "wb"); // URL およびその他の適切なオプションを設定します。 🎜>$options = array(CURLOPT_FILE => $fp,
CURLOPT_HEADER => 0,
CURLOPT_FOLLOWLOCATION => 1,
CURLOPT_TIMEOUT => 60); // 1 分のタイムアウト (十分なはずです)
curl_setopt_array($ch, $options);
curl_exec($ch);
fclose($fp); 🎜>

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。