人人商城(分销版)1.11.7微擎原版,提示“抱歉,您无权进行该操作,请先登录!”只因为一个字母,我苦找了9个多小时。

人人商城(分销版)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);

卖卖批,成功了! 折腾死我了!

发布了252 篇原创文章 · 获赞 94 · 访问量 54万+

猜你喜欢

转载自blog.csdn.net/cplvfx/article/details/104643648