最近一直在写一款Emlog后台模版,所以遇到很多问题,其中就是在线应用安装失败的问题,下面冷静分析一波。
首先我们打开路径/admin/globals.php,
我们可以看到第10行,官方服务域名为 http://www.emlog.net/ 但是现在emlog全局都加了https所以如果你的后台是https的,请一定要先修改这行为 https://www.emlog.net/ 之后才能正常访问在线应用页面
然后我们随便选一款模版进行安装。
当点击安装后,会提示 模板下载失败,可能是服务器网络问题,请手动下载安装,返回应用中心
到这里不要慌张,连忙审查一波。
由上图看到 source 参数传递 的值为
/template/download/676
然后我们点到preview可以看到如下内容
<br /> <b>Warning</b>: fopen(https://www.emlog.net//template/download/676): failed to open stream: HTTP request failed! HTTP/1.1 404 Not Found in <b>D:\phpStudy\PHPTutorial\WWW\include\lib\function.base.php</b> on line <b>808</b><br />对没错,就是这个报错了,意思就是FOpen(https://www.emlog.net//template/download/676):打开流失败:HTTP请求失败!HTTP / 1.1 404未找到
为什么会找不到呢?细心的小朋友应该会发现问题答案了。没错https://www.emlog.net/后面还有一个/符号,所以这个多的是哪儿来的呢?
然后我们回到上一步,审查安装这个按钮的链接
urldecode之后的链接就是http://localhost/admin/store.php?action=instpl&source=/template/download/676
也就是之前source传递的参数/template/download/676
那么官方服务域名一直没动过的情况下,链接参数发生改变,应该就是官方加了 / 符号了,至于为什么加,原因未知。
现在解决有两种办法
1、修改官方服务域名地址为https://www.emlog.net
如果是小白可以修改这一行,从而解决这个问题。
但是你修改官方服务域名的话,从引发另外一个问题,就是你的后台应用直接会访问不了。
为什么访问不了?还是冷静分析一波。
打开路径/admin/views/store.php(这里使用的是官方的主题目录,如果你换过主题找自己主题的目录文件即可)
上图中的第4行,我们可以看到
src="<?php echo OFFICIAL_SERVICE_HOST;?>store/<?php echo Option::EMLOG_VERSION; ?>/<?php echo $site_url_encode; ?>"
<?php echo OFFICIAL_SERVICE_HOST;?>为官方服务域名,之后的store为二级路径,这之间没有 / 符号分隔,所以访问的地址就会变成
https://www.emlog.netstore/5.3.1/aHR0cDovL2xvY2FsaG9zdC8%3D
显然这个地址是不对的,在<?php echo OFFICIAL_SERVICE_HOST;?>后面加上一个 / 符号即可。这样就可以完美修复了。
2、把source参数的第一个 / 符号使用函数替换掉
如果是大佬可以试试。
如果要改source传递的参数,需要打开路径/amdin/store.php
我们可以看到第38行$source = isset($_GET['source']) ? trim($_GET['source']) : '';就是接收source参数的地方。我们直接修改第44行$temp_file = emFecthFile(OFFICIAL_SERVICE_HOST . $soure);为
$temp_file = emFecthFile(OFFICIAL_SERVICE_HOST . preg_replace('/\//', '', $source, 1));就可以替换删除第一个 / 符号了
如果都不想修改的话,那就放大招吧,疯狂艾特 那多 ,从根源解决这个路径问题。
ps:尽请期待我的新作,Y+Eadmin后台模版
发表评论: