我提到的后台站点首页链接不能更新就是上图画线圈部分。
提示:着急寻求解决方法的请移步到文章尾
描述:按照phpcmsv9手册里的方法迁移网站并更新后,发现站点首页链接依旧无法更新
错误思路1:到admin模块下的后台模板查看站点首页的id site_homepage
发现它输出的是个数组的元素,向上查找,发现$currentsite
数组是直接在模板调用,于是在控制器中查找,发现是在init()方法中产生的数组$currentsite
public function init () {
$userid = $_SESSION['userid'];
$admin_username = param::get_cookie('admin_username');
$roles = getcache('role','commons');
$rolename = $roles[$_SESSION['roleid']];
$site = pc_base::load_app_class('sites');
$sitelist = $site->get_list($_SESSION['roleid']);
$currentsite = $this->get_siteinfo(param::get_cookie('siteid'));
/*管理员收藏栏*/
$adminpanel = $this->panel_db->select(array('userid'=>$userid), "*",20 , 'datetime');
$site_model = param::get_cookie('site_model');
include $this->admin_tpl('index');
}
打印$currentsite
Array
(
[siteid] => 1
[name] => 默认站点
[dirname] =>
[domain] => http://192.168.1.55/demo1/
[site_title] => PHPCMS演示站
[keywords] => PHPCMS演示站
[description] => PHPCMS演示站
[release_point] =>
[default_style] => default
[template] => default
[setting] => {"upload_maxsize":"2048","upload_allowext":"jpg|jpeg|gif|bmp|png|doc|docx|xls|xlsx|ppt|pptx|pdf|txt|rar|zip|swf","watermark_enable":"0","watermark_minwidth":"300","watermark_minheight":"300","watermark_img":"statics\/images\/water\/\/mark.png","watermark_pct":"85","watermark_quality":"80","watermark_pos":"9"}
[uuid] => ccbd774d-92c9-11e6-bb0e-708bcdbe1ddb
[url] => http://192.168.1.55/demo1/
)
结果发现数组元素$currentsite['domain']
与实际地址不符。
再查找数组来源$currentsite = $this->get_siteinfo(param::get_cookie('siteid'))
方法:$this->get_siteinfo()方法来源于index.php控制器的父类admin.class.php 这里贴出父类里的代码
/**
* 获取当前站点信息
* @param integer $siteid 站点ID号,为空时取当前站点的信息
* @return array
*/
final public static function get_siteinfo($siteid = '') {
if ($siteid == '') $siteid = self::get_siteid();
if (empty($siteid)) return false;
$sites = pc_base::load_app_class('sites', 'admin');
return $sites->get_by_id($siteid);
}
参数:param::get_cookie(‘siteid’)返回参数 通常返回1 即当前站点id
/**
* 获取通过 set_cookie 设置的 cookie 变量
* @param string $var 变量名
* @param string $default 默认值
* @return mixed 成功则返回cookie 值,否则返回 false
*/
public static function get_cookie($var, $default = '') {
$var = pc_base::load_config('system','cookie_pre').$var;
$value = isset($_COOKIE[$var]) ? sys_auth($_COOKIE[$var], 'DECODE') : $default;
if(in_array($var,array('_userid','userid','siteid','_groupid','_roleid'))) {
$value = intval($value);
} elseif(in_array($var,array('_username','username','_nickname','admin_username','sys_lang'))) { // site_model auth
$value = safe_replace($value);
}
return $value;
}
进行到这里就再没有路了,我已经进入死胡同了。
错误思路2:全文搜索
http://192.168.1.55/demo1/
文件很多,一点点的找,终于在
/demo1/caches/caches_commons/caches_data/sitelist.cache.php
文件中找到如下配置
return array (
1 =>
array (
'siteid' => '1',
'name' => '默认站点',
'dirname' => '',
'domain' => 'http://192.168.1.55/demo1/',
'site_title' => 'PHPCMS演示站',
'keywords' => 'PHPCMS演示站',
'description' => 'PHPCMS演示站',
'release_point' => '',
'default_style' => 'default',
'template' => 'default',
'setting' => '{"upload_maxsize":"2048","upload_allowext":"jpg|jpeg|gif|bmp|png|doc|docx|xls|xlsx|ppt|pptx|pdf|txt|rar|zip|swf","watermark_enable":"0","watermark_minwidth":"300","watermark_minheight":"300","watermark_img":"statics\\/images\\/water\\/\\/mark.png","watermark_pct":"85","watermark_quality":"80","watermark_pos":"9"}',
'uuid' => 'ccbd774d-92c9-11e6-bb0e-708bcdbe1ddb',
'url' => 'http://192.168.1.55/demo1/',
),
);
?>
这上面的代码与最初的打印数组一置,也就是说终于找到了数据来源。
那么新的问题又来了,为什么sitelist.cache.php
文件无法更新呢
似乎又进入绝境了。
后来经同事提醒,发现是系统权限设置的问题。
理性分析一波:
错误的iis配置下的权限图示:
这里没有给写入权限,表明以IIS_IUSERS的用户组权限运行php脚本程序,当然是无法将数据写入到caches文件夹中。
这里给到IIS_IUSERS写入权限,再次更新后台网站,发现网站后台站点首页已完成修改,指向新的链接。
上面的是win系统下的配置web服务运行权限。
下面是linux系统下的配置web服务运行权限。
这种权限配置以超管组运行而且还有可执行的权限,所以要修改为
web服务环境相当恶劣,我们应当尽量少的给予web服务运行权限,来保证网站服务器的相对安全。