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设置编码格式的方法
Mar 05 PHP
解析php二分法查找数组是否包含某一元素
May 23 PHP
php广告加载类用法实例
Sep 23 PHP
PHP针对JSON操作实例分析
Jan 12 PHP
WordPress后台中实现图片上传功能的实例讲解
Jan 11 PHP
PHP数组游标实现对数组的各种操作详解
Jan 26 PHP
PHP封装的多文件上传类实例与用法详解
Feb 07 PHP
PHP实现的mysql操作类【MySQL与MySQLi方式】
Oct 07 PHP
PHP实现微信对账单处理
Oct 01 PHP
php中青蛙跳台阶的问题解决方法
Oct 14 PHP
php使用goto实现自动重启swoole、reactphp、workerman服务的代码
Apr 13 PHP
linux mint下安装phpstorm2020包括JDK部分的教程详解
Sep 17 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实现博客,论坛图片防盗链的方法
2016/10/15 PHP
JavaScript 基础问答三
2008/12/03 Javascript
jQuery对象和DOM对象之间相互转换的方法介绍
2015/02/28 Javascript
JavaScript中实现Map的示例代码
2015/09/09 Javascript
jQuery提示插件qTip2用法分析(支持ajax及多种样式)
2016/06/08 Javascript
jquery+ajax+text文本框实现智能提示完整实例
2016/07/09 Javascript
bootstrap datepicker限定可选时间范围实现方法
2016/09/28 Javascript
javascript稀疏数组(sparse array)和密集数组用法分析
2016/12/28 Javascript
AngularJS 使用ng-repeat报错 [ngRepeat:dupes]
2017/01/19 Javascript
微信小程序之页面跳转和参数传递的实现
2017/09/29 Javascript
Vuex 在Vue 组件中获得Vuex 状态state的方法
2018/08/27 Javascript
JavaScript解析JSON数据示例
2019/07/16 Javascript
微信小程序激励式视频广告组件使用详解
2019/12/06 Javascript
[02:42]DOTA2英雄基础教程 杰奇洛
2013/12/23 DOTA
[01:24]2014DOTA2 TI第二日 YYF表示这届谁赢都有可能
2014/07/11 DOTA
[47:35]VP vs Pain 2018国际邀请赛小组赛BO2 第一场 8.18
2018/08/20 DOTA
python的urllib模块显示下载进度示例
2014/01/17 Python
python下读取公私钥做加解密实例详解
2017/03/29 Python
教你使用python实现微信每天给女朋友说晚安
2018/03/23 Python
Pandas 数据处理,数据清洗详解
2018/07/10 Python
对Python协程之异步同步的区别详解
2019/02/19 Python
Python模块的制作方法实例分析
2019/12/21 Python
python爬虫用mongodb的理由
2020/07/28 Python
加拿大著名时装品牌:SOIA & KYO
2016/08/23 全球购物
法拉利英国精品店:Ferraris Boutique UK
2019/07/20 全球购物
我的珠宝盒:Ma boîte à bijoux
2019/08/27 全球购物
英国领先的高级美容和在线皮肤诊所:Face the Future
2020/06/17 全球购物
网站编辑求职信
2013/10/17 职场文书
家长评语和期望
2014/02/10 职场文书
2014年小班元旦活动方案
2014/02/16 职场文书
四风问题自我剖析材料
2014/10/07 职场文书
检讨书范文1000字
2015/01/28 职场文书
奖金申请报告模板
2015/05/15 职场文书
亲情作文之母爱
2019/09/25 职场文书
Windows中Redis安装配置流程并实现远程访问功能
2021/06/07 Redis
PostgreSQL聚合函数介绍以及分组和排序
2022/04/12 PostgreSQL