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 相关文章推荐
在apache下限制每个虚拟主机的并发数!!!!
Oct 09 PHP
Zend studio for eclipse中使php可以调用mysql相关函数的设置方法
Oct 13 PHP
PHP Document 代码注释规范
Apr 13 PHP
PHP n个不重复的随机数生成代码
Jun 23 PHP
AMFPHP php远程调用(RPC, Remote Procedure Call)工具 快速入门教程
May 10 PHP
解决PHP在DOS命令行下却无法链接MySQL的技术笔记
Dec 29 PHP
PHP和Mysqlweb应用开发核心技术 第1部分 Php基础-3 代码组织和重用2
Jul 03 PHP
php 开发中加密的几种方法总结
Mar 22 PHP
thinkphp查询,3.X 5.0方法(亲试可行)
Jun 17 PHP
[原创]PHP实现字节数Byte转换为KB、MB、GB、TB的方法
Aug 31 PHP
php使用curl获取header检测开启GZip压缩的方法
Aug 15 PHP
详解php用static方法的原因
Sep 12 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/08/27 PHP
《PHP编程最快明白》第七讲:php图片验证码与缩略图
2010/11/01 PHP
解析Linux下Varnish缓存的配置优化
2013/06/20 PHP
CodeIgniter使用smtp服务发送html邮件的方法
2015/06/10 PHP
PHP7安装Redis扩展教程【Linux与Windows平台】
2016/09/30 PHP
PHP实现从PostgreSQL数据库检索数据分页显示及根据条件查找数据示例
2018/06/09 PHP
php数值计算num类简单操作示例
2020/05/15 PHP
Nigma vs Alliance BO5 第一场2.14
2021/03/10 DOTA
jquery UI 1.72 之datepicker
2009/12/29 Javascript
javascript获取flash版本号的方法
2014/11/20 Javascript
js检测iframe是否加载完成的方法
2015/11/26 Javascript
详解JS面向对象编程
2016/01/24 Javascript
iscroll碰到Select无法选择下拉刷新的解决办法
2016/05/21 Javascript
JS获取当前页面名称的简单实例
2016/08/19 Javascript
微信小程序 WXML、WXSS 和JS介绍及详解
2016/10/08 Javascript
深入理解jQuery.data() 的实现方式
2016/11/30 Javascript
nodejs连接mysql数据库及基本知识点详解
2018/03/20 NodeJs
JS实现前端页面的搜索功能
2018/06/12 Javascript
jquery实现掷骰子小游戏
2019/10/24 jQuery
JS函数进阶之prototy用法实例分析
2020/01/15 Javascript
Vue实现跑马灯效果
2020/05/25 Javascript
[57:37]EG vs Mineski 2018国际邀请赛小组赛BO2 第二场 8.16
2018/08/17 DOTA
使用sklearn进行对数据标准化、归一化以及将数据还原的方法
2018/07/11 Python
总结python中pass的作用
2019/02/27 Python
Python字符串内置函数功能与用法总结
2019/04/16 Python
PyTorch的Optimizer训练工具的实现
2019/08/18 Python
基于Python获取docx/doc文件内容代码解析
2020/02/17 Python
大学生创业感言
2014/01/25 职场文书
保密工作承诺书
2014/08/29 职场文书
学生不讲诚信检讨书
2014/09/29 职场文书
实习生矿工检讨书
2014/10/13 职场文书
退学证明范本3篇
2014/10/29 职场文书
向女朋友道歉的话
2015/01/20 职场文书
校园广播站开场白
2015/06/01 职场文书
职工的安全责任书范文!
2019/07/02 职场文书
Python如何用re模块实现简易tokenizer
2022/05/02 Python