当前位置:首页 > PHP教程 > php高级应用 > 列表

分享一个PHP采集远程图片

发布:smiling 来源: PHP粉丝网  添加日期:2014-09-22 15:20:06 浏览: 评论:0 

利用php来采集图片方法很简单本实例使用了fopen来保存文件了,但在此小编建义大家不要使用此方法来获取,如果数据量大量fopen函数性能比curl差得远了,所以大家可尝试改进使用curl来处理,代码如下:

  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. //函数read_filetext()取得图片内容。使用fopen打开图片文件,然后fread读取图片文件内容。  
  25. function read_filetext($filepath){  
  26.     $filepath=trim($filepath);  
  27.     $htmlfp=@fopen($filepath,”r”);  
  28.     //远程  
  29.     if(strstr($filepath,”://”)){  
  30.         while($data=@fread($htmlfp,500000)){  
  31.             $string.=$data;  
  32.         }  
  33.     }  
  34.     //本地  
  35.     else{  
  36.         $string=@fread($htmlfp,@filesize($filepath));  
  37.     }  
  38.     @fclose($htmlfp);  
  39.     return $string;  
  40.  
  41.  
  42. //函数write_filetext()写文件,将图片内容fputs写入文件中,即保存图片文件。  
  43. function write_filetext($filepath,$string){  
  44.     //$string=stripSlashes($string);  
  45.     $fp=@fopen($filepath,”w”);  
  46.     @fputs($fp,$string);  
  47.     @fclose($fp);  
  48.  
  49.  
  50. //函数get_filename()获取图片名称,也可以自定义要保存的文件名。  
  51. function get_filename($filepath){  
  52.     $fr=explode(“/”,$filepath);  
  53.     $count=count($fr)-1;  
  54.     return $fr[$count];  
  55.  
  56.  
  57. //然后将几个函数组合,在函数save_pic()中调用,最后返回保存后的图片路径。  
  58. function save_pic($url,$savepath=”){  
  59.     //处理地址  
  60.     $url=trim($url);  
  61.     $url=str_replace(“ ”,”%20″,$url);  
  62.     //读文件  
  63.     $string=read_filetext($url);  
  64.     if(emptyempty($string)){  
  65.         echo ’读取不了文件’;exit;  
  66.     }  
  67.     //文件名  
  68.     $filename = get_filename($url);  
  69.     //存放目录  
  70.     make_dir($savepath); //建立存放目录  
  71.     //文件地址  
  72.     $filepath = $savepath.$filename;  
  73.     //写文件  
  74.     write_filetext($filepath,$string);  
  75.     return $filepath;  
  76.  
  77.  
  78. //最后一步就是调用save_pic()函数保存图片,我们使用以下代码做测试。  
  79. //目标图片地址  
  80. //$pic = ”/1205/06/2776119_end1_thumb.jpg”;  
  81. // for($i=100; $i<=204; $i++)  
  82. // {  
  83.     // $pic = ’http://cache.soso.com/img/img/e’.$i.’.gif’;  
  84. ////保存目录  
  85. // $savepath = ”images/”;  
  86. // echo save_pic($pic,$savepath).”<br />”;  
  87. // } 
  88.  
  89.  
  90. /*  
  91. 实际应用中,我们可能会采集某个站点的内容,比如产品信息,包括采集防盗链的图片保存到网站上服务器上。这时我们可以使用正则匹配页面内容,将页面中相匹配的图片都找出来,然后分别下载到网站服务器上,完成图片的采集。以下代码仅供测试:  
  92. */  
  93. function get_pic($cont,$path){  
  94.     $pattern_src = ’/<[img|IMG].*?src=['|"](.*?(?:[.gif|.jpg]))['|"].*?[/]?>/’;  
  95.     $num = preg_match_all($pattern_src$cont$match_src);  
  96.     $pic_arr = $match_src[1]; //获得图片数组  
  97.     foreach ($pic_arr as $pic_item) { //循环取出每幅图的地址  
  98.         save_pic($pic_item,$path); //下载并保存图片  
  99.         echo ”[OK]..!<br />”;  
  100.     }  
  101.  
  102. //然后我们通过分析页面内容,将主体内容找出来,调用get_pic()实现图片的保存。 
  103.  
  104. //我们采集太平洋电脑网上一篇关于手机报道内容页的图片  php100.com  
  105. $url = ”你的网地址”; 
  106.  
  107. $content = file_get_contents($url);//获取网页内容  
  108. $preg = ’#<div class=”art_con”>(.*)<div class=”ivy620 ivy620Ex”></div>#iUs’;  
  109. preg_match_all($preg$content$arr);  
  110. $cont = $arr[1][0];  
  111. get_pic($cont,’img/’); 
  112. //开源代码phpfensi.com 
  113. /*  
  114. 以上代码笔者亲测,可以采集图片,但是还有些场景没考虑进去,比如目标网站做了302多次跳转的,目标网站做了多种防采集的,留给喜欢折腾的同学去试试吧。  
  115. */  
  116. ?>

Tags: PHP采集图片 PHP远程采集

分享到: