PHP把文章中的遠程圖片采集到本地

今天寫瞭一個這個功能, 拿出來跟php100的朋友一起分享

第一步. 先從文章中把所有<img …> 用正則 摳出來.

    $message   //文章內容
    //正則(這個還不是)
    $reg = "/<img[^>]*src="(https://(.+)/(.+).(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]);
[/php]
第二步. 把$img_array 數組循環一下. 做圖片保存和文章位置替換
[php]
    foreach ($img_array as $img){
        //判斷是否是自己網站上的 圖片
        if(xxx.com != get_domain($img)){// 如果這個圖片不是自己服務器上的
            //讀取圖片文件
            $Gimg = new GetImage();
            $Gimg->source = $img;
            $Gimg->save_to = ./data/temp/;
            $FILE =  $Gimg->download(); //圖片移動到本地
            //保存到相冊 得到圖片保存的位置
            $img_path = pic_save($FILE,0,);
            //文本路徑替換
            $message = str_replace($img, $img_path, $message);
           
        }
    }

    ….這時候 $message 裡面已經圖片已經替換為自己服務器本地的地址,並且圖片也保存到自己的服務器上.
[/php]

[php]
//下面一個函數 和 類是從網絡上找的.

//從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

發佈留言