您现在的位置是:首页 > cms教程 > Discuz教程Discuz教程
discuz! x2.5代码执行流程介绍
含玉2025-07-01Discuz教程已有人查阅
导读以dz根目录门户请求入口文件portal.php为例,浅析其执行流程。我们以portal.php为例,用户请求 http://xxx.xxx.xx/portal.php
以dz根目录门户请求入口文件portal.php为例,浅析其执行流程。我们以portal.php为例,用户请求http://xxx.xxx.xx/portal.php
接收到用户请求,脚本执行以下内容:
针对门户包含的两个函数文件,其他入口根据情况包含文件有所变化
在这个文件中,include_oncetemplate('diy:portal/index');载入模板,此句执行后,返回给用户浏览器可观看的页面
template模板中所需要的数据,就应该在protal_xxx.php文件中提前准备好
template具体怎么解析模板,后面如果有时间,我会继续分析。
接收到用户请求,脚本执行以下内容:
//定义当前应用ID
define('APPTYPEID', 4);
//定义当前应用脚本名称
define('CURSCRIPT', 'portal');
//引入dz核心库文件-每个入口文件都会载入此类
require './source/class/class_core.php';
在引入dz核心库文件的时候,做了以下操作(以下代码位于:source/class/class_core.php)
error_reporting(E_ALL);
define('IN_DISCUZ', true);
//定义dz根目录
define('DISCUZ_ROOT', substr(dirname(__FILE__), 0, -12));
//define('DISCUZ_CORE_DEBUG', false);
//调式模式是否开启
define('DISCUZ_CORE_DEBUG', true);
//异常处理
set_exception_handler(array('core', 'handleException'));
if(DISCUZ_CORE_DEBUG) {
set_error_handler(array('core', 'handleError'));
register_shutdown_function(array('core', 'handleShutdown'));
}
//类自动加载设置
if(function_exists('spl_autoload_register')) {
spl_autoload_register(array('core', 'autoload'));
} else {
function __autoload($class) {
return core::autoload($class);
}
}
接下来的一句:
C::creatapp();
创建dz的类discuz_application的一个实例,此处代码位于文件:source/class/discuz/discuz_application.php中
public static function creatapp() {
if(!is_object(self::$_app)) {
self::$_app = discuz_application::instance();
}
return self::$_app;
}
discuz_application::instance()到底做了什么?
static function &instance() {
static $object;
if(empty($object)) {
$object = new self();
}
return $object;
}
public function __construct() {
//运行环境初始化,在x2.5版本中很重要的$_G就在此处声明定义
$this->_init_env();
//应用配置初始化 载入source/config/config_global.php中的配置项,定义cookie前缀,静态文件目录等
$this->_init_config();
//输入初始化, 在这里将$_GET和$_POST合并,统一使用$_GET
$this->_init_input();
//输出初始化 header头 跨域攻击xss检查等
$this->_init_output();
}
具体以上四个初始化方法都做了哪些工作,不再赘述,详情可参看:source/class/discuz/discuz_application.php文件以上代码执行完毕,回到portal.php,
$cachelist = array('userapp', 'portalcategory', 'diytemplatenameportal');
$discuz->cachelist = $cachelist;
//应用初始化
$discuz->init();
此句代码我们再次进入类discuz_application中
public function init() {
if(!$this->initated) {
$this->_init_db();
$this->_init_setting();
$this->_init_user();
$this->_init_session();
$this->_init_mobile();
$this->_init_cron();
$this->_init_misc();
}
$this->initated = true;
}
上述代码对数据库连接,css样式缓存,用户信息,session等做了初始化,具体内容可查看源代码针对门户包含的两个函数文件,其他入口根据情况包含文件有所变化
require DISCUZ_ROOT.'./source/function/function_home.php';
require DISCUZ_ROOT.'./source/function/function_portal.php';
当前操作,定义了门户中可进行的请求内容
if(empty($_GET['mod']) || !in_array($_GET['mod'], array('list', 'view', 'comment', 'portalcp', 'topic', 'attachment', 'rss', 'block'))) $_GET['mod'] = 'index';
define('CURMODULE', $_GET['mod']);
//运行插件
runhooks();
//此句载入source/module/portal目录下相关文件,假设$_GET['mod']是 index,则载入该目录的portal_index.php
require_once libfile('portal/'.$_GET['mod'], 'module');
接下来执行的代码就位于source/module/portal/protal_xxx.php中了,xxx==$_GET['mod'];在这个文件中,include_oncetemplate('diy:portal/index');载入模板,此句执行后,返回给用户浏览器可观看的页面
template模板中所需要的数据,就应该在protal_xxx.php文件中提前准备好
template具体怎么解析模板,后面如果有时间,我会继续分析。
本文标签:
很赞哦! ()
相关教程
图文教程
Windows7&IIS7.5部署Discuz方法
组长说在内网部署一个论坛,这可难不倒我,装个Discuz嘛,部署环境就一台普通的PC,四核i3,Windows7。这就开搞了。
创建论坛Discuz的方法
1.下载discuz!2. 配置第一个虚拟主机3. 配置mysql,给Discuz!增加一个账户4. 安装Discuz!5. 为某个虚拟主机配置用户认证6. 配置域名跳转
Discuz添加自定义模块
功能描述:每个会员都可以写下自己的心情,游客不可以留言。按时间倒序显示较新的留言。我们的宗旨是尽量不要去修改或过多依懒默认模板或程序,否则,Discuz!升级时会给你带来无尽的痛苦...
jsp整合discuz的方法
最近在实验室做项目用到的一个东西,拿来介绍一下。需求:现有行业应用网站一个,使用JSP开发,假设网址为app.com;及Discuz论坛一个,使用PHP开发,假设网址为bbs.com。
相关源码
-
(自适应)APP应用软件落地页单页推广页网站模板下载基于PbootCMS内核开发的响应式单页模板,为企业产品展示、服务推广等应用场景设计。通过简洁直观的视觉布局与高效的技术架构,帮助用户快速构建专业级落地页面,实现移动端与PC端数据实时同步展示。查看源码 -
帝国CMS7.2互联网自媒体门户整站带数据源码免费下载分享一款高仿极客网门户模板,帝国cms7.2版本,非常适合互联网、自媒体、文章门户网站使用。测法发现备份数据恢复报错,找了几个版本的都是一样的,有能力的自行修复查看源码 -
(自适应响应式)投资理财金融机构财务管理pbootcms模板本模板基于PbootCMS系统开发,为投资理财、金融机构等行业设计。采用专业严谨的布局风格,突出金融服务行业特色,适合展示各类理财产品、投资服务和金融资讯。查看源码 -
帝国cms7.5文库范文/付费下载/复制付费/带支付源码免费下载本模板为文库、文档分享、知识付费类平台设计,提供完整的内容变现解决方案。系统支持多种内容展示与付费模式,满足不同场景下的内容价值转化需求,帮助平台实现内容资源的有效管理和商业化运营。查看源码 -
蓝色工业机械五金设备pbootcms模板源码下载(PC+WAP)为机械制造与五金设备企业设计的响应式网站模板,基于PbootCMS内核开发。采用蓝色工业风格强化行业属性,宽屏布局突出设备细节展示,支持PC与WAP端自适应查看源码 -
(自适应)帝国CMS7.5模板淘宝客导购博客文章源码本模板基于帝国CMS7.5内核深度开发,为电商导购类网站设计。采用响应式布局技术,确保在手机、平板及电脑端均能获得优质浏览体验。模板内置商品推荐模块与优惠信息展示区,可快速搭建专业导购平台。查看源码
| 分享笔记 (共有 篇笔记) |