人人商城(分销版)1.11.7微擎原版,提示“抱歉,您无权进行该操作,请先登录!”
话说,当时这个项目迁移服务器,我把项目迁移到一台windows 服务器后,用IIS部署。
前负责人只给了一个提示“需要SSL”证书,用https访问;
我安装证书后,打开页面,测试https正常,就没有再管;
后期,客服和客户一直反应“程序无法正常使用,总是提示错误信息”(如上图);
询问前负责人,他也不知道啥情况(咱不往消极方面脑补);
通过测试发现,只要打开时用HTTPS 访问,是没有问题的,但是部分链接,程序给的全路径地址,用户直接点击,就会提示错误信息;
接着就放年假了;
年假期间,客户和客服还是一直反应这个问题,我就暗下决心,开工的第一件事,就是把这个问题给处理掉。
上午,处理了一些可以迅速解决的问题,
下午,14:00开始处理这个系统的提示错误信息的问题,一直到晚上22:35才处理掉,历时9个小时左右。
他的这个程序的路径是这样的:
/web/index.php?c=site&a=entry&eid=8
/web/index.php 这个是根目录的文件
c=site 这个应该是control的简写c,也就是控制器
a=entry 这个应该是action的简写a,也就是控制器下面的动作
eid=8 这个就是参数了
if($_W['os'] == 'mobile' && (!empty($_GPC['i']) || !empty($_SERVER['QUERY_STRING']))) {header('Location: ./app/index.php?' . $_SERVER['QUERY_STRING']);
} else {header('Location: ./web/index.php?' . $_SERVER['QUERY_STRING']);
根据根目录的 index.php提供的代码,我在 \web\web\source\site 这个文件夹下面找到了“entry.ctrl.php”文件。
php断点语句,调试的几种方法
https://blog.csdn.net/cplvfx/article/details/83826917
通过测试发现,程序的逻辑判断就在这个“entry.ctrl.php”文件里;
if(!is_error($site)) {//echo("if[is_error(site)]<br>");$sysmodule = system_modules();if(in_array($m, $sysmodule)) { $site_urls = $site->getTabUrls();}$method = 'doWeb' . ucfirst($entry['do']);//var_dump($method);exit($site->$method());
}
问题的关键就在这段代码里,变量$site和$method;这2个变量存在这程序的跳转
接着就找到了“web\addons\ewei_shop\site.php”文件里的这行代码
//订单管理 public function doWebOrder(){ $this->_exec(__FUNCTION__,'list'); }
到这里,我就把路给走死了,不知道接下来程序去哪里了;
我就在这里目录和这个页面代码里继续找突破口,我在“\web\addons\ewei_shop\template\web\_menu.html”这个模板文件里找到了a链接的地址是这样的
<li><a href="{php echo $this->createWebUrl('order', array('op' => 'display'))}">全部订单</a></li>
重点是“createWebUrl()“这个方法,
在”web\addons\ewei_shop\site.php“这个文件里代码找了这一句
require_once IA_ROOT. '/addons/ewei_shop/version.php';
require_once IA_ROOT. '/addons/ewei_shop/defines.php';
require_once EWEI_SHOP_INC.'functions.php';
require_once EWEI_SHOP_INC.'core.php';
require_once EWEI_SHOP_INC.'plugin/plugin.php';
require_once EWEI_SHOP_INC.'plugin/plugin_model.php';
class Ewei_shopModuleSite extends Core {
然后根据对 ”IA_ROOT“和”EWEI_SHOP_INC“的猜测找到了这个类继承的 Core类
”\web\addons\ewei_shop\core\inc\core.php“
在这个页面搜索“createWebUrl()“这个方法,
public function createWebUrl($do, $query = array()){global $_W;$do = explode('/', $do);if (count($do) > 1 && isset($do[1])) {$query = array_merge(array('p' => $do[1]), $query);}return $_W['siteroot'] . 'web/' . substr(parent::createWebUrl($do[0], $query, true), 2);}
重点是这个”$_W['siteroot']“和”global $_W“,我知道global是全局变量;
那么,重新,打回,从头开始找,从根目录的”index.php“看起;
require './framework/bootstrap.inc.php';
这一行代码引起了我的注意,开始找这个文件
在”\web\framework\bootstrap.inc.php“找到这个文件,
为什么要找这个文件呢?因为我猜测 用global声明的$_W变量,一定是在程序初始化的时候给赋值的。
其实,在此之前,我一直以为是在某个配置文件里;
直到我看到这个代码
$_W['siteroot'] = htmlspecialchars('http://' . $_SERVER['HTTP_HOST'] . $sitepath);
果断把”http“改成”https“后进行测试,
$_W['siteroot'] = htmlspecialchars('https://' . $_SERVER['HTTP_HOST'] . $sitepath);
卖卖批,成功了! 折腾死我了!