PHPCMS不能下载保存开启了ssl的https站点图片的解决办法

发表于2023-11-21 17:57:19来源于网络转载

次点击[] [] [] [打印] [关闭窗口] [评论]

欢迎大家加入创想工作室QQ群 网络瘫痪上不了网?电脑出故障?找破解软件?加入创想工作室QQ群,向大神求助,一步解决问题!QQ群号码:326338868[点此获取更多QQ群]
大家有没有发现phpcms在下载一些加了ssl的网站的图片的时候会出出现失败下载不了的情况,这是因为phpcms v9默认情况下只能保存http协议的远程图片,然后现在有很多网站启用了https协议,从这些网站上复制过来的图片也是https的,这种情况下phpcms是不能自动保存远程图片的。
 
因为phpcms也好多年没更新了,所以后来新出来的ssl自然也没有更新补丁,这样就只能自己想办法了。当然也可以把远程图片保存功能给关掉,但为了从根本上解决问题或者是你的网站天天要远程保存别人的资源,那这个方法可能就不好使了。我们来看看怎么修改吧。
 
打开 phpcms/libs/classes/attachment.class.php文件,对fillurl方法修改,找到代码
 
if(strlen($surl)<7)
$okurl = 'http://'.$BaseUrlPath.'/'.$surl;
elseif($preurl=="http:/"||$preurl=='ftp://' ||$preurl=='mms://' || $preurl=="rtsp://" || $preurl=='thunde' || $preurl=='emule:'|| $preurl=='ed2k:/')
$okurl = $surl;
 
在后面插入以下代码
 
elseif(strtolower(substr($surl,0,8))=='https://'){
$okurl = $surl;
}
 
再找到代码
 
if($preurl=='ftp://' || $preurl=='mms://' || $preurl=='rtsp://' || $preurl=='thunde' || $preurl=='emule:'|| $preurl=='ed2k:/') {
return $okurl;
}
 
在后面插入以下代码
 
elseif(strtolower(substr($surl,0,8))=='https://'){
return $okurl;
}
 
经过上述修改已经可以下载https打头的网址,但又发现如果网址带参数的话(如https://www.xxxx.com.cn/blogfile/201701/16/BbsImg148455553563159_2448x2448.jpg?x-oss-process=image/resize,w_800/format,jpg)还是会出现下载不了的情况,继续对download方法修改,找到代码
 
if(!preg_match_all("/(href|src)=(["|']?)([^ "'>]+.($ext))\2/i", $string, $matches)) return $value;
 
修改为
 
if(!preg_match_all("/(href|src)=(["|']?)([^ "'>]+.($ext))(?S*)?\2/i", $string, $matches)) return $value;

上一篇:PHPCMS支持https的修改

下一篇:最后一页

© copyright 2002-2024, 22BA.COM All Rights Reserved

网站备案号:粤ICP备19114910号

ChuangXiang Design Studio - WebDesign & Internet Marketing

关于我们业务范围联系我们开心一刻网站地图

QQ群一:326338868QQ群二:78712271

QQ群三:193078177

邮箱:news@22ba.com

地址:深圳市福田区金田路现代国际大厦2606