分享一個PHP採集遠程圖片

來源:互聯網
上載者:User

 

  1. <?php 
  2. /*使用PHP實現採集遠程圖片功能。基本流程: 
  3.  
  4. 1、擷取目標網站圖片地址。 
  5.  
  6. 2、讀取圖片內容。 
  7.  
  8. 3、建立要儲存圖片的路徑並命名圖片名稱。 
  9.  
  10. 4、寫入圖片內容。 
  11.  
  12. 5、完成。 
  13.  
  14. 我們通過寫幾個函數來實現這一過程。*/ 
  15.  
  16. //函數make_dir()建立目錄。判斷要儲存的圖片檔案目錄是否存在,如果不存在則建立目錄,並且將目錄設定為可寫入權限。 
  17. function make_dir($path){  
  18.     if(!file_exists($path)){//不存在則建立  
  19.         $mk=@mkdir($path,0777); //許可權  
  20.         @chmod($path,0777);  
  21.     }  
  22.     return true;  
  23. }  
  24.  
  25. //函數read_filetext()取得圖片內容。使用fopen開啟圖片檔案,然後fread讀取圖片檔案內容。 
  26. function read_filetext($filepath){  
  27.     $filepath=trim($filepath);  
  28.     $htmlfp=@fopen($filepath,"r");  
  29.     //遠程  
  30.     if(strstr($filepath,"://")){  
  31.         while($data=@fread($htmlfp,500000)){  
  32.             $string.=$data;  
  33.         }  
  34.     }  
  35.     //本地  
  36.     else{  
  37.         $string=@fread($htmlfp,@filesize($filepath));  
  38.     }  
  39.     @fclose($htmlfp);  
  40.     return $string;  
  41. }  
  42.  
  43.  
  44. //函數write_filetext()寫檔案,將圖片內容fputs寫入檔案中,即儲存圖片檔案。 
  45. function write_filetext($filepath,$string){  
  46.     //$string=stripSlashes($string);  
  47.     $fp=@fopen($filepath,"w");  
  48.     @fputs($fp,$string);  
  49.     @fclose($fp);  
  50. }  
  51.  
  52.  
  53. //函數get_filename()擷取圖片名稱,也可以自訂要儲存的檔案名稱。 
  54. function get_filename($filepath){  
  55.     $fr=explode("/",$filepath);  
  56.     $count=count($fr)-1;  
  57.     return $fr[$count];  
  58. }  
  59.  
  60.  
  61. //然後將幾個函數組合,在函數save_pic()中調用,最後返回儲存後的圖片路徑。 
  62. function save_pic($url,$savepath=''){  
  63.     //處理地址  
  64.     $url=trim($url);  
  65.     $url=str_replace(" ","%20",$url);  
  66.     //讀檔案  
  67.     $string=read_filetext($url);  
  68.     if(emptyempty($string)){  
  69.         echo '讀取不了檔案';exit;  
  70.     }  
  71.     //檔案名稱  
  72.     $filename = get_filename($url);  
  73.     //存放目錄  
  74.     make_dir($savepath); //建立存放目錄  
  75.     //檔案地址  
  76.     $filepath = $savepath.$filename;  
  77.     //寫檔案  
  78.     write_filetext($filepath,$string);  
  79.     return $filepath;  
  80. }  
  81.  
  82.  
  83. //最後一步就是調用save_pic()函數儲存圖片,我們使用以下代碼做測試。 
  84. //靶心圖表片地址  
  85. //$pic = "/program/UploadPic/2013-5/2013510152511166.jpg";  
  86. // for($i=100; $i<=204; $i++) 
  87. // { 
  88.     // $pic = 'http://cache.soso.com/img/img/e'.$i.'.gif'; 
  89. ////儲存目錄  
  90. // $savepath = "images/";  
  91. // echo save_pic($pic,$savepath)."<br />";  
  92. // } 
  93.  
  94.  
  95. /* 
  96. 實際應用中,我們可能會採集某個網站的內容,比如產品資訊,包括採集防盜鏈的圖片儲存到網站上伺服器上。這時我們可以使用正則匹配頁面內容,將頁面中相匹配的圖片都找出來,然後分別下載到網站伺服器上,完成圖片的採集。以下代碼僅供測試: 
  97. */ 
  98. function get_pic($cont,$path){  
  99.     $pattern_src = '/<[imgIMG].*?src=&/.jpg]))[\'\"].*?[\/]?>/';  
  100.     $num = preg_match_all($pattern_src, $cont, $match_src);  
  101.     $pic_arr = $match_src[1]; //獲得圖片數組  
  102.     foreach ($pic_arr as $pic_item) { //迴圈取出每幅圖的地址  
  103.         save_pic($pic_item,$path); //下載並儲存圖片  
  104.         echo "[OK]..!<br />";  
  105.     }  
  106. }  
  107.  
  108. //然後我們通過分析頁面內容,將主體內容找出來,調用get_pic()實現圖片的儲存。 
  109.   
  110. //我們採集太平洋電腦網上一篇關於手機報道內容頁的圖片  php100.com
  111. $url = "http://gz.pconline.com.cn/321/3215791.html";  
  112.   
  113. $content = file_get_contents($url);//擷取網頁內容  
  114. $preg = '#<div class="art_con">(.*)<div class="ivy620 ivy620Ex"></div>#iUs';  
  115. preg_match_all($preg, $content, $arr);  
  116. $cont = $arr[1][0];   
  117. get_pic($cont,'img/');  
  118.  
  119. /* 
  120. 以上代碼筆者親測,可以採集圖片,但是還有些情境沒考慮進去,比如目標網站做了302多次跳轉的,目標網站做了多種防採集的,留給喜歡折騰的同學去試試吧。 
  121. */ 
  122. ?> 


相關文章

Cloud Intelligence Leading the Digital Future

Alibaba Cloud ACtivate Online Conference, Nov. 20th & 21st, 2019 (UTC+08)

Register Now >

Starter Package

SSD Cloud server and data transfer for only $2.50 a month

Get Started >

Alibaba Cloud Free Trial

Learn and experience the power of Alibaba Cloud with a free trial worth $300-1200 USD

Learn more >

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。