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 相关文章推荐
笑谈配置,使用Smarty技术
Jan 04 PHP
用PHPdig打造属于你自己的Google[图文教程]
Feb 14 PHP
php学习笔记 php中面向对象三大特性之一[封装性]的应用
Jun 13 PHP
浅谈PHP强制类型转换,慎用!
Jun 06 PHP
百度地图API应用之获取用户的具体位置
Jun 10 PHP
浅谈PHP正则表达式中修饰符/i, /is, /s, /isU
Oct 21 PHP
php+mysql查询优化简单实例
Jan 13 PHP
php使用数组填充下拉列表框的方法
Mar 31 PHP
php递归遍历删除文件的方法
Apr 17 PHP
详解PHP中的mb_detect_encoding函数使用方法
Aug 18 PHP
PHP中header用法小结
May 23 PHP
laravel5.6 框架邮件队列database驱动简单demo示例
Jan 26 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
DIY实用性框形天线
2021/03/02 无线电
深入分析php之面向对象
2013/05/15 PHP
yii2使用gridView实现下拉列表筛选数据
2017/04/10 PHP
jQuery 使用手册(七)
2009/09/23 Javascript
jquery 事件执行检测代码
2009/12/09 Javascript
可恶的ie8提示缺少id未定义
2014/03/20 Javascript
Jquery焦点与失去焦点示例应用
2014/06/10 Javascript
快速学习jQuery插件 jquery.validate.js表单验证插件使用方法
2015/12/01 Javascript
基于AngularJS+HTML+Groovy实现登录功能
2016/02/17 Javascript
详解JavaScript中基于原型prototype的继承特性
2016/05/05 Javascript
基于jquery实现即时检查格式是否正确的表单
2016/05/06 Javascript
JavaScript栈和队列相关操作与实现方法详解
2018/12/07 Javascript
Angular使用ControlValueAccessor创建自定义表单控件
2019/03/08 Javascript
el-select 下拉框多选实现全选的实现
2019/08/02 Javascript
使用axios请求时,发送formData请求的示例
2019/10/29 Javascript
一篇文章带你浅入webpack的DLL优化打包
2020/02/20 Javascript
简单了解JavaScript弹窗实现代码
2020/05/07 Javascript
基于js实现判断浏览器类型代码实例
2020/07/17 Javascript
centos系统升级python 2.7.3
2014/07/03 Python
Python 如何访问外围作用域中的变量
2016/09/11 Python
Python使用PIL模块生成随机验证码
2017/11/21 Python
python二分法查找算法实现方法【递归与非递归】
2019/12/06 Python
python使用pandas抽样训练数据中某个类别实例
2020/02/28 Python
Python多进程multiprocessing、进程池用法实例分析
2020/03/24 Python
python使用建议与技巧分享(一)
2020/08/17 Python
matplotlib交互式数据光标实现(mplcursors)
2021/01/13 Python
Html5 postMessage实现跨域消息传递
2016/03/11 HTML / CSS
纽约的奢华内衣店:Journelle
2016/07/29 全球购物
加拿大鞋网:Globo Shoes
2019/12/26 全球购物
信用社实习人员自我鉴定
2013/09/20 职场文书
财务主管的岗位职责
2013/12/30 职场文书
餐厅经理岗位职责和岗位目标
2014/02/13 职场文书
工程采购员岗位职责
2014/03/09 职场文书
2014年幼儿园德育工作总结
2014/12/17 职场文书
骨干教师申报材料
2014/12/17 职场文书
2015年中学体育教师工作总结
2015/10/23 职场文书