首页 php教程 php手册 discuz 3.x 核心文件class_core.php解析

discuz 3.x 核心文件class_core.php解析

Aug 25, 2016 am 10:20 AM

class_core.php是discuz 3.x的核心文件,几乎所有PHP脚本都有引用此文件初始化论坛运行环境。以下解析引用3.2版discuz。

line 12-15:常量定义
IN_DISCUZ: true  //用于防止内部PHP引用文件被直接调用。
DISCUZ_ROOT: E:\\project\\discuz\\    //论坛所在的物理路径
DISCUZ_CORE_DEBUG: false              //核心代码是否测试模式
DISCUZ_TABLE_EXTENDABLE: false        //未知

 

line 17: 设置自定义异常处理功能
处理方法位于:core::handleException静态方法。

 

line 24-30:定义自动加载类函数 该方法位于:core::autoload($class)

<span style="color: #0000ff;">if</span>(<span style="color: #008080;">function_exists</span>('spl_autoload_register'<span style="color: #000000;">)) {
    spl_autoload_register(</span><span style="color: #0000ff;">array</span>('core', 'autoload')); <span style="color: #008000;">//</span><span style="color: #008000;">自动加载类函数</span>
} <span style="color: #0000ff;">else</span><span style="color: #000000;"> {
    </span><span style="color: #0000ff;">function</span> __autoload(<span style="color: #800080;">$class</span><span style="color: #000000;">) {
        </span><span style="color: #0000ff;">return</span> core::autoload(<span style="color: #800080;">$class</span><span style="color: #000000;">);
    }
}</span>
登录后复制

该方法简述:引用./source/class/文件夹下的类文件。方法参数为类名称,类名称如有_下划线,则前缀为子文件夹名称,后缀为文件夹名_类名。 ./source/class/子文件夹/子文件夹名_类 例:$class = "discuz_base",则引用类文件为: ./source/class/discuz/discuz_base.php 所有引用过的文件名都存储在core::imports数组内。

 

line 33:执行C::createapp()静态方法.

C::creatapp();
登录后复制

该方法为最重要的方法,是初始化论坛的方法,该方法创建discuz_application类对象,使用单一工厂模式。 discuz_application类位于: ./source/class/discuz/discuz_application.php

C::createapp()方法不直接创建discuz_application类实例,而是通过执行discuz_application::instance()静态方法间接创建。

discuz_application::instance()静态方法new一个实例,构造函数初始化了论坛环境。(详情请看discuz_application.php解析)。

另外,该文件结尾用简写重定义了类名: line 208-209: C重定义core类名; DB重定义discuz_database类名。

 

discuz_application.php解析:

line 57-62:构造函数对论坛参数的初始化,分别用4个方法实施:

    <span style="color: #0000ff;">public</span> <span style="color: #0000ff;">function</span><span style="color: #000000;"> __construct() {
        </span><span style="color: #800080;">$this</span>-><span style="color: #000000;">_init_env();
        </span><span style="color: #800080;">$this</span>-><span style="color: #000000;">_init_config();
        </span><span style="color: #800080;">$this</span>-><span style="color: #000000;">_init_input();
        </span><span style="color: #800080;">$this</span>-><span style="color: #000000;">_init_output();
    }</span>
登录后复制

(1)$this->_init_env():

初始化环境变量 line 87-93:常量定义 MAGIC_QUOTES_GPC:true(5.4版以上为false) ICONV_ENABLE:true MB_ENABLE:true EXT_OBGZIP:true TIMESTAMP:当前时间截 并设当前时区为格林尼治时区

line 94: 引用核心函数库:./cource/function/function_core.php。 引用成功并定义常量:DISCUZ_CORE_FUNCTION:true

line 99-104:设置ini:memory_limit:128M line 106:检测爬虫:IS_ROBOT:false

line 108-112:清除不必要的全局变量。

        <span style="color: #0000ff;">foreach</span> (<span style="color: #800080;">$GLOBALS</span> <span style="color: #0000ff;">as</span> <span style="color: #800080;">$key</span> => <span style="color: #800080;">$value</span><span style="color: #000000;">) {
            </span><span style="color: #0000ff;">if</span> (!<span style="color: #0000ff;">isset</span>(<span style="color: #800080;">$this</span>->superglobal[<span style="color: #800080;">$key</span><span style="color: #000000;">])) {
                </span><span style="color: #800080;">$GLOBALS</span>[<span style="color: #800080;">$key</span>] = <span style="color: #0000ff;">null</span>; <span style="color: #0000ff;">unset</span>(<span style="color: #800080;">$GLOBALS</span>[<span style="color: #800080;">$key</span><span style="color: #000000;">]);
            }
        }</span>
登录后复制

 

line 114-203:定义全局变量:$_G,对象本身的var属性也保存一份其引用。

(2)$this->_init_config() 初始化环境:

line 289: 引用./conifg/config_global.php配置参数文件

line 299:检测并设定$_config['security']['authkey']的值。

        <span style="color: #0000ff;">if</span>(<span style="color: #0000ff;">empty</span>(<span style="color: #800080;">$_config</span>['security']['authkey'<span style="color: #000000;">])) {
            </span><span style="color: #800080;">$_config</span>['security']['authkey'] = <span style="color: #008080;">md5</span>(<span style="color: #800080;">$_config</span>['cookie']['cookiepre'].<span style="color: #800080;">$_config</span>['db'][1]['dbname'<span style="color: #000000;">]);
        }</span>
登录后复制

 

line 303-315: 检测配置参数是否存在debug配置参数,如果没有则 定义常量DISCUZ_DEBUG:false,否则设为true。

line 316-317:常量定义:STATICURL:static/,则存入var属性。

line 319-320: 将所有$_config数组参数,存入:$this->config和$this->var['config']。

line 322: $_config['cookie']['cookiepath']参数值前加/斜线。

line 325: 重定义$this->var['config']['cookie']['cookiepre']值。

(3)$this->_init_input()初始化输入

line 236-240: 如果魔术引号功能开启,则去除$_GET,$_POST,$_COOKIE反斜线;

line 243-246: 根据$this->config['cookie']['cookiepre']值,将带有此前缀的cookie都存入$this->var['cookie'],key不带前缀。

line 251-253: POST值合并入GET内; GET值存入$this->var['gp_'.键名]中。

line 255-257:$_GET['page']url编码。

line 259-261: 处理掉无效的$_GET['handlekey'],该值只能含有字母数字和下划线。

line 264-268: 将$_GET值存入$this->var['gp_'.键名]中,所有值做addslashes引用(即引号和\作\引用)

line 270-273: 初始化$_GET['mod'],存入$this->var['mod'],mod参数为执行的模块名; 初始化$_GET['inajax'],存入$this->var['inajax'],该值判断请求是否ajax请求; 初始化$_GET['page'],存入$this->var['page']; 初始化$this->var['cookie']['sid'],存入$this->var['sid'],一般情况为空值。

line 275-278: 如果$this->var['cookie']['saltkey']不存在,则生成该值,并存入cookie,有效期1个月。

line 279: 根据$this->var['cookie']['saltkey']和$this->var['config']['security']['authkey'],生成$this->var['authkey']值。

(4)$this->_init_output() 初始化输出:

line 337-342:判断网页是否启用gzip压缩,设定$this->config['output']['gzip']布尔值;并决定设定$_G['gzipcompress']的布尔值。

line 344-346: 开启输出缓存。

line 348-353: 设定$_G['charset']和常量CHARSET的字符编码值,取值于$this->config['output']['charset']。 将字符编码输出于网页头部。

 

本站声明
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn

热AI工具

Undresser.AI Undress

Undresser.AI Undress

人工智能驱动的应用程序,用于创建逼真的裸体照片

AI Clothes Remover

AI Clothes Remover

用于从照片中去除衣服的在线人工智能工具。

Undress AI Tool

Undress AI Tool

免费脱衣服图片

Clothoff.io

Clothoff.io

AI脱衣机

AI Hentai Generator

AI Hentai Generator

免费生成ai无尽的。

热门文章

R.E.P.O.能量晶体解释及其做什么(黄色晶体)
3 周前 By 尊渡假赌尊渡假赌尊渡假赌
R.E.P.O.最佳图形设置
3 周前 By 尊渡假赌尊渡假赌尊渡假赌
R.E.P.O.如果您听不到任何人,如何修复音频
3 周前 By 尊渡假赌尊渡假赌尊渡假赌
WWE 2K25:如何解锁Myrise中的所有内容
3 周前 By 尊渡假赌尊渡假赌尊渡假赌

热工具

记事本++7.3.1

记事本++7.3.1

好用且免费的代码编辑器

SublimeText3汉化版

SublimeText3汉化版

中文版,非常好用

禅工作室 13.0.1

禅工作室 13.0.1

功能强大的PHP集成开发环境

Dreamweaver CS6

Dreamweaver CS6

视觉化网页开发工具

SublimeText3 Mac版

SublimeText3 Mac版

神级代码编辑软件(SublimeText3)