您的位置:首页 > 编程语言 > PHP开发

discuzX3.2 admin.php

2014-06-09 14:19 441 查看
$discuz = C::app();

$discuz->init();

这是创建discuz内核的方式,通过静态方法并调用init方法,

C是继承自core的类,执行C::app();将调用

core类的app方法,此处调用后执行的是返回core静态

变量的过程,在core中定义的返回代表应用的静态的

类变量$_app,这个对象会管理config,管理程序中使用的对象实例。

是程序的启动器的角色。

require './source/class/class_core.php';

执行后,C::creatapp();会执行,即调用 core中的

createapp方法,这里使用的是单例模式生成全局对象,

在discuz_application类中的instance方法将创建

全局对象,

在discuz_application类中的方法定义为,

static function &instance() {
static $object;
if(empty($object)) {
$object = new self();
}
return $object;
}

这是只会调用一次的方法,返回的是代表整个应用的全局

对象,

在生成后将调用init方法初始化系统要使用的环境,

这里是初始化数据库,初始化系统基本配置,登录用户,

session会话变量,移动应用,

$admincp = new discuz_admincp();

$admincp->core  = & $discuz;

$admincp->init();

这将调用discuz_admincp类,并且指定core,

进行初始化,调用init方法,

discuz_admincp类的路径

source/class/discuz/discuz_admincp.php

在构造函数中没有初始化操作,

调用init后进行管理后台需要的操作的初始化,

check_cpaccess进行权限验证,验证结果是

重定向到后台登录页面。

通过

require $this->admincpfile('login');

加载登录的控制器页面。admincpfile函数的

定义为

function admincpfile($action) {
return './source/admincp/admincp_'.$action.'.php';
}

这里是加载source/admincp/admincp_login.php文件。

admincp_login.php中生成的是管理中心的登录界面,

在登录界面中使用

<form method="post" autocomplete="off" name="login" id="loginform" action="admin.php?">

在登录界面键入管理员用户名和密码后,提交的页面

是admin.php文件。在admin.php中包含有

接收变量的语句:

$action = preg_replace('/[^\[A-Za-z0-9_\]]/', '', getgpc('action'));

$operation = preg_replace('/[^\[A-Za-z0-9_\]]/', '', getgpc('operation'));

$do = preg_replace('/[^\[A-Za-z0-9_\]]/', '', getgpc('do'));

$frames = preg_replace('/[^\[A-Za-z0-9_\]]/', '', getgpc('frames'));

这是admin.php中获得Query_string中

参数的方法,一般此时要进行的是安全方面

的处理,要防止SQL注入,要防止php代码

的攻击,

此时$action的值为空,

$frames的值不为 null ,会调用show_admincp_main

方法显示管理员控制面板。

admin.php这个页面的作用

这是管理界面的控制器,不同的action和控制器的加载

都是在admin.php中执行的,

require $admincp->admincpfile($action);

是根据不同的action加载不同的控制器的方法。

管理员登录操作 后台管理的相关的操作都要经过权限

的验证,当通过权限验证后才可以进行相关的操作,

这些权限的管理是细化到不同的操作,在admin.php中

规定了不同的操作的操作码。管理员后台的操作的链接

一般形式是/admin.php?action=XXX

in_array($action, $admincp_actions_normal)

是一个检测权限的方法,一般使用的是ifelse的判断

的方式,使用数组的方式检测权限的有效性。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  源码 php discuz 编程