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保存和输出文件
Oct 09 PHP
PHP 表单提交给自己
Jul 24 PHP
PHP6 先修班 JSON实例代码
Aug 23 PHP
PHP教程 预定义变量
Oct 23 PHP
php用正则表达式匹配URL的简单方法
Nov 12 PHP
php阻止页面后退的方法分享
Feb 17 PHP
PHP实现AES256加密算法实例
Sep 22 PHP
Linux下安装oracle客户端并配置php5.3
Oct 12 PHP
PHP获取当前完整URL地址的函数
Dec 21 PHP
PHP访问Google Search API的方法
Mar 05 PHP
PHP基于DateTime类解决Unix时间戳与日期互转问题【针对1970年前及2038年后时间戳】
Jun 13 PHP
laravel5.1 ajax post 传值_token示例
Oct 24 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
为什么夜间收到的中波电台比白天多
2021/03/01 无线电
php自动加载的两种实现方法
2010/06/21 PHP
PHP下利用header()函数设置浏览器缓存的代码
2010/09/01 PHP
php+Memcached实现简单留言板功能示例
2017/02/15 PHP
弹出层之1:JQuery.Boxy (一) 使用介绍
2011/10/06 Javascript
js onkeypress与onkeydown 事件区别详细说明
2012/12/13 Javascript
jQuery解决下拉框select设宽度时IE 6/7/8下option超出显示不全
2013/05/27 Javascript
JQuery悬停控制图片轮播——代码简单
2015/08/05 Javascript
Vue.js实现无限加载与分页功能开发
2016/11/03 Javascript
如何清除IE10+ input X 文本框的叉叉和密码输入框的眼睛图标
2016/12/21 Javascript
从零开始学习Node.js系列教程之SQLite3和MongoDB用法分析
2017/04/13 Javascript
使用 Vue.js 仿百度搜索框的实例代码
2017/05/09 Javascript
jQuery实现html双向绑定功能示例
2017/10/09 jQuery
vue实现简单的MVVM框架
2018/08/05 Javascript
微信小程序外卖选购页实现切换分类与数量加减功能案例
2019/01/15 Javascript
微信小程序获取位置展示地图并标注信息的实例代码
2019/09/01 Javascript
在Layui 的表格模板中,实现layer父页面和子页面传值交互的方法
2019/09/10 Javascript
对python 命令的-u参数详解
2018/12/03 Python
解决Django后台ManyToManyField显示成Object的问题
2019/08/09 Python
python django生成迁移文件的实例
2019/08/31 Python
K近邻法(KNN)相关知识总结以及如何用python实现
2021/01/28 Python
css3中less实现文字长阴影(long shadow)
2020/04/24 HTML / CSS
webapp字号大小跟随系统字号大小缩放的示例代码
2018/12/26 HTML / CSS
HTML5开发动态音频图的实现
2020/07/02 HTML / CSS
美国最古老的精致书写工具制造商:A.T. Cross(高仕)
2018/01/30 全球购物
加拿大在线旅游公司:Flighthub
2019/03/11 全球购物
如果NULL定义成#define NULL((char *)0)难道不就可以向函数传入不加转换的NULL了吗
2012/02/15 面试题
保险内勤岗位职责
2014/04/05 职场文书
锦旗标语大全
2014/06/23 职场文书
2014年内部审计工作总结
2014/12/09 职场文书
2015最新民情日记范文
2015/06/26 职场文书
庆祝教师节主题班会
2015/08/17 职场文书
初中语文教师研修日志
2015/11/13 职场文书
Python移位密码、仿射变换解密实例代码
2021/06/27 Python
一篇文章弄清楚Ajax请求的五个步骤
2022/03/17 Javascript
JS前端宏任务微任务及Event Loop使用详解
2022/07/23 Javascript