php中通过正则表达式下载内容中的远程图片的函数代码


Posted in PHP onJanuary 10, 2012

这段程序其实是属于“小偷程序”的重要部分。 这一段程序只是下载远程图片的那一段而已,程序写的比较简单,大多部分都做了注释。

if (preg_match_all("/http://[^ "']+[.jpg|.gif|.jpeg|.png]+/ui",stripcslashes($content),$aliurl)){ 
$i=0; //多个文件++ 
while(list($key ,$v) = each($aliurl[0])){ 
//echo $v."<br />"; 
$filetype = pathinfo($v, PATHINFO_EXTENSION); //获取后缀名 
$ff = @file_get_contents($v); //获取2进制文件内容 
if(!stripos($v,"3water.com")){//判断是否是自己网站下的图片 
if (!empty($ff)){ //获取到文件就执行下面的操作 
$dir = "upload/".date("Ymd")."/";//指定新的存储路径 
if (!file_exists($dir)){//判断目录是否存在 
@mkdir($dir,511,true); //创建多级目录,511转换成十进制是777具有可执行权限 
} 
$nfn = $dir.date("Ymdhis").$i.".".$filetype; //构建文件的新名字 
$nf = @fopen($nfn,"w"); //创建文件 
fwrite($nf,$ff); //写入文件 
fclose($nf); //关闭文件 
$i++; //多文件++ 
echo "<img src="".$nfn."">"; 
$content = str_replace($v,$nfn, $content);//替换content中的参数 
}else{//获取不到图片则替换为默认图片 
$content = str_replace($v,"/upload/201204/20120417213810742.gif", $content);//替换content中的参数 
} 
} 
} 
}

PHP通过正则表达式下载图片到本地的实现代码

<?php 
/* 
author: ssh_kobe 
date: 20110602 
shortage: 如果网页中的图片路径不是绝对路径,就无法抓取 
*/ 
set_time_limit(0);//抓取不受时间限制 

$URL='http://pp.baidu.com/';//任意网址 

get_pic($URL); 

function get_pic($pic_url) { 
//获取图片二进制流 
$data=CurlGet($pic_url); 
/*利用正则表达式得到图片链接*/ 
$pattern_src = '/<[img|IMG].*?src=[\'|\"](.*?(?:[\.gif|\.jpg]))[\'|\"].*?[\/]?>/'; 
$num = preg_match_all($pattern_src, $data, $match_src); 
$arr_src=$match_src[1];//获得图片数组 
get_name($arr_src); 

echo "<br>finished!!!"; 
return 0; 
} 

/*得到图片类型,并将其保存到与该文件同一目录*/ 
function get_name($pic_arr) 
{ 
//图片类型 
$pattern_type = '/(/.(jpg|bmp|jpeg|gif|png))/'; 

foreach($pic_arr as $pic_item){//循环取出每幅图的地址 
$num = preg_match_all($pattern_type, $pic_item, $match_type); 
$pic_name = get_unique().$match_type[1][0];//改时微秒时间戳命名 
//以流的形式保存图片 
$write_fd = @fopen($pic_name,"wb"); 
@fwrite($write_fd, CurlGet($pic_item)); 
@fclose($write_fd); 
echo "[OK]..!"; 
} 
return 0; 
} 

//通过微秒时间获得唯一ID 
function get_unique(){ 
list($msec, $sec) = explode(" ",microtime()); 
return $sec.intval($msec*1000000); 
} 

//抓取网页内容 
function CurlGet($url){ 
$url=str_replace('&','&',$url); 
$curl = curl_init(); 
curl_setopt($curl, CURLOPT_URL, $url); 
curl_setopt($curl, CURLOPT_HEADER, false); 

//curl_setopt($curl, CURLOPT_REFERER,$url); 
curl_setopt($curl, CURLOPT_USERAGENT, "Mozilla/4.0 (compatible; MSIE 6.0; SeaPort/1.2; Windows NT 5.1; SV1; InfoPath.2)"); 
curl_setopt($curl, CURLOPT_COOKIEJAR, 'cookie.txt'); 
curl_setopt($curl, CURLOPT_COOKIEFILE, 'cookie.txt'); 
curl_setopt($curl, CURLOPT_RETURNTRANSFER, 1); 
curl_setopt($curl, CURLOPT_FOLLOWLOCATION, 0); 
$values = curl_exec($curl); 
curl_close($curl); 
return $values; 
} 
?>

下面查看实例

function get_pic_url($content){
  $pattern="/<[img|IMG].*?src=[\'|\"](.*?(?:[\.gif|\.jpg]))[\'|\"].*?[\/]?>/";//正则
  preg_match_all($pattern,$content,$match);//匹配图片
  return $match[1];//返回所有图片的路径
}

以上就是php中通过正则表达式下载内容中的远程图片的函数代码的详细内容,更多关于正则表达式下载内容中的远程图片的资料请关注三水点靠木其它相关文章!

PHP 相关文章推荐
支持php4、php5的mysql数据库操作类
Jan 10 PHP
解决Codeigniter不能上传rar和zip压缩包问题
Mar 07 PHP
destoon二次开发常用数据库操作
Jun 21 PHP
PHP+iFrame实现页面无需刷新的异步文件上传
Sep 16 PHP
PHP四种基本排序算法示例
Apr 09 PHP
[原创]ThinkPHP中SHOW_RUN_TIME不能正常显示运行时间的解决方法
Oct 10 PHP
PHP中的switch语句的用法实例详解
Oct 21 PHP
Yii净化器CHtmlPurifier用法示例(过滤不良代码)
Jul 15 PHP
php文件类型MIME对照表(比较全)
Oct 07 PHP
Laravel中使用Queue的最基本操作教程
Dec 27 PHP
php微信开发之图片回复功能
Jun 14 PHP
PHP切割汉字的常用方法实例总结
Apr 27 PHP
PHP三元运算符的结合性介绍
Jan 10 #PHP
如何用phpmyadmin设置mysql数据库用户的权限
Jan 09 #PHP
使用PHPMyAdmin修复论坛数据库的图文方法
Jan 09 #PHP
PHP的SQL注入过程分析
Jan 06 #PHP
超级实用的7个PHP代码片段分享
Jan 05 #PHP
php中使用parse_url()对网址进行解析的实现代码(parse_url详解)
Jan 03 #PHP
选择PHP作为网站开发语言的原因分享
Jan 03 #PHP
You might like
php 数组的一个悲剧?
2011/05/11 PHP
php获取url参数方法总结
2014/11/13 PHP
PHP+MYSQL实现用户的增删改查
2015/03/24 PHP
php的debug相关函数用法示例
2016/07/11 PHP
浅谈PHP的数据库接口和技术
2016/12/09 PHP
PHP编程获取图片的主色调的方法【基于Imagick扩展】
2017/08/02 PHP
解决laravel上传图片之后,目录有图片,但是访问不到(404)的问题
2019/10/14 PHP
缓动函数requestAnimationFrame 更好的实现浏览器经动画
2012/12/07 Javascript
FF(火狐)浏览器无法执行window.close()解决方案
2014/11/13 Javascript
angular route中使用resolve在uglify压缩后问题解决
2016/09/21 Javascript
利用BootStrap弹出二级对话框的简单实现方法
2016/09/21 Javascript
基于angular-utils-ui-breadcrumbs使用心得(分享)
2017/11/03 Javascript
解决vue.js this.$router.push无效的问题
2018/09/03 Javascript
[49:20]VG vs TNC Supermajor小组赛B组败者组决赛 BO3 第二场 6.2
2018/06/03 DOTA
Python函数可变参数定义及其参数传递方式实例详解
2015/05/25 Python
Tensorflow中使用tfrecord方式读取数据的方法
2018/06/19 Python
opencv python 基于KNN的手写体识别的实例
2018/08/03 Python
Python面向对象程序设计中类的定义、实例化、封装及私有变量/方法详解
2019/02/28 Python
python 实现创建文件夹和创建日志文件的方法
2019/07/07 Python
Python面向对象中类(class)的简单理解与用法分析
2020/02/21 Python
python 实现在无序数组中找到中位数方法
2020/03/03 Python
总结html5自定义属性有哪些
2020/04/01 HTML / CSS
英国时尚泳装品牌:Maru Swimwear
2019/10/06 全球购物
中国京东和泰国中央集团合资的网站:JD CENTRAL
2020/08/22 全球购物
介绍一下XMLHttpRequest对象
2012/02/12 面试题
客户代表实习人员自我鉴定
2013/09/27 职场文书
财务副总经理工作职责
2013/11/25 职场文书
总经理助理职责
2014/02/04 职场文书
继承权公证书
2014/04/09 职场文书
美德少年事迹材料500字
2014/08/19 职场文书
党委班子纠正“四风”问题整改措施
2014/10/28 职场文书
培养联系人考察意见
2015/06/01 职场文书
2015年教学副校长工作总结
2015/07/22 职场文书
导游词之南京汤山温泉
2019/11/26 职场文书
SqlServer数据库远程连接案例教程
2021/07/15 SQL Server
python脚本框架webpy模板赋值实现
2021/11/20 Python