DreamPages

pbootcms远程图片自动自动本地化

关键字:
日期:2025-05-04 访问:14次 作者:admin
首页 >> 技术文档 >> Wordpress教程 >> 后台设置

找到文件:appsdmincontrollercontentContentController.php
第一步:在文件的最底部最后一个大括号前面添加一下代码:

// 处理图片 
    private function processRemoteImages($content) { 
        $content = html_entity_decode($content, ENT_QUOTES, 'UTF-8'); 
        // 匹配所有图片链接 
        $pattern = '//i'; 
        preg_match_all($pattern, $content, $matches); 
        $imageUrls = $matches[1]; 
        $domain = $this->domain(); 
        foreach ($imageUrls as $url) { 
            // 跳过本地图片 
            if (strpos($url, $domain) === 0) continue; 
            if(substr($url, 0, 7) == '/static')  continue; 
            // 下载图片 
            $savePath = ROOT_PATH . '/static/upload/image/'.date('Ymd'); 
            if (!is_dir($savePath)) mkdir($savePath, 0755, true); 
     
            $filename = $this->saveRemoteImage($url, $savePath); 
            if ($filename) { 
                // 替换内容中的URL 
                $newUrl = $domain . '/static/upload/image/'.date('Ymd').'/' . $filename; 
                $content = str_replace($url, $newUrl, $content); 
            } 
        } 
        return $content; 
    } 
     
    public function saveRemoteImage($url, $savePath) { 
        if(substr($url, 0, 2) == '//') $url = 'https:'.$url; 
        // 生成唯一文件名 
        $ext = pathinfo($url, PATHINFO_EXTENSION); 
        $filename =  time() . mt_rand(100000, 999999)  . '.' . $ext; 
        $fullPath = $savePath . '/' . $filename; 
        // 下载图片 
        $ch = curl_init(); 
        curl_setopt($ch, CURLOPT_URL, $url); 
        curl_setopt($ch, CURLOPT_RETURNTRANSFER, true); 
        curl_setopt($ch, CURLOPT_TIMEOUT, 10); 
        curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false); // 跳过SSL检查 
        $data = curl_exec($ch); 
        curl_close($ch); 
        if ($data) { 
            file_put_contents($fullPath, $data); 
            return $filename; 
        } 
        return false; 
    } 
     
    public function domain(){ 
        $protocol =  ((isset($_SERVER['HTTPS']) && $_SERVER['HTTPS'] == 'on') || (isset($_SERVER['HTTP_X_FORWARDED_PROTO']) && $_SERVER['HTTP_X_FORWARDED_PROTO'] == 'https')) ? 'https://' : 'http://'; ; 
        $host = $_SERVER['HTTP_HOST']; 
        return $protocol. $host; 
    }

第二步:找到当前页面的public function add()方法里边的

$content = post('content');

在后边添加代码:

$content = $this->processRemoteImages($content);//自动处理远程图片

第三步:在当前页面的public function mod()方法里边的

$content = post('content');

在后边添加代码:

$content = $this->processRemoteImages($content);//自动处理远程图片

更新缓存,即可自动保存远程图片

注意事项:
1、开启云存储oss之类的不能使用,否则会把图片给你本地化
2、如果远程图片比较多,下载速度回不较慢,这样在保存文章的时候需要稍等一会


Tags: