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和XSL stylesheets转换XML文档
Oct 09 PHP
使用PHP获取网络文件的实现代码
Jan 01 PHP
php在文件指定行中写入代码的方法
May 23 PHP
用Zend Studio+PHPnow+Zend Debugger搭建PHP服务器调试环境步骤
Jan 19 PHP
php输出1000以内质数(素数)示例
Feb 16 PHP
php反射应用示例
Feb 25 PHP
php实例分享之通过递归实现删除目录下的所有文件详解
May 15 PHP
php实现中文字符截取防乱码方法汇总
Apr 29 PHP
php 多文件上传的实现实例
Oct 23 PHP
关于Laravel Route重定向的一个注意点
Jan 16 PHP
laravel使用Faker数据填充的实现方法
Apr 12 PHP
在phpstudy集成环境下的nginx服务器下配置url重写
Dec 02 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 各种应用乱码问题的解决方法
2010/05/09 PHP
PHP中PDO基础教程 入门级
2011/09/04 PHP
使用php转义输出HTML到JavaScript
2015/03/27 PHP
php求数组全排列,元素所有组合的方法
2016/05/05 PHP
YII2.0框架行为(Behavior)深入详解
2019/07/26 PHP
jquery打开直接跳到网页最下面、最低端实现代码
2013/04/22 Javascript
利用js判断浏览器类型(是否为IE,Firefox,Opera浏览器)
2013/11/22 Javascript
Javascript中3个需要注意的运算符
2015/04/02 Javascript
js正则表达式注册页面表单验证
2016/10/11 Javascript
js导出excel文件的简洁方法(推荐)
2016/11/02 Javascript
jQuery实现页面滚动时智能浮动定位
2017/01/08 Javascript
微信小程序组件 marquee实例详解
2017/06/23 Javascript
VUE axios上传图片到七牛的实例代码
2017/07/28 Javascript
Vue Socket.io源码解读
2018/02/07 Javascript
vue简单练习 桌面时钟的实现代码实例
2019/09/19 Javascript
python进阶教程之模块(module)介绍
2014/08/30 Python
Python中的条件判断语句与循环语句用法小结
2016/03/21 Python
Python实现 多进程导入CSV数据到 MySQL
2017/02/26 Python
使用Python3+PyQT5+Pyserial 实现简单的串口工具方法
2019/02/13 Python
django自带serializers序列化返回指定字段的方法
2019/08/21 Python
python中struct模块之字节型数据的处理方法
2019/08/27 Python
Python如何优雅获取本机IP方法
2019/11/10 Python
python写一个随机点名软件的实例
2019/11/28 Python
tensorflow获取预训练模型某层参数并赋值到当前网络指定层方式
2020/01/24 Python
解决django xadmin主题不显示和只显示bootstrap2的问题
2020/03/30 Python
pygame用blit()实现动画效果的示例代码
2020/05/28 Python
浅析Python模块之间的相互引用问题
2021/02/26 Python
Nike挪威官网:Nike.com (NO)
2018/11/26 全球购物
建筑工地宣传标语
2014/06/18 职场文书
幼儿园中班区域活动总结
2014/07/09 职场文书
2014银行授权委托书样本
2014/10/04 职场文书
购房协议书范本(无房产证)
2014/10/07 职场文书
安全教育观后感
2015/06/17 职场文书
爱的教育读书笔记
2015/06/26 职场文书
使用Bandicam录制鼠标指针并附带点击声音,还可以添加点击动画效果
2022/04/11 数码科技
python使用pycharm安装pyqt5以及相关配置
2022/04/22 Python