php

位置:IT落伍者 >> php >> 浏览文章

使用PHP采集远程图片


发布日期:2018年11月09日
 
使用PHP采集远程图片

当我们需要采集网络上的某个网页内容时如果目标网站上的图片做了防盗链的话我们直接采集过来的图片在自己网站上是不可用的那么我们使用程序将目标网站上的图片下载到我们网站服务器上然后就可调用图片了

本文将使用PHP实现采集远程图片功能基本流程获取目标网站图片地址读取图片内容创建要保存图片的路径并命名图片名称写入图片内容完成我们通过写几个函数来实现这一过程函数make_dir()建立目录判断要保存的图片文件目录是否存在如果不存在则创建目录并且将目录设置为可写权限function make_dir($path){if(!file_exists($path)){//不存在则建立$mk=@mkdir($path); //权限@chmod($path);}return true;}函数read_filetext()取得图片内容使用fopen打开图片文件然后fread读取图片文件内容function read_filetext($filepath){$filepath=trim($filepath);$htmlfp=@fopen($filepath"r");//远程if(strstr($filepath"://")){while($data=@fread($htmlfp)){$string=$data;}}//本地else{$string=@fread($htmlfp@filesize($filepath));}@fclose($htmlfp);return $string;}函数write_filetext()写文件将图片内容fputs写入文件中即保存图片文件function write_filetext($filepath$string){//$string=stripSlashes($string);$fp=@fopen($filepath"w");@fputs($fp$string);@fclose($fp);}函数get_filename()获取图片名称也可以自定义要保存的文件名function get_filename($filepath){$fr=explode("/"$filepath);$count=count($fr);return $fr[$count];}然后将几个函数组合在函数save_pic()中调用最后返回保存后的图片路径function save_pic($url$savepath=){//处理地址$url=trim($url);$url=str_replace(" ""%"$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()函数保存图片我们使用以下代码做测试//目标图片地址$pic = "/program/UploadPic//jpg";//保存目录$savepath = "images/";echo save_pic($pic$savepath);实际应用中我们可能会采集某个站点的内容比如产品信息包括采集防盗链的图片保存到网站上服务器上这时我们可以使用正则匹配页面内容将页面中相匹配的图片都找出来然后分别下载到网站服务器上完成图片的采集以下代码仅供测试function get_pic($cont$path){$pattern_src = /<[imgIMG]*?src=/picture/allimg//BKgif/jpg]))["]*?[/]?>/;$num = preg_match_all($pattern_src $cont $match_src);$pic_arr = $match_src[]; //获得图片数组foreach ($pic_arr as $pic_item) { //循环取出每幅图的地址save_pic($pic_item$path); //下载并保存图片echo "[OK]!";}}然后我们通过分析页面内容将主体内容找出来调用get_pic()实现图片的保存//我们采集太平洋电脑网上一篇关于手机报道内容页的图片

$url="";$content=file_get_contents($url);//获取网页内容$preg=#<divclass="art_con">(*)<divclass="ivyivyEx"></div>#iUs;preg_match_all($preg$content$arr);$cont=$arr[][];get_pic($contimg/);

以上代码笔者亲测可以采集图片但是还有些场景没考虑进去比如目标网站做了多次跳转的目标网站做了多种防采集的留给喜欢折腾的同学去试试吧               

上一篇:php仿QQ验证码的实例分析

下一篇:php foreach与for语句用法区别介绍