帝国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服务。
被复制的源站不支持跨域、被引用
如果被复制的源站不支持图片被站外引用,也可能导致图片无法被存储到本地。如果排查确认后是这个原因,则只能更换源站进行信息复制。
通过以上原因的排查与处理,基本可以解决远程保存图片失败的问题。
正好今天碰到这个问题了,顺利解决