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 相关文章推荐
php为什么选mysql作为数据库? Mysql 创建用户方法
Jul 02 PHP
php 购物车的例子
May 04 PHP
php json与xml序列化/反序列化
Oct 28 PHP
php json转换成数组形式代码分享
Nov 10 PHP
php计算2个日期的差值函数分享
Feb 02 PHP
功能强大的PHP图片处理类(水印、透明度、旋转)
Oct 21 PHP
再推荐十款免费的php开发工具
Nov 09 PHP
PHP session 会话处理函数
Jun 06 PHP
php实现基于openssl的加密解密方法
Sep 30 PHP
Laravel 集成 Geetest验证码的方法
May 14 PHP
thinkPHP5.0框架事务处理操作简单示例
Sep 07 PHP
PHP实时统计中文字数和区别
Feb 28 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 无限极分类
2008/03/27 PHP
php中simplexml_load_string使用实例分享
2014/02/13 PHP
PHP实现XML与数据格式进行转换类实例
2015/07/29 PHP
PHP带节点操作的无限分类实现方法详解
2016/11/09 PHP
yii 2.0中表单小部件的使用方法示例
2017/05/23 PHP
JQuery 无废话系列教程(一) jquery入门 [推荐]
2009/06/23 Javascript
js 表格隔行颜色
2009/12/02 Javascript
jquery中map函数与each函数的区别实例介绍
2014/06/23 Javascript
详解JavaScript中Hash Map映射结构的实现
2016/05/21 Javascript
改变checkbox默认选中状态及取值的实现代码
2016/05/26 Javascript
jQuery 遍历map()方法详解
2016/11/04 Javascript
react开发中如何使用require.ensure加载es6风格的组件
2017/05/09 Javascript
JS实现基于Sketch.js模拟成群游动的蝌蚪运动动画效果【附demo源码下载】
2017/08/18 Javascript
表格展示利器 Bootstrap Table实例代码
2017/09/06 Javascript
JS浅拷贝和深拷贝原理与实现方法分析
2019/02/28 Javascript
浅谈Vue项目骨架屏注入实践
2019/08/05 Javascript
JS模拟实现京东快递单号查询
2020/11/30 Javascript
vue使用exif获取图片经纬度的示例代码
2020/12/11 Vue.js
有关wxpython pyqt内存占用问题分析
2014/06/09 Python
Python 两个列表的差集、并集和交集实现代码
2016/09/21 Python
Django自定义分页与bootstrap分页结合
2021/02/22 Python
matplotlib绘制符合论文要求的图片实例(必看篇)
2017/06/02 Python
go和python变量赋值遇到的一个问题
2017/08/31 Python
python检测空间储存剩余大小和指定文件夹内存占用的实例
2018/06/11 Python
selenium+python自动化测试之多窗口切换
2019/01/23 Python
python同时替换多个字符串方法示例
2019/09/17 Python
python3 dict ndarray 存成json,并保留原数据精度的实例
2019/12/06 Python
在pycharm中debug 实时查看数据操作(交互式)
2020/06/09 Python
python利用faker库批量生成测试数据
2020/10/15 Python
远程学习的教学用品和家庭学习资源:Really Good Stuff
2020/04/27 全球购物
中学自我评价
2014/01/31 职场文书
大学毕业感言200字
2014/03/09 职场文书
成本会计岗位职责
2015/02/03 职场文书
财务总监岗位职责范本
2015/04/03 职场文书
春节晚会开场白
2015/05/29 职场文书
国庆放假通知怎么写
2015/07/30 职场文书