博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
PHP下载/采集远程图片到本地
阅读量:6981 次
发布时间:2019-06-27

本文共 4019 字,大约阅读时间需要 13 分钟。

hot3.png

PHP下载/采集远程图片到本地01/**02 * 下载远程图片到本地03 *04 * @param string $url 远程文件地址05 * @param string $filename 保存后的文件名(为空时则为随机生成的文件名,否则为原文件名)06 * @param array $fileType 允许的文件类型07 * @param string $dirName 文件保存的路径(路径其余部分根据时间系统自动生成)08 * @param int $type 远程获取文件的方式09 * @return json 返回文件名、文件的保存路径10 * @author blog.snsgou.com11 */12function download_image($url, $fileName = '', $dirName, $fileType = array('jpg', 'gif', 'png'), $type = 1)13{14    if ($url == '')15    {16        return false;17    }18 19    // 获取文件原文件名20    $defaultFileName = basename($url);21 22    // 获取文件类型23    $suffix = substr(strrchr($url, '.'), 1);24    if (!in_array($suffix, $fileType))25    {26        return false;27    }28 29    // 设置保存后的文件名30    $fileName = $fileName == '' ? time() . rand(0, 9) . '.' . $suffix : $defaultFileName;31 32    // 获取远程文件资源33    if ($type)34    {35        $ch = curl_init();36        $timeout = 30;37        curl_setopt($ch, CURLOPT_URL, $url);38        curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);39        curl_setopt($ch, CURLOPT_CONNECTTIMEOUT, $timeout);40        $file = curl_exec($ch);41        curl_close($ch);42    }43    else44    {45        ob_start();46        readfile($url);47        $file = ob_get_contents();48        ob_end_clean();49    }50 51    // 设置文件保存路径52    //$dirName = $dirName . '/' . date('Y', time()) . '/' . date('m', time()) . '/' . date('d', time());53    $dirName = $dirName . '/' . date('Ym', time());54    if (!file_exists($dirName))55    {56        mkdir($dirName, 0777, true);57    }58 59    // 保存文件60    $res = fopen($dirName . '/' . $fileName, 'a');61    fwrite($res, $file);62    fclose($res);63 64    return array(65        'fileName' => $fileName,66        'saveDir' => $dirName67    );68}  实战经历:博客中有些图片是直接引用其他网站的,这些天不知道咋地,估计是对方做了防盗链操作,导致博客中的图片显示不出来,没办法,只好用PHP批量采集下来,并且批量替换博文中的图片地址:01/**02 * 批量下载博客中的图片到本地03 */04public function index()05{06    global $_G;07 08    $blogModel = model('Blog', 'blog');09    $list = $blogModel->order('gid desc')->limit(10)->findPage();10 11    $page = get_gpc('page') ? get_gpc('page') : 1;12    $totalPages = $list['totalPages'];13    $page = $page + 1;14 15    if ($page > $totalPages)16    {17        die('更新完毕!');18    }19 20    foreach ($list['data'] as $val)21    {22        $content = $val['content'];23        $excerpt = $val['excerpt'];24 25        $_G['isContentUpdate'] = $_G['isExcerptUpdate'] = false;26 27        /* 内容 */28        $content = preg_replace_callback("/src=\"(http:\/\/images\.cnblogs\.com\/cnblogs_com[^\"]+)\"/", function($matches) {29 30            global $_G;31            $_G['isContentUpdate'] = true;32 33            // 下载远程图片到本地34            $res = download_image($matches[1], 'old', 'd:/PHP/xampp/htdocs/emlog/data/upload');35 36            // 返回 下载后的图片url地址37            return 'src="/data/upload/' . date('Ym', time()) . '/' . $res['fileName'] . '"';38 39        }, $content);40 41        /* 摘要 */42        $excerpt = preg_replace_callback("/src=\"(http:\/\/images\.cnblogs\.com\/cnblogs_com[^\"]+)\"/", function($matches) {43 44            global $_G;45            $_G['isExcerptUpdate'] = true;46 47            // 下载远程图片d到本地48            $res = download_image($matches[1], 'old', 'd:/PHP/xampp/htdocs/emlog/data/upload');49 50            // 返回 下载后的图片url地址51            return 'src="/data/upload/' . date('Ym', time()) . '/' . $res['fileName'] . '"';52 53        }, $excerpt);54 55        /* 更新数据库 */56        $where = array(57            'gid' => $val['gid']58        );59        $data = array();60 61        if ($_G['isContentUpdate'])62        {63            $data['content'] = $content;64        }65 66        if ($_G['isExcerptUpdate'])67        {68            $data['excerpt'] = $excerpt;69        }70 71        if ($data)72        {73            $blogModel->where($where)->save($data);74        }75    }76 77    /* 更新下一页 */78    $url = url('blog/Main/index', array('page' => $page));79    $msg = '正在更新' . $page . '/' . $totalPages;80    redirect($url, 2, $msg);81}

转载于:https://my.oschina.net/yonghan/blog/602485

你可能感兴趣的文章
Pchar的相关用法
查看>>
es笔记记录php的curd
查看>>
解决jQuery ajax动态新增节点无法触发点击事件的问题
查看>>
Java里怎么实现点击一个按钮然后在文本框里显示按钮对应的字符?
查看>>
函数计算的 Python手册小问题
查看>>
<转载>一直以来伴随我的一些学习习惯 – 2
查看>>
Transaction 'IREG', Abend 'APCT', at '????'.
查看>>
30343上机过程
查看>>
304413存储过程和触发器
查看>>
性能测试之数据准备
查看>>
Django艺术起点(初探)
查看>>
EXT.NET复杂布局(二)——报表
查看>>
Multipart forms from C# client
查看>>
过滤及分析数据包
查看>>
STM32中断名词
查看>>
[转]Java数组扩容算法及Java对它的应用
查看>>
01.Java安装及环境变量的设置
查看>>
十四、curator recipes之DistributedAtomicLong
查看>>
模板中的名字查找问题
查看>>
StringUtils工具类用法
查看>>