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 相关文章推荐
连接到txt文本的超链接,不直接打开而是点击后下载的处理方法
Jul 01 PHP
php 显示指定路径下的图片
Oct 29 PHP
在PHP中设置、使用、删除Cookie的解决方法
May 06 PHP
PHP中的命名空间相关概念浅析
Jan 22 PHP
php实现parent调用父类的构造方法与被覆写的方法
Feb 11 PHP
PHP实现根据图片色界在不同位置加水印的方法
Aug 08 PHP
PHP简单的MVC框架实现方法
Dec 01 PHP
基于PHP代码实现中奖概率算法可用于刮刮卡、大转盘等抽奖算法
Dec 20 PHP
Symfony2学习笔记之系统路由详解
Mar 17 PHP
PHP实现一个简单url路由功能实例
Nov 05 PHP
Ajax+PHP实现的分类列表框功能示例
Feb 11 PHP
laravel 字段格式化 modle 字段类型转换方法
Sep 30 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
为查询结果建立向后/向前按钮
2006/10/09 PHP
PHP生成静态页面详解
2006/12/05 PHP
PHP操作Memcache实例介绍
2013/06/14 PHP
zf框架db类的分页示例分享
2014/03/14 PHP
PHP实现二维数组根据key进行排序的方法
2016/12/30 PHP
PHP实现防止表单重复提交功能【基于token验证】
2018/05/24 PHP
Laravel框架实现的批量删除功能示例
2019/01/16 PHP
用JavaScript实现仿Windows关机效果
2007/03/10 Javascript
利用javascript解决图片缩放及其优化的代码
2012/05/23 Javascript
jQuery scroll事件实现监控滚动条分页示例
2014/04/04 Javascript
JavaScript使用Max函数返回两个数字中较大数的方法
2015/04/06 Javascript
使用canvas及js简单生成验证码方法
2017/04/02 Javascript
NodeJS安装图文教程
2018/04/19 NodeJs
Js中将Long转换成日期格式的实现方法
2018/06/05 Javascript
js简单实现自动生成表格功能示例
2020/06/02 Javascript
Vue使用预渲染代替SSR的方法
2020/07/02 Javascript
vue项目中微信登录的实现操作
2020/09/08 Javascript
[01:46]新英雄登场
2019/09/10 DOTA
python追加元素到列表的方法
2015/07/28 Python
Django渲染Markdown文章目录的方法示例
2019/01/02 Python
布隆过滤器的概述及Python实现方法
2019/12/08 Python
如何基于python实现脚本加密
2019/12/28 Python
python如何删除文件、目录
2020/06/23 Python
HTML5印章绘制电子签章图片(中文英文椭圆章、中文英文椭圆印章)
2019/06/03 HTML / CSS
快时尚眼镜品牌,全国连锁眼镜店:LOHO眼镜生活
2018/10/08 全球购物
领导视察欢迎词
2014/01/15 职场文书
副厂长岗位职责
2014/02/02 职场文书
感恩祖国演讲稿
2014/09/09 职场文书
个人四风问题对照检查材料
2014/09/26 职场文书
领导干部个人整改措施落实情况汇报
2014/10/29 职场文书
2014年公务员个人工作总结
2014/11/22 职场文书
办公室管理规章制度
2015/08/04 职场文书
《最后一头战象》教学反思
2016/02/16 职场文书
一次MySQL启动导致的事故实战记录
2021/09/15 MySQL
Axios代理配置及封装响应拦截处理方式
2022/04/07 Vue.js
golang用type-switch判断interface的实际存储类型
2022/04/14 Golang