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


Posted in PHP onSeptember 19, 2011
<?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; 
} 
?>
PHP 相关文章推荐
3.从实例开始
Oct 09 PHP
15个小时----从修改程序到自己些程序
Oct 09 PHP
php中文字符截取防乱码
Mar 28 PHP
window+nginx+php环境配置 附配置搭配说明
Dec 29 PHP
php中利用explode函数分割字符串到数组
Feb 08 PHP
PHP中substr()与explode()函数用法分析
Nov 24 PHP
解决PHP程序运行时:Fatal error: Maximum execution time of 30 seconds exceeded in的错误提示
Nov 25 PHP
详解PHP中的 input属性(隐藏 只读 限制)
Aug 14 PHP
PHP获取远程http或ftp文件的md5值的方法
Apr 15 PHP
Laravel实现批量更新多条数据
Apr 06 PHP
PHP实现抽奖功能实例代码
Jun 30 PHP
PHP如何获取Cookie并实现模拟登录
Jul 16 PHP
PHP下利用shell后台运行PHP脚本,并获取该脚本的Process ID的代码
Sep 19 #PHP
php去除重复字的实现代码
Sep 16 #PHP
PHP与SQL注入攻击防范小技巧
Sep 16 #PHP
php中判断字符串是否全是中文或含有中文的实现代码
Sep 16 #PHP
php中模拟POST传递数据的两种方法分享
Sep 16 #PHP
php中获得视频时间总长度的另一种方法
Sep 15 #PHP
利用Ffmpeg获得flv视频缩略图和视频时间的代码
Sep 15 #PHP
You might like
PHP最常用的2种设计模式工厂模式和单例模式介绍
2012/08/14 PHP
php时间计算相关问题小结
2016/05/09 PHP
PHP实现支付宝即时到账功能
2016/12/21 PHP
PHP利用百度ai实现文本和图片审核
2019/05/08 PHP
脚本收藏iframe
2006/07/21 Javascript
ie和firefox中img对象区别的困惑
2006/12/27 Javascript
javascript 一段左右两边随屏滚动的代码
2009/06/18 Javascript
js函数参数设置默认值的一种变通实现方法
2014/05/26 Javascript
js识别不同浏览器基于userAgent做判断
2014/07/29 Javascript
详解JavaScript中常用的函数类型
2015/11/18 Javascript
学习使用bootstrap基本控件(table、form、button)
2016/04/12 Javascript
Linux系统中利用node.js提取Word(doc/docx)及PDF文本的内容
2017/06/17 Javascript
提高Node.js性能的应用技巧分享
2017/08/10 Javascript
原生js实现移动端触摸轮播的示例代码
2017/12/22 Javascript
详解mpvue小程序中怎么引入iconfont字体图标
2018/10/01 Javascript
vue-cli3 配置开发与测试环境详解
2019/05/17 Javascript
Python中用Ctrl+C终止多线程程序的问题解决
2013/03/30 Python
分享python数据统计的一些小技巧
2016/07/21 Python
单链表反转python实现代码示例
2018/02/08 Python
Python实现聊天机器人的示例代码
2018/07/09 Python
tensorflow 恢复指定层与不同层指定不同学习率的方法
2018/07/26 Python
django基于存储在前端的token用户认证解析
2019/08/06 Python
Python迭代器iterator生成器generator使用解析
2019/10/24 Python
关于tf.reverse_sequence()简述
2020/01/20 Python
tensorflow 实现打印pb模型的所有节点
2020/01/23 Python
Python中Yield的基本用法
2020/10/18 Python
Python用dilb提取照片上人脸的示例
2020/10/26 Python
Python中lru_cache的使用和实现详解
2021/01/25 Python
2014年自我评价
2014/01/04 职场文书
《临死前的严监生》教学反思
2014/02/13 职场文书
同学毕业留言寄语
2015/02/27 职场文书
2015年12.4全国法制宣传日活动总结
2015/03/24 职场文书
关于教师节的广播稿
2015/08/19 职场文书
一文读懂go中semaphore(信号量)源码
2021/04/03 Golang
OpenCV-Python实现油画效果的实例
2021/06/08 Python
python代码实现备忘录案例讲解
2021/07/26 Python