php正则匹配文章中的远程图片地址并下载图片至本地


Posted in PHP onSeptember 29, 2015

使用php的正则表达式来实现:

$content = '这里是文章内容,这里插入一张图片测试 <img src="XXXXXXXXXXXXXXXXXXXX">';
$content = stripslashes ( $content );
$img_array = array ();
// 匹配所有远程图片
preg_match_all ( "/(src|SRC)=["|'| ]{0,}(http://(.*).(gif|jpg|jpeg|bmp|png))/isU", $content, $img_array );
// 匹配出来的不重复图片
$img_array = array_unique ( $img_array [2] );
print_r($img_array);

上面就将远程图片给匹配出来了,我们需要将其保持到本地。这里需要注意两点:
1.图片保存路径(图片存储目录)
2.实际访问图片地址
下面是完整实例:(你可以保存到本地服务器修改相应地方进行测试)

<!DOCTYPE HTML>
<html lang="en-US">
<head>
<meta charset="UTF-8">
<title>php保存远程图片到本地,php正则匹配文章中的图片地址</title>
</head>
<body>
<?php
//保存文章中远程图片到本地
//作者:yanue;
// 文件保存目录路径(请更换为你自己的路径, 你可以echo一下)
$save_path = $_SERVER ['DOCUMENT_ROOT'] . 'swfupload/attached/';
// 文件保存目录URL
$save_url = '/swfupload/attached/';
$save_path = realpath ( $save_path ) . '/';
// 图片存储目录
$imgPath = $save_path . date ( "Ymd" );
$imgUrl = $save_url . date ( "Ymd" );
// 创建文件夹
if (! is_dir ( $imgPath )) {
 @mkdir ( $imgPath, 0777 );
}
$content = '这里是文章内容,这里插入一张图片测试 <img src="XXXXXXXXXXXXXXXXXXXX">';
$content = stripslashes ( $content );
$img_array = array ();
// 匹配所有远程图片
preg_match_all ( "/(src|SRC)=["|'| ]{0,}(http://(.*).(gif|jpg|jpeg|bmp|png))/isU", $content, $img_array );
// 匹配出来的不重复图片
$img_array = array_unique ( $img_array [2] );
print_r($img_array);
// 时间无限制
set_time_limit ( 0 );
foreach ( $img_array as $key => $value ) {
 $value = trim ( $value );
 // 读取远程图片
 $get_file = @file_get_contents ( $value );
 // 保存到本地图片名称
 $imgname = date ( "YmdHis" ) . '_' . rand ( 10000, 99999 ) . "." . substr ( $value, - 3, 3 );
 // 保存到本地的实际文件地址(包含路径和名称)
 $fileName = $imgPath . '/' . $imgname;
 // 实际访问的地址
 $fileurl = $imgUrl . "/" . $imgname;
 // 文件写入
 if ($get_file) {
 $fp = @fopen ( $fileName, "w" );
 @fwrite ( $fp, $get_file );
 @fclose ( $fp );
 }
 // 替换原来的图片地址
 $content = ereg_replace ( $value, $fileurl, $content );
}
echo $content;
?>
</body>
</html>

以上就是php正则匹配文章中的远程图片地址并下载图片至本地的实现技巧,希望对大家的学习有所帮助。

PHP 相关文章推荐
PHP中json_encode、json_decode与serialize、unserialize的性能测试分析
Jun 09 PHP
PHP中register_globals参数为OFF和ON的区别(register_globals 使用详解)
Feb 05 PHP
解析php中反射的应用
Jun 18 PHP
PHP使用imagick读取PDF生成png缩略图的两种方法
Mar 20 PHP
PHP简单选择排序算法实例
Jan 26 PHP
PHP代码优化技巧小结
Sep 29 PHP
zend framework中使用memcache的方法
Mar 04 PHP
详解php中反射的应用
Mar 15 PHP
利用PHP获取访客IP、地区位置、浏览器及来源页面等信息
Jun 27 PHP
PHP+jQuery实现即点即改功能示例
Feb 21 PHP
PHP回调函数简单用法示例
May 08 PHP
laravel框架邮箱认证实现方法详解
Nov 22 PHP
php猜单词游戏
Sep 29 #PHP
PHP代码优化技巧小结
Sep 29 #PHP
php提取身份证号码中的生日日期以及验证是否为成年人的函数
Sep 29 #PHP
PHP类的封装与继承详解
Sep 29 #PHP
PHP比较运算符的详细介绍
Sep 29 #PHP
php提高网站效率的技巧
Sep 29 #PHP
四个PHP非常实用的功能
Sep 29 #PHP
You might like
php中json_encode处理gbk与gb2312中文乱码问题的解决方法
2014/07/10 PHP
php正则修正符用法实例详解
2016/12/29 PHP
使用javascript获取flash加载的百分比的实现代码
2011/05/25 Javascript
js中的前绑定和后绑定详解
2013/08/01 Javascript
使用jquery hover事件实现表格的隔行换色功能示例
2013/09/03 Javascript
jquery.post用法关于type设置问题补充
2014/01/03 Javascript
jQuery实现仿百度首页滑动伸缩展开的添加服务效果代码
2015/09/09 Javascript
轻松学习jQuery插件EasyUI EasyUI实现拖放商品放置购物车
2015/11/30 Javascript
仅一个form表单 js实现注册信息依次填写提交功能
2016/06/12 Javascript
JS实现拖动滚动条评分的效果代码分享
2016/09/29 Javascript
使用jQuery实现页面定时弹出广告效果
2017/08/24 jQuery
Vue.js实现网格列表布局转换方法
2017/08/25 Javascript
nodejs基于WS模块实现WebSocket聊天功能的方法
2018/01/12 NodeJs
详解vue-cli项目中的proxyTable跨域问题小结
2018/02/09 Javascript
vue-mugen-scroll组件实现pc端滚动刷新
2019/08/16 Javascript
layui layer select 选择被遮挡的解决方法
2019/09/21 Javascript
Node.js API详解之 vm模块用法实例分析
2020/05/27 Javascript
Vue中computed及watch区别实例解析
2020/08/01 Javascript
[03:08]迎霜节狂欢!2018年迎霜节珍藏Ⅰ一览
2018/12/25 DOTA
Mac下Supervisor进程监控管理工具的安装与配置
2014/12/16 Python
Python实现的计数排序算法示例
2017/11/29 Python
Python遍历某目录下的所有文件夹与文件路径
2018/03/15 Python
python实现逆序输出一个数字的示例讲解
2018/06/25 Python
Numpy之文件存取的示例代码
2018/08/03 Python
在tensorflow中实现去除不足一个batch的数据
2020/01/20 Python
优秀的教师个人的中文求职信
2013/09/21 职场文书
汽车运用工程毕业生自荐信
2013/10/29 职场文书
工厂实习感言
2014/01/14 职场文书
抽奖活动主持词
2014/03/31 职场文书
挂职学习心得体会
2014/09/09 职场文书
医药公司开票员岗位职责
2015/04/15 职场文书
年会邀请函的格式及范文五篇
2019/11/02 职场文书
话题作文之财富(600字)
2019/12/03 职场文书
Vue实现动态查询规则生成组件
2021/05/27 Vue.js
Appium中scroll和drag_and_drop根据元素位置滑动
2022/02/15 Python
tomcat的catalina.out日志按自定义时间格式进行分割的操作方法
2022/04/02 Servers