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 相关文章推荐
自动分页的不完整解决方案
Jan 12 PHP
ionCube 一款类似zend的PHP加密/解密工具
Jul 25 PHP
理解和运用PHP中的多态性[译]
Aug 02 PHP
ThinkPHP中ajax使用实例教程
Aug 22 PHP
完整删除ecshop中获取店铺信息的API
Dec 24 PHP
PHP中imagick函数的中文解释
Jan 21 PHP
Android AsyncTack 异步任务实例详解
Nov 02 PHP
PHP水印类,支持添加图片、文字、填充颜色区域的实现
Feb 04 PHP
PHP计算近1年的所有月份
Mar 13 PHP
thinkphp3.2实现跨控制器调用其他模块的方法
Mar 14 PHP
Laravel5.1 框架数据库操作DB运行原生SQL的方法分析
Jan 07 PHP
Laravel配合jwt使用的方法实例
Oct 25 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
谏山创故乡大分县日田市水坝将设立《进击的巨人》立艾伦、三笠以及阿尔敏的铜像!
2020/03/06 日漫
Cappuccino 卡布其诺咖啡之制作
2021/03/03 冲泡冲煮
Thinkphp 框架扩展之数据库驱动常用方法小结
2020/04/23 PHP
jQuery EasyUI API 中文文档 - Spinner微调器使用
2011/10/21 Javascript
javascript实现日历控件(年月日关闭按钮)
2012/12/12 Javascript
网页加载时页面显示进度条加载完成之后显示网页内容
2012/12/23 Javascript
jQuery图片滚动图片的效果(另类实现)
2013/06/02 Javascript
JavaScript中字符串拼接的基本方法
2015/07/07 Javascript
jQuery实现灰蓝风格标准二级下拉菜单效果代码
2015/08/31 Javascript
JavaScript模拟鼠标右键菜单效果
2020/12/08 Javascript
深入解析JavaScript中函数的Currying柯里化
2016/03/19 Javascript
微信小程序 教程之wxapp视图容器 swiper
2016/10/19 Javascript
html中鼠标滚轮事件onmousewheel的处理方法
2016/11/11 Javascript
jquery在vue脚手架中的使用方式示例
2017/08/29 jQuery
angularjs利用directive实现移动端自定义软键盘的示例
2017/09/20 Javascript
JavaScript实现的贝塞尔曲线算法简单示例
2018/01/30 Javascript
快速解决vue-cli在ie9+中无效的问题
2018/09/04 Javascript
vue+axios实现post文件下载
2019/09/25 Javascript
微信小程序表单验证WxValidate的使用
2019/11/27 Javascript
vue 查看dist文件里的结构(多种方式)
2020/01/17 Javascript
pandas DataFrame实现几列数据合并成为新的一列方法
2018/06/08 Python
朴素贝叶斯Python实例及解析
2018/11/19 Python
在python中用print()输出多个格式化参数的方法
2019/07/16 Python
Python3 chardet模块查看编码格式的例子
2019/08/14 Python
Python3进制之间的转换代码实例
2019/08/24 Python
解决Python中回文数和质数的问题
2019/11/24 Python
python 利用已有Ner模型进行数据清洗合并代码
2019/12/24 Python
Pycharm2020最新激活码|永久激活(附最新激活码和插件的详细教程)
2020/09/29 Python
python中字符串的编码与解码详析
2020/12/03 Python
迪卡侬印尼体育用品商店:Decathlon印尼
2020/03/11 全球购物
挂科检讨书范文
2014/02/20 职场文书
学习经验交流会主持词
2014/04/01 职场文书
《大禹治水》教学反思
2014/04/27 职场文书
保险内勤岗位职责
2015/04/13 职场文书
出纳试用期工作总结2015
2015/05/28 职场文书
MySQL利用UNION连接2个查询排序失效详解
2021/11/20 MySQL