zoukankan      html  css  js  c++  java
  • PHP采集远程图片


     

      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 = "http://img0.pconline.com.cn/pconline/1205/06/2776119_end1_thumb.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 = '/<[img|IMG].*?src=[\'|\"](.*?(?:[\.gif|\.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. ?>
  • 相关阅读:
    重新整理数据结构与算法—— 斐波那契二分查找法[十四]
    重新整理数据结构与算法—— 插值二分查找法[十三]
    重新整理数据结构与算法—— 二分查找法[十二]
    Tuple和ValueTuple
    安装 php_mongodb.dll的坑
    前端——localStorage详细总结
    前端——Vue.js学习总结一
    数据库SQL语句大全,最常用的SQL语句
    Java——多线程超详细总结
    Java——异常那些事
  • 原文地址:https://www.cnblogs.com/BeacherGong/p/3064225.html
Copyright © 2011-2022 走看看