當我們需要采集網絡上的某個網頁內容時如果目標網站上的圖片做了防盜鏈的話我們直接采集過來的圖片在自己網站上是不可用的那麼我們使用程序將目標網站上的圖片下載到我們網站服務器上然後就可調用圖片了
本文將使用PHP實現采集遠程圖片功能
基本流程
獲取目標網站圖片地址
讀取圖片內容
創建要保存圖片的路徑並命名圖片名稱
寫入圖片內容
完成
我們通過寫幾個函數來實現這一過程
函數make_dir()建立目錄
判斷要保存的圖片文件目錄是否存在
如果不存在則創建目錄
並且將目錄設置為可寫權限
function make_dir($path){
if(!file_exists($path)){//不存在則建立
$mk=@mkdir($path
); //權限
@chmod($path
);
}
return true;
}
函數read_filetext()取得圖片內容
使用fopen打開圖片文件
然後fread讀取圖片文件內容
function read_filetext($filepath){
$filepath=trim($filepath);
$htmlfp=@fopen($filepath
"r");
//遠程
if(strstr($filepath
"://")){
while($data=@fread($htmlfp
)){
$string
=$data;
}
}
//本地
else{
$string=@fread($htmlfp
@filesize($filepath));
}
@fclose($htmlfp);
return $string;
}
函數write_filetext()寫文件
將圖片內容fputs寫入文件中
即保存圖片文件
function write_filetext($filepath
$string){
//$string=stripSlashes($string);
$fp=@fopen($filepath
"w");
@fputs($fp
$string);
@fclose($fp);
}
函數get_filename()獲取圖片名稱
也可以自定義要保存的文件名
function get_filename($filepath){
$fr=explode("/"
$filepath);
$count=count($fr)
;
return $fr[$count];
}
然後將幾個函數組合
在函數save_pic()中調用
最後返回保存後的圖片路徑
function save_pic($url
$savepath=
){
//處理地址
$url=trim($url);
$url=str_replace(" "
"%
"
$url);
//讀文件
$string=read_filetext($url);
if(empty($string)){
echo
讀取不了文件
;exit;
}
//文件名
$filename = get_filename($url);
//存放目錄
make_dir($savepath); //建立存放目錄
//文件地址
$filepath = $savepath
$filename;
//寫文件
write_filetext($filepath
$string);
return $filepath;
}
最後一步就是調用save_pic()函數保存圖片
我們使用以下代碼做測試
//目標圖片地址
$pic = "/program/UploadPic/
/
jpg";
//保存目錄
$savepath = "images/";
echo save_pic($pic
$savepath);
實際應用中
我們可能會采集某個站點的內容
比如產品信息
包括采集防盜鏈的圖片保存到網站上服務器上
這時我們可以使用正則匹配頁面內容
將頁面中相匹配的圖片都找出來
然後分別下載到網站服務器上
完成圖片的采集
以下代碼僅供測試
function get_pic($cont
$path){
$pattern_src =
/<[imgIMG]
*?src=/picture/allimg/
/
BK
gif/
jpg]))[
"]
*?[/]?>/
;
$num = preg_match_all($pattern_src
$cont
$match_src);
$pic_arr = $match_src[
]; //獲得圖片數組
foreach ($pic_arr as $pic_item) { //循環取出每幅圖的地址
save_pic($pic_item
$path); //下載並保存圖片
echo "[OK]
!";
}
}
然後我們通過分析頁面內容
將主體內容找出來
調用get_pic()實現圖片的保存
//我們采集太平洋電腦網上一篇關於手機報道內容頁的圖片
$url = "";
$content = file_get_contents($url);//獲取網頁內容
$preg = #<div class="art_con">(*)<div class="ivy ivyEx"></div>#iUs;
preg_match_all($preg $content $arr);
$cont = $arr[][];
get_pic($contimg/);
以上代碼筆者親測
可以采集圖片
但是還有些場景沒考慮進去
比如目標網站做了
多次跳轉的
目標網站做了多種防采集的
留給喜歡折騰的同學去試試吧
From:http://tw.wingwit.com/Article/program/PHP/201311/21001.html