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 相关文章推荐
第1次亲密接触PHP5(2)
Oct 09 PHP
无数据库的详细域名查询程序PHP版(2)
Oct 09 PHP
打造计数器DIY三步曲(上)
Oct 09 PHP
PHP页面间传递参数实例代码
Jun 05 PHP
PHP utf-8编码问题,utf8编码,数据库乱码,页面显示输出乱码
Apr 08 PHP
php中curl使用指南
Feb 05 PHP
PHP中文乱码解决方案
Mar 05 PHP
PHP使用pear自带的mail类库发邮件的方法
Jul 08 PHP
PHP实现蛇形矩阵,回环矩阵及数字螺旋矩阵的方法分析
May 29 PHP
Laravel如何友好的修改.env配置文件详解
Jun 07 PHP
PHP面向对象五大原则之接口隔离原则(ISP)详解
Apr 04 PHP
Smarty模板语法详解
Jul 20 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
全国FM电台频率大全 - 31 新疆维吾尔族自治区
2020/03/11 无线电
php面向对象全攻略 (十二) 抽象方法和抽象类
2009/09/30 PHP
php 运行效率总结(提示程序速度)
2009/11/26 PHP
php实现的发送带附件邮件类实例
2014/09/22 PHP
php文档工具PHP Documentor安装与使用方法
2016/01/25 PHP
Laravel 的数据库迁移的方法
2017/07/31 PHP
javaScript 判断字符串是否为数字的简单方法
2009/07/25 Javascript
jquery控制listbox中项的移动并排序
2009/11/12 Javascript
JavaScript中继承的一些示例方法与属性参考
2010/08/07 Javascript
js正文内容高亮效果的实现方法
2013/06/30 Javascript
基于jquery实现的定时显示与隐藏div广告的实现代码
2013/08/22 Javascript
JavaScript中跨域调用Flash的方法
2014/08/11 Javascript
jQuery form 表单验证插件(fieldValue)校验表单
2016/01/24 Javascript
JavaScript实现复制或剪切内容到剪贴板功能的方法
2016/05/23 Javascript
如何学JavaScript?前辈的经验之谈
2016/12/28 Javascript
详解angularJs中自定义directive的数据交互
2017/01/13 Javascript
垃圾回收器的相关知识点总结
2018/05/13 Javascript
使用Webpack 搭建 Vue3 开发环境过程详解
2020/07/28 Javascript
Vue 请求传公共参数的操作
2020/07/31 Javascript
[00:23]DOTA2群星共贺开放测试 25日无码时代来袭
2013/09/23 DOTA
python中cPickle用法例子分享
2014/01/03 Python
Python实现FTP文件传输的实例
2019/07/07 Python
python实现日志按天分割
2019/07/22 Python
Python: tkinter窗口屏幕居中,设置窗口最大,最小尺寸实例
2020/03/04 Python
查看已安装tensorflow版本的方法示例
2020/04/19 Python
python编程的核心知识点总结
2021/02/08 Python
Smallable意大利家庭概念店:设计师童装及家居装饰
2018/01/08 全球购物
团员学习总结的自我评价范文
2013/10/14 职场文书
网上卖盒饭创业计划书范文
2014/02/07 职场文书
开业典礼主持词
2014/03/21 职场文书
人大调研汇报材料
2014/08/14 职场文书
法英专业大学生职业生涯规划书范文
2014/09/22 职场文书
群众路线查摆问题整改措施
2014/10/10 职场文书
浅谈resultMap的用法及关联结果集映射
2021/06/30 Java/Android
为什么RedisCluster设计成16384个槽
2021/09/25 Redis
Vue自定义铃声提示音组件的实现
2022/01/22 Vue.js