帝国cms报错、远程保存图片无效的原因与解决方案

帝国cms报错、远程保存图片无效的原因与解决方案

V+变量
2024-12-08 / 1 评论 / 3 阅读 / 正在检测是否收录...

帝国cms远程保存图片是一个非常重要的功能,但一些站长在使用中可能会发现这个功能突然无效了,这是什么原因,要如何处理呢?

帝国cms远程保存图片无效的原因
图片格式和大小设置问题
如果帝国cms上传文件没有添加png上传模式,而图片又刚好是png,则上传就会出问题。解决方案也很简单,到系统设置-系统参数设置-文件设置-后台上传文件扩展名里添加png即可,注意分隔符也要。

图片是https的
帝国目前暂不支持远程保存https图片,如果需要,则要进行以下调整。

1.打开文件/e/class/connect.php
2.1、在connect.php文件最上面,添加以下函数

function getHTTPS($url) {
    $ch = curl_init();
    curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, FALSE);
    curl_setopt($ch, CURLOPT_HEADER, false);
    curl_setopt($ch, CURLOPT_FOLLOWLOCATION, true);
    curl_setopt($ch, CURLOPT_URL, $url);
    curl_setopt($ch, CURLOPT_REFERER, $url);
    curl_setopt($ch, CURLOPT_RETURNTRANSFER, TRUE);
    $result = curl_exec($ch);
    curl_close($ch);
    return $result;
}

3.搜索function ReadFiletext,找到以下函数:

function ReadFiletext($filepath){
    $filepath=trim($filepath);
    $htmlfp=@fopen($filepath,"r");
    //远程
    if(strstr($filepath,"://"))
    {
    while($data=@fread($htmlfp,500000))
    {
    $string.=$data;
    }
    }
    //本地
    else
    {
    $string=@fread($htmlfp,@filesize($filepath));
    }
    @fclose($htmlfp);
    return $string;
}

替换成:

function ReadFiletext($filepath){
    $filepath=trim($filepath);
    $htmlfp=@fopen($filepath,"r");
    //远程
    if(strstr($filepath,"https://")){
    return getHTTPS($filepath);
    }
    if(strstr($filepath,"://"))
    {
    while($data=@fread($htmlfp,500000))
    {
    $string.=$data;
    }
    }
    //本地
    else
    {
    $string=@fread($htmlfp,@filesize($filepath));
    }
    @fclose($htmlfp);
    return $string;
}

其他可能的原因
服务器配置问题
需要在php.in中把allow_url_fopen设置为on

入库超时导致502错误
一般情况下不会出现这个问题,如果出现了,可以尝试将php等待时间改长一点,而后重启php服务。

被复制的源站不支持跨域、被引用
如果被复制的源站不支持图片被站外引用,也可能导致图片无法被存储到本地。如果排查确认后是这个原因,则只能更换源站进行信息复制。

通过以上原因的排查与处理,基本可以解决远程保存图片失败的问题。

0

评论 (1)

取消
  1. 头像
    XBoy 作者
    Windows 10 · Google Chrome

    正好今天碰到这个问题了,顺利解决

    回复