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

5年以前  |  阅读数:571 次  |  编程语言:PHP 

使用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分页显示制作详细讲解
SSH 登录失败:Host key verification failed
将二进制数据转为16进制以便显示
获取IMSI
获取IMEI
Java生成UUID
PHP自定义函数获取搜索引擎来源关键字的方法
让你成为最历害的git提交人
在Zeus Web Server中安装PHP语言支持
再谈PHP中单双引号的区别详解
指定应用ID以获取对应的应用名称
php+ajax+json 详解及实例代码
Yii2汉字转拼音类的实例代码
Python 2与Python 3版本和编码的对比
php封装的page分页类完整实例
php数组合并array_merge()函数使用注意事项
PHP设计模式之工厂模式与单例模式
PHP实现简单爬虫的方法
php实现数组中索引关联数据转换成json对象的方法
wget使用技巧