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之COOKIE支持详解
Sep 20 PHP
PHP运行时强制显示出错信息的代码
Apr 20 PHP
yii框架源码分析之创建controller代码
Jun 28 PHP
关于php循环跳出的问题
Jul 01 PHP
PHP连接局域网MYSQL数据库的简单实例
Aug 26 PHP
php中AES加密解密的例子小结
Feb 18 PHP
PHP5中实现多态的两种方法实例分享
Apr 21 PHP
简单实用的网站PHP缓存类实例
Jul 18 PHP
php采集神器cURL使用方法详解
Feb 19 PHP
Yii+MYSQL锁表防止并发情况下重复数据的方法
Jul 14 PHP
PHP实现判断数组是一维、二维或几维的方法
Feb 06 PHP
PHP连接MSSQL数据库案例,PHPWAMP多个PHP版本连接SQL Server数据库
Apr 16 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编程实现多维数组按照某个键值排序的方法小结【2种方法】
2017/04/27 PHP
PHP实现的简单操作SQLite数据库类与用法示例
2017/06/19 PHP
php处理抢购类功能的高并发请求
2018/02/08 PHP
fix-ie5.js扩展在IE5下不能使用的几个方法
2007/08/20 Javascript
jquery禁止输入数字以外的字符的示例(纯数字验证码)
2014/04/10 Javascript
jQuery简单实现两级下拉菜单效果代码
2015/09/15 Javascript
Bootstrap每天必学之简单入门
2015/11/19 Javascript
基于jQuery实现简单人工智能聊天室
2017/02/10 Javascript
详解webpack打包vue时提取css
2017/05/26 Javascript
使用store来优化React组件的方法
2017/10/23 Javascript
基于vue 实现token验证的实例代码
2017/12/14 Javascript
vue中render函数的使用详解
2018/10/12 Javascript
JS实现滑动插件
2020/01/15 Javascript
详解阿里Node.js技术文档之process模块学习指南
2021/01/04 Javascript
python的tkinter布局之简单的聊天窗口实现方法
2014/09/03 Python
Python判断操作系统类型代码分享
2014/11/22 Python
把项目从Python2.x移植到Python3.x的经验总结
2015/04/20 Python
python+mongodb数据抓取详细介绍
2017/10/25 Python
python3中函数参数的四种简单用法
2018/07/09 Python
Flask框架URL管理操作示例【基于@app.route】
2018/07/23 Python
python多进程使用及线程池的使用方法代码详解
2018/10/24 Python
使用Python批量修改文件名的代码实例
2019/01/24 Python
Python 使用folium绘制leaflet地图的实现方法
2019/07/05 Python
python logging模块的使用总结
2019/07/09 Python
如何使用Python处理HDF格式数据及可视化问题
2020/06/24 Python
Python configparser模块应用过程解析
2020/08/14 Python
深入浅出CSS3 background-clip,background-origin和border-image教程
2011/01/27 HTML / CSS
英国最大的线上保健品零售商之一:Vitamin Planet
2016/12/01 全球购物
《列夫托尔斯泰》教学反思
2014/02/10 职场文书
商务英语专业求职信
2014/06/26 职场文书
换届选举主持词
2015/07/03 职场文书
高二数学教学反思
2016/02/18 职场文书
坚持不是死撑,更重要的是心态
2019/08/19 职场文书
python 用递归实现通用爬虫解析器
2021/04/16 Python
React + Threejs + Swiper 实现全景图效果的完整代码
2021/06/28 Javascript
Mybatis-Plus 使用 @TableField 自动填充日期
2022/04/26 Java/Android