0

0

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

php中文网

php中文网

发布时间:2016-08-25 10:20:46

|

1687人浏览过

|

来源于php中文网

原创

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        //未知

 

立即学习PHP免费学习笔记(深入)”;

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

 

立即学习PHP免费学习笔记(深入)”;

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

if(function_exists('spl_autoload_register')) {
    spl_autoload_register(array('core', 'autoload')); //自动加载类函数
} else {
    function __autoload($class) {
        return core::autoload($class);
    }
}

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

 

立即学习PHP免费学习笔记(深入)”;

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类名。

 

立即学习PHP免费学习笔记(深入)”;

discuz_application.php解析:

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

    public function __construct() {
        $this->_init_env();
        $this->_init_config();
        $this->_init_input();
        $this->_init_output();
    }

(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:清除不必要的全局变量。

        foreach ($GLOBALS as $key => $value) {
            if (!isset($this->superglobal[$key])) {
                $GLOBALS[$key] = null; unset($GLOBALS[$key]);
            }
        }

 

立即学习PHP免费学习笔记(深入)”;

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

多墨智能
多墨智能

多墨智能 - AI 驱动的创意工作流写作工具

下载

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

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

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

        if(empty($_config['security']['authkey'])) {
            $_config['security']['authkey'] = md5($_config['cookie']['cookiepre'].$_config['db'][1]['dbname']);
        }

 

立即学习PHP免费学习笔记(深入)”;

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']。 将字符编码输出于网页头部。

 

立即学习PHP免费学习笔记(深入)”;

PHP速学教程(入门到精通)
PHP速学教程(入门到精通)

PHP怎么学习?PHP怎么入门?PHP在哪学?PHP怎么学才快?不用担心,这里为大家提供了PHP速学教程(入门到精通),有需要的小伙伴保存下载就能学习啦!

下载

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

相关专题

更多
Golang 性能分析与pprof调优实战
Golang 性能分析与pprof调优实战

本专题系统讲解 Golang 应用的性能分析与调优方法,重点覆盖 pprof 的使用方式,包括 CPU、内存、阻塞与 goroutine 分析,火焰图解读,常见性能瓶颈定位思路,以及在真实项目中进行针对性优化的实践技巧。通过案例讲解,帮助开发者掌握 用数据驱动的方式持续提升 Go 程序性能与稳定性。

9

2026.01.22

html编辑相关教程合集
html编辑相关教程合集

本专题整合了html编辑相关教程合集,阅读专题下面的文章了解更多详细内容。

56

2026.01.21

三角洲入口地址合集
三角洲入口地址合集

本专题整合了三角洲入口地址合集,阅读专题下面的文章了解更多详细内容。

28

2026.01.21

AO3中文版入口地址大全
AO3中文版入口地址大全

本专题整合了AO3中文版入口地址大全,阅读专题下面的的文章了解更多详细内容。

389

2026.01.21

妖精漫画入口地址合集
妖精漫画入口地址合集

本专题整合了妖精漫画入口地址合集,阅读专题下面的文章了解更多详细内容。

116

2026.01.21

java版本选择建议
java版本选择建议

本专题整合了java版本相关合集,阅读专题下面的文章了解更多详细内容。

3

2026.01.21

Java编译相关教程合集
Java编译相关教程合集

本专题整合了Java编译相关教程,阅读专题下面的文章了解更多详细内容。

16

2026.01.21

C++多线程相关合集
C++多线程相关合集

本专题整合了C++多线程相关教程,阅读专题下面的的文章了解更多详细内容。

9

2026.01.21

无人机驾驶证报考 uom民用无人机综合管理平台官网
无人机驾驶证报考 uom民用无人机综合管理平台官网

无人机驾驶证(CAAC执照)报考需年满16周岁,初中以上学历,身体健康(矫正视力1.0以上,无严重疾病),且无犯罪记录。个人需通过民航局授权的训练机构报名,经理论(法规、原理)、模拟飞行、实操(GPS/姿态模式)及地面站训练后考试合格,通常15-25天拿证。

49

2026.01.21

热门下载

更多
网站特效
/
网站源码
/
网站素材
/
前端模板

精品课程

更多
相关推荐
/
热门推荐
/
最新课程
关于我们 免责申明 举报中心 意见反馈 讲师合作 广告合作 最新更新
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号 技术交流群
PHP中文网订阅号
每天精选资源文章推送

Copyright 2014-2026 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号