discuz云平台报调用远程接口失败的问题分析和解决
根据网络两篇文章整理
问题描述:
当开通或关闭某个云平台服务的时候,报如下错误信息:
调用远程接口失败。请检查您的服务器是否处于内网以及您服务器的防火墙设置。
云平台测试站点的接口文件正常,于是开始在文件里断点记录,发现程序也执行完了。
咨询了下云平台的同事,说是有可能是超时导致的。
于是进站点后台,进入chrome开发者模式下的网络选项卡,记录所有网络链接。
然后去开通或关闭某个服务,发现需要耗时8s之久,估计确实像同事说的那样是超时导致的。
问题总结:
出现此类问题的站点一般装了很多插件,更新插件缓存时耗时太久导致云平台访问超时没有正确的返回,进而报上面的错误。
解决办法:
找到文件"\api\manyou\Service\Server\Cloud.php"注销掉60到64行:
try { require_once libfile('function/cache'); updatecache(array('plugin', 'setting', 'styles'));
cleartemplatecache(); } catch (Exception $e) { }
修改为:
//try { // require_once libfile('function/cache'); // updatecache(array('plugin', 'setting', 'styles')); // cleartemplatecache(); // } catch (Exception $e) { //}
原理:有些站点安装很多插件,不乏一些程序臃肿的插件,而操作云平台时,需要更新服务器的所有缓存,而时间限制是30秒,这样就会导致操作云平台因超时而报这个错误,注销掉既能解决这个问题;注意:这样操作的用户每次操作完云平台要手动更新一下缓存,否则云平台的菜单可能不更新;(不推荐注销代码的方式解决此问题,因为同步又会出问题,最好是卸载掉所有的插件来修复此问题,修复之后再按照自己的需求开启插件,当开启某插件而导致云平台又不能使用时,就能确定是哪个插件的问题了)
看了各种办法,还是以上这个办法(相比原文,这里只需要修改cloud.php这一个文件)好使,更新代码后,记得要在admin后台工具手动更新下缓存。