首頁 >後端開發 >php教程 >PHP擷取遠端圖片的實例程式碼

PHP擷取遠端圖片的實例程式碼

WBOY
WBOY原創
2016-07-25 08:55:37882瀏覽
  1. function make_dir($path){
  2. if(!file_exists($path)){//不存在則建立
  3. $mk=@mkdir($path,0777); //權限
  4. @chmod($path,0777);
  5. }
  6. return true;
  7. }
複製程式碼

函數read_filetext()取得圖片內容。 使用fopen開啟圖片文件,然後fread讀取圖片檔案內容。

  1. function read_filetext($filepath){
  2. $filepath=trim($filepath);
  3. $htmlfp@ fopen($filepath,"r");
  4. //遠端
  5. if(strstr($filepath,"://")){
  6. while($data=@fread($htmlfp,500000) ){
  7. $string.=$data;
  8. }
  9. }
  10. //本地
  11. else{
  12. $string=@fread($htmlfp,@filesize($filepath)) ;
  13. }
  14. @fclose($htmlfp);
  15. return $string;
  16. }
複製程式碼

複製程式碼
    函數
  1. 複製程式碼
  2. 函數
  3. 函式寫入文件,將圖片內容fputs寫入文件中,即儲存圖片檔案。
function write_filetext($filepath,$string){ //$string=stripSlashes($string); > $fp=@fopen($filepath,"w");
@fputs($fp,$string);

@fclose($fp);

}
  1. 複製程式碼
  2. 函數get_filename()取得圖片名稱,也可以自訂要儲存的檔案名稱。
function get_filename($filepath){
$fr=explode("/",$filepath);

$count=count($fr)-1;

return $fr[$count];
}
  1. 複製程式碼
  2. 然後,將幾個函數組合,在函數save_pic()中調用,最後返回已儲存的圖片路徑。
  3. function save_pic($url,$savepath=''){
  4. //處理位址
  5. $url= trim($url);
  6. $url=str_replace(" ","%20",$url);
  7. //讀取檔案
  8. $string=read_filetext($url);
  9. if( empty($string)){
  10. echo '讀取不了檔案';exit;
  11. }
  12. //檔名
  13. $filename = get_filename($url);
//存放目錄
make_dir($savepath); //建立存放目錄 //檔案位址 $filepath = $savepath.$filename;
//寫入檔案

write_filetext($filepath,$string );

return $filepath;
}
  1. 複製程式碼
  2. 最後一步,呼叫save_pic()函數儲存圖片,使用以下程式碼做測試。
//目標圖片位址$pic = "http://img0.pconline.com.cn/pconline/ 1205/06/2776119_end1_thumb.jpg";
//保存目錄

$savepath = "images/";

echo save_pic($pic,$savepath);

複製代碼
  1. 實際應用中,可能會採集某個站點的內容,比如產品信息,包括採集防盜鏈的圖片保存到網站上服務器上。 這時可以使用正規比對頁面內容,將頁面中相符的圖片都找出來,然後分別下載到網站伺服器上,完成圖片的採集。
  2. 測試範例:
  3. function get_pic($cont,$path){
  4. $pattern_src = '//';
$num = preg_match_all($pattern_src , $cont, $match_src);
$pic_arr = $match_src[1]; //取得圖片陣列 foreach ($pic_arr as $pic_item) { //循環取出每張圖的位址 save_pic ($pic_item,$path); //下載並儲存圖片
echo "[OK]..!";

}

}
  1. 複製程式碼
  2. 然後,透過分析頁面內容,將主體內容找出來,呼叫get_pic()實現圖片的保存。
  3. //採集太平洋電腦網路上一篇關於手機報道內容頁的圖片
$url = "http:// gz.pconline.com.cn/321/3215791.html";
$content = file_get_contents($url);//取得網頁內容$preg = '#
(.*)
#iUs';
preg_match_all($preg, $content, $arr); $cont = $arr[1][0 ]; get_pic($cont,'img/'); 複製程式碼

以上代碼筆者親測,可以採集圖片,但是還有些場景沒考慮進去,比如目標網站做了302多次跳轉的,目標網站做了多種防採集的,大家自行研究下吧。



陳述:
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn