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 csv操作类代码
Dec 14 PHP
php cache类代码(php数据缓存类)
Apr 15 PHP
url decode problem 解决方法
Dec 26 PHP
解析PHP SPL标准库的用法(遍历目录,查找固定条件的文件)
Jun 18 PHP
解析Ubuntu下crontab命令的用法
Jun 24 PHP
30个php操作redis常用方法代码例子
Jul 05 PHP
PHP传值到不同页面的三种常见方式及php和html之间传值问题
Nov 19 PHP
php+ajax无刷新分页实例详解
Dec 07 PHP
Json_encode防止汉字转义成unicode的方法
Feb 25 PHP
Laravel模型事件的实现原理详解
Mar 14 PHP
PHP+MySQL实现模糊查询员工信息功能示例
Jun 01 PHP
PHP常用函数之根据生日计算年龄功能示例
Oct 21 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/03 咖啡文化
分享PHP入门的学习方法
2007/01/02 PHP
wordpress之wp-settings.php
2007/08/17 PHP
php 转换字符串编码 iconv与mb_convert_encoding的区别说明
2011/11/10 PHP
php中通过数组进行高效随机抽取指定条记录的算法
2013/09/09 PHP
PHP实现数组根据某个单元字段排序操作示例
2018/08/01 PHP
禁止直接访问php文件代码分享
2020/05/05 PHP
JavaScript 10件让人费解的事情
2010/02/15 Javascript
理解Javascript_06_理解对象的创建过程
2010/10/15 Javascript
js事件(Event)知识整理
2012/10/11 Javascript
javascript中兼容主流浏览器的动态生成iframe方法
2014/05/05 Javascript
javascript制作的简单注册模块表单验证
2015/04/13 Javascript
Javascript页面跳转常见实现方式汇总
2015/11/28 Javascript
Bootstrap基本样式学习笔记之图片(6)
2016/12/07 Javascript
基于hover的用法实例(推荐)
2017/07/04 Javascript
JScript实现表格的简单操作
2017/08/15 Javascript
JS改变页面颜色源码分享
2018/02/24 Javascript
使用react实现手机号的数据同步显示功能的示例代码
2018/04/03 Javascript
vue-cli 3.0 自定义vue.config.js文件,多页构建的方法
2018/09/19 Javascript
一文读懂ES7中的javascript修饰器
2019/05/06 Javascript
Nodejs libuv运行原理详解
2019/08/21 NodeJs
解决Can't find variable: SockJS vue项目的问题
2020/09/22 Javascript
jQuery冲突问题解决方法
2021/01/19 jQuery
[02:05]2014DOTA2西雅图邀请赛 老队长全明星大猜想谁不服就按进显示器
2014/07/08 DOTA
简单谈谈Python中的反转字符串问题
2016/10/24 Python
tensorflow如何批量读取图片
2019/08/29 Python
canvas使用注意点总结
2013/07/19 HTML / CSS
Staples美国官方网站:办公用品一站式采购
2016/07/28 全球购物
印度在线购物网站:Paytmmall
2019/07/24 全球购物
安全生产大检查方案
2014/05/07 职场文书
公务员爱岗敬业演讲稿
2014/08/26 职场文书
党的群众路线专项整治方案
2014/11/03 职场文书
教师节联欢会主持词
2015/07/04 职场文书
当你焦虑迷茫时,请读读这6句话
2019/07/24 职场文书
Python尝试实现蒙特卡罗模拟期权定价
2022/04/21 Python
Redis keys命令的具体使用
2022/06/05 Redis