仓酷云

标题: PHP编程:利用PHP收罗远程图片 [打印本页]

作者: 海妖    时间: 2015-1-16 22:15
标题: PHP编程:利用PHP收罗远程图片
学校并没有那么多的时间可以让我们在实际开发上面。
当我们必要收罗收集上的某个网页内容时,假如方针网站上的图片做了防盗链的话,我们间接收罗过去的图片在本人网站上是不成用的。那末我们利用程序将方针网站上的图片下载到我们网站服务器上,然后便可挪用图片了。
本文将利用PHP完成收罗远程图片功效。基础流程:
1、猎取方针网站图片地点。
2、读取图片内容。
3、创立要保留图片的路径并定名图片称号。
4、写进图片内容。
5、完成。
我们经由过程写几个函数来完成这一历程。
函数make_dir()创建目次。判别要保留的图片文件目次是不是存在,假如不存在则创立目次,而且将目次设置为可写权限。
  1. functionmake_dir($path){if(!file_exists($path)){//不存在则创建$mk=@mkdir($path,0777);//权限@chmod($path,0777);}returntrue;}
复制代码
函数read_filetext()获得图片内容。利用fopen翻开图片文件,然后fread读取图片文件内容。
  1. functionread_filetext($filepath){$filepath=trim($filepath);$htmlfp=@fopen($filepath,"r");//远程if(strstr($filepath,"://")){while($data=@fread($htmlfp,500000)){$string.=$data;}}//当地else{$string=@fread($htmlfp,@filesize($filepath));}@fclose($htmlfp);return$string;}
复制代码
函数write_filetext()写文件,将图片内容fputs写进文件中,即保留图片文件。
  1. functionwrite_filetext($filepath,$string){//$string=stripSlashes($string);$fp=@fopen($filepath,"w");@fputs($fp,$string);@fclose($fp);}
复制代码
函数get_filename()猎取图片称号,也能够自界说要保留的文件名。
  1. functionget_filename($filepath){$fr=explode("/",$filepath);$count=count($fr)-1;return$fr[$count];}
复制代码
然后将几个函数组合,在函数save_pic()中挪用,最初前往保留后的图片路径。
  1. functionsave_pic($url,$savepath=){//处置地点$url=trim($url);$url=str_replace("","%20",$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()函数保留图片,我们利用以下代码做测试。
  1. //方针图片地点$pic="/program/UploadPic/2013-4/201343155341353.jpg";//保留目次$savepath="images/";echosave_pic($pic,$savepath);
复制代码
实践使用中,我们大概会收罗某个站点的内容,好比产物信息,包含收罗防盗链的图片保留到网站上服务器上。这时候我们可使用正则婚配页面内容,将页面中相婚配的图片都找出来,然后分离下载到网站服务器上,完成图片的收罗。以下代码仅供测试:
  1. functionget_pic($cont,$path){$pattern_src=/<[imgIMG].*?src=http://www.php100.com/html/webkaifa/PHP/PHPyingyong/2013/0401/[//"](.*?(?:[/.gif/.jpg]))["].*?[/]?>/;$num=preg_match_all($pattern_src,$cont,$match_src);$pic_arr=$match_src[1];//取得图片数组foreach($pic_arras$pic_item){//轮回掏出每幅图的地点save_pic($pic_item,$path);//下载并保留图片echo"[OK]..!";}}
复制代码
然后我们经由过程剖析页面内容,将主体内容找出来,挪用get_pic()完成图片的保留。
  1. //我们收罗宁靖洋电脑网上一篇关于手机报导内容页的图片$url="http://gz.pconline.com.cn/321/3215791.html";$content=file_get_contents($url);//猎取网页内容$preg=#<divclass="art_con">(.*)<divclass="ivy620ivy620Ex"></div>#iUs;preg_match_all($preg,$content,$arr);$cont=$arr[1][0];get_pic($cont,img/);
复制代码
以上代码笔者亲测,能够收罗图片,可是另有些场景没思索出来,好比方针网站做了302屡次跳转的,方针网站做了多种防收罗的,留给喜好折腾的同砚往尝尝吧。
到现在,对排版还是不很熟练,经常会排不好。
作者: 若相依    时间: 2015-1-19 06:19
本文当是我的笔记啦,遇到的问题随时填充
作者: 爱飞    时间: 2015-1-27 05:56
php是动态网站开发的优秀语言,在学习的时候万万不能冒进。在系统的学习前,我认为不应该只是追求实现某种效果,因为即使你复制他人的代码调试成功,实现了你所期望的效果,你也不了解其中的原理。
作者: 再现理想    时间: 2015-2-11 03:44
实践是检验自己会不会的真理。
作者: 小女巫    时间: 2015-3-1 21:04
没接触过框架的人,也不用害怕,其实框架就是一种命名规范及插件,学会一个框架其余的框架都很好上手的。
作者: 不帅    时间: 2015-3-11 00:08
当然这种网站的会员费就几十块钱。
作者: 精灵巫婆    时间: 2015-3-17 16:21
兴趣是最好的老师,百度是最好的词典。
作者: 兰色精灵    时间: 2015-3-24 12:55
其实也不算什么什么心得,在各位大侠算是小巫见大巫了吧,望大家不要见笑,若其中有错误的地方请各位大虾斧正。




欢迎光临 仓酷云 (http://ckuyun.com/) Powered by Discuz! X3.2