PbootCMS内容图片抓取远程图片到本地

更新时间:7个月前 作者:CMS开发网 点赞数:0人 阅读数:498次 0 条评论
摘要:这几天一直被百度编辑器自动抓取远程图片的功能困扰。因为这个功能吧,总是时灵时不灵的。有时候会抓取远程图片,有时候又不会抓取远程图片。相信各位都有遇到过。比较无语的功能!一直有很多使用PbootCMS系统的小伙伴问,怎么让文章编辑器中的图片自动下载远程图片?怎样才能实现Pbootcms图片本地化?其实这个跟pbootcms没有太
PbootCMS内容图片抓取远程图片到本地

这几天一直被百度编辑器自动抓取远程图片的功能困扰。因为这个功能吧,总是时灵时不灵的。有时候会抓取远程图片,有时候又不会抓取远程图片。相信各位都有遇到过。比较无语的功能!

一直有很多使用PbootCMS系统的小伙伴问,怎么让文章编辑器中的图片自动下载远程图片?怎样才能实现Pbootcms图片本地化?

其实这个跟pbootcms没有太大关系,pbootcms使用的是百度Ueditor编辑器。我们直接在数据提交的时候做二开就可以实现图片本地化。

本教程前置条件:

1.关闭Ueditor编辑器自动抓取远程图片功能

2.本教程配合本OSS上传使用,会代码的自行去除

演示:

PbootCMS内容图片抓取远程图片到本地

生成文章缩略图

就是不上传图片的时候自动抓取了第一张图为封面,系统默认有这个功能没啥卵用!

生成文章轮播图

就是不上传图集的时候,自动获取编辑器图片数量,数量大于三张的时候自动添加到轮播图里面,没啥卵用!

编辑器样式过滤

有部分小伙伴提到,复制过来的东西太乱了,人家的样式什么的都复制过来了,所以做了个样式过滤,可以过滤编辑里里面所有的style标签,同时会自动给图片添加上ALT标签和TITLE标签,有时候有点用!

远程图片抓取

本教程实现逻辑,当不开启oss的时候,保存文章时检查是否为本站url,不是程序自动下载远程图片,替换为本站链接,开启oss的时候,会检查是否为oss访问链接,不是则自动下载并上传到oss。目前用着一切顺利!

图片转WEBP

就是强制吧图片的后缀给撸了,搭配的oss+cdn,感觉没啥卵用!

修改步骤

1.调用处理函数

文件位置:/apps/admin/controller/content/ContentController.php

add新增函数 和 mod修改函数 都放进去这段代码就可以

PbootCMS内容图片抓取远程图片到本地

2.添加处理函数

文件位置:/apps/common/function.php

/*
 * 富文本编辑器内容处理
 * CMS开发网
 * 2022-05-02
 */
function Handle_Content($title,$content)
{
    // 转义
    $content = html_entity_decode($content);
    // 构造数据
    $data = array();
    // 遍历编辑器内所有图片
    $pattern_imgTag = '/<img.*?(?:>|/>)/i';
    preg_match_all($pattern_imgTag,$content,$match_img);
    if (isset($match_img[0])) {
        foreach ($match_img[0] as $key => $img_tag)
        {
            $pattern_src = '/srcs*=s*['"]?([^'"]*)['"]?/i';
            preg_match_all($pattern_src,$img_tag,$matchSrc);
            if (isset($matchSrc[1])) {
                foreach ($matchSrc[1] as $k => $src)
                {
                    // 远程图片抓取
                    if(Config::get('is_picture')) {
                        // 远程图片抓取
                        if (strpos($src, Config::get('oss_url')) === false) {
                            // 将远程图片下载到本地
                            $dada = getFileSize($src);
                            $content = str_replace($src, $dada, $content);
                        }
                        // 缩略图抓取
                        if(!$key && Config::get('is_ico')) {
                            $data['ico'] = $dada?:$src;
                        }
                        // 图集处理
                        if(Config::get('pic_number')) {
                            $img_src_arr[] = $dada?:$src;
                        }
                    }
                    else{
                        // 缩略图抓取
                        if(!$key && Config::get('is_ico')) {
                            $data['ico'] = $src;
                        }
                        // 图集处理
                        if(Config::get('pic_number')) {
                            $img_src_arr[] = $src;
                        }
                    }
                }
            }
        }
    }
    // 图集处理(三张以上图片)
    if(count($img_src_arr) > 2) {
        $data['pics'] = implode(',',$img_src_arr);
    }
    // 优化编辑器内容
    if(Config::get('is_format') == 1) {
        $preg = "/<img.*?src=["|'](.*?)["|'].*?>/";
        $replace = '<img src="$1" alt="'.$title.'"title="'.$title.'">';
        $content = preg_replace($preg, $replace,$content);
    }
    // 删除编辑器多余的那个<p><br></p>
    $content = str_replace("<p><br/></p>","",$content);
    // 内容反转义
    $data['content'] = htmlspecialchars($content);
    return $data;
}

再把下载函数丢进去

// 下载远程图片保存到本地
function getFileSize($url)
{
    if(strpos($url,'?') !== false)
    {
        $url_data = explode('?',$url);
        $url = $url_data[0];
    }
    $save_dir = ROOT_PATH.'/static/image/'.date('Ym',time()).'/';
    $filename = time() . mt_rand(100000, 999999).'.webp';
    $ch = curl_init();
    curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false); // 信任任何证书
    curl_setopt($ch, CURLOPT_URL, $url);
    curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
    curl_setopt($ch, CURLOPT_CONNECTTIMEOUT, 30);
    $file = curl_exec($ch);
    curl_close($ch);
    $resource = fopen($save_dir . $filename, 'a');
    fwrite($resource, $file);
    fclose($resource);
    unset($file,$url);
    return upload_oss($save_dir.$filename);
}

经测试,支持微信公众号图片下载,有防盗链、防采集措施的网站图片有些可以下载,有些不行!

代码好坏就这水平了,看上的用,看不上的自己撸!

THE END

如果你的问题还没有解决,可以加入交流群和群友一起讨论。如果想请站长喝杯咖啡,点击打赏按钮扫码赞赏~

版权声明:本站部分教程是由网络收集,然后整理编辑而成,版权归原作者所有,如果由此而造成的侵权,请与我们联系,审核属实后立即删除,谢谢!请与我们联系,审核属实后立即删除,谢谢!

发表评论

666 感谢 牛逼 卧槽
发表评论
评论列表
暂无评论
关于我们
CMS开发网是一个致力于PbootCMS教程发布,技术交流学习分享开发创作的网站,涵盖PbootCMS应用市场,PB二次开发,PB模版下载,欢迎各位前,欢迎各位前来投稿,您的各位前来投稿使广大PB爱好者,欢迎各位前来投稿,您的分享将会使广大P分享将会使广大PB爱好者来投稿,您的分享将会使广大PB爱好者更好的进步。
微信公众号
微信二维码
联系方式
技术交流QQ群号201010290
电话:400-0707-327
邮箱:kefu@kaifacn.com
坐标:陕西 · 西安
网站地图 陕ICP备2020015383号 陕公网安备61019002001930号

Copyright © 2022 CMS开发网 All Rights Reserved.本站采用创作共用版权 CC 4.0 BY-SA 许可协议