- 浏览: 610423 次
- 性别:
- 来自: 北京
文章分类
最新评论
-
kangh:
转载的也拿出来 都不试一下 完全错误
Nginx+ffmpeg的HLS开源服务器搭建配置及开发详解 -
wangtxlz:
#cd builders/cmake#cmake .系统提示命 ...
crtmpserver流媒体服务器的介绍与搭建 -
hnraysir:
支持支持支持
手机Android音视频采集与直播推送,实现单兵、移动监控类应用 -
wuent:
把web服务器和php框架绑定到一起?真不建议这样。。。
Swoole(PHP高级Web开发框架) -
wuent:
有更详细的性能比较吗?php,python,java
PHP中的(伪)多线程与多进程
require require_once include等都是php里面常规的文件调用函数,具体的区别和用法通常都是.
require_once filename;
filename要求引入的文件的相对路径.
而discuz x在文件调用方面引入了另外的filename获取方法.这个是本文主要讨论的内容.
如:根目录下portal.php中有这么一句.
1. require_once libfile('portal/'.$_GET['mod'], 'module');
在/source/function/function_core.php中找到函数原型:
function libfile($libname, $folder = '') {
$libpath = DISCUZ_ROOT.'/source/'.$folder;
if(strstr($libname, '/')) {
list($pre, $name) = explode('/', $libname);
return realpath("{$libpath}/{$pre}/{$pre}_{$name}.php");
} else {
return realpath("{$libpath}/{$libname}.php");
}
}
$libpath = DISCUZ_ROOT.'/source/'.$folder;
if(strstr($libname, '/')) {
list($pre, $name) = explode('/', $libname);
return realpath("{$libpath}/{$pre}/{$pre}_{$name}.php");
} else {
return realpath("{$libpath}/{$libname}.php");
}
}
包含2个参数:$libname 和 $folder
该函数读取source目录下的$folder子目录作为基础部分.
另外当$libname中包含/的时候,把$libname分为前后两部分.前面部分为子目录.
规则为:/source/$folder/$libname_pre/$libname_pre_$libname_end.php
不包含/的调用规则为: /source/$folder/$libname.php
require_once libfile('portal/'.$_GET['mod'], 'module');
调用的实际为:
require_once /source/module/portal/portal_$_get['mod'].php
($get[mod]是浏览器环境的提供的)
2. include_once template('diy:portal/index');
调用位置: \source\module\portal\portal_index.php
函数位置:/source/function/function_core.php
函数原型:
function template($file, $templateid = 0, $tpldir = '', $gettplfile = 0) {
global $_G;
if(strexists($file, ':')) {
list($templateid, $file, $clonefile) = explode(':', $file);
//用分号来分开参数的file,对于topic模板来说
//$templateid = DIY 等
//$file = portal/portal_topic_content
//$clonefile 为 topicid
$oldfile = $file;
///如果$clonefile不为空,那么$file加上$clonefile编号
$file = empty($clonefile) ? $file : $file.'_'.$clonefile;
///DIY类型的模板
if($templateid == 'diy') { ///看摸板是否存在
if(file_exists(DISCUZ_ROOT.'./data/diy/'.$file.'.htm')) {
$tpldir = 'data/diy';
!$gettplfile && $_G['style']['tplsavemod'] = 1;
} elseif(file_exists(DISCUZ_ROOT.'./data/diy/'.$oldfile.'.htm')) {
///摸板不存在,如果 默认摸板存在
$file = $oldfile;
$tpldir = 'data/diy';
!$gettplfile && $_G['style']['tplsavemod'] = 0;
} else {
$file = $oldfile;
}
///摸板是否刷新的模式
$tplrefresh = $_G['config']['output']['tplrefresh'];
///如果符合摸板刷新的机制,那么来更新摸板
if(($tplrefresh ==1 || ($tplrefresh > 1 && !($_G['timestamp'] % $tplrefresh))) && @filemtime(DISCUZ_ROOT.'./data/diy/'.$file.'.htm') &&
@filemtime(DISCUZ_ROOT.'./data/diy/'.$file.'.htm') < @filemtime(DISCUZ_ROOT.TPLDIR.'/'.$oldfile.'.htm')) {
updatediytemplate($file);
}
} else { ////非DIY类型模板放置
$tpldir = './source/plugin/'.$templateid.'/template';
}
}
if (!$gettplfile && empty($_G['style']['tplfile'])) $_G['style']['tplfile'] = empty($clonefile) ? $file : $oldfile.':'.$clonefile;
$file .= !empty($_G['inajax']) && ($file == 'common/header' || $file == 'common/footer') ? '_ajax' : '';
$tpldir = $tpldir ? $tpldir : (defined('TPLDIR') ? TPLDIR : '');
$templateid = $templateid ? $templateid : (defined('TEMPLATEID') ? TEMPLATEID : '');
$tplfile = ($tpldir ? $tpldir.'/' : './template/').$file.'.htm';
$filebak = $file;
$file == 'common/header' && defined('CURMODULE') && CURMODULE && $file = 'common/header_'.CURMODULE;
$cachefile = './data/template/'.(defined('STYLEID') ? STYLEID.'_' : '_').$templateid.'_'.str_replace('/', '_', $file).'.tpl.php';
////如果tplfile的文件不存在的时候,去/template/default/对应目录里面获取
if($templateid != 1 && !file_exists(DISCUZ_ROOT.$tplfile)) {
$tplfile = './template/default/'.$filebak.'.htm';
}
if($gettplfile) {
return $tplfile;
}
////根据摸板文件及缓存返回读取的文件
checktplrefresh($tplfile, $tplfile, @filemtime($cachefile), $templateid, $cachefile, $tpldir, $file);
return $cachefile;
}
global $_G;
if(strexists($file, ':')) {
list($templateid, $file, $clonefile) = explode(':', $file);
//用分号来分开参数的file,对于topic模板来说
//$templateid = DIY 等
//$file = portal/portal_topic_content
//$clonefile 为 topicid
$oldfile = $file;
///如果$clonefile不为空,那么$file加上$clonefile编号
$file = empty($clonefile) ? $file : $file.'_'.$clonefile;
///DIY类型的模板
if($templateid == 'diy') { ///看摸板是否存在
if(file_exists(DISCUZ_ROOT.'./data/diy/'.$file.'.htm')) {
$tpldir = 'data/diy';
!$gettplfile && $_G['style']['tplsavemod'] = 1;
} elseif(file_exists(DISCUZ_ROOT.'./data/diy/'.$oldfile.'.htm')) {
///摸板不存在,如果 默认摸板存在
$file = $oldfile;
$tpldir = 'data/diy';
!$gettplfile && $_G['style']['tplsavemod'] = 0;
} else {
$file = $oldfile;
}
///摸板是否刷新的模式
$tplrefresh = $_G['config']['output']['tplrefresh'];
///如果符合摸板刷新的机制,那么来更新摸板
if(($tplrefresh ==1 || ($tplrefresh > 1 && !($_G['timestamp'] % $tplrefresh))) && @filemtime(DISCUZ_ROOT.'./data/diy/'.$file.'.htm') &&
@filemtime(DISCUZ_ROOT.'./data/diy/'.$file.'.htm') < @filemtime(DISCUZ_ROOT.TPLDIR.'/'.$oldfile.'.htm')) {
updatediytemplate($file);
}
} else { ////非DIY类型模板放置
$tpldir = './source/plugin/'.$templateid.'/template';
}
}
if (!$gettplfile && empty($_G['style']['tplfile'])) $_G['style']['tplfile'] = empty($clonefile) ? $file : $oldfile.':'.$clonefile;
$file .= !empty($_G['inajax']) && ($file == 'common/header' || $file == 'common/footer') ? '_ajax' : '';
$tpldir = $tpldir ? $tpldir : (defined('TPLDIR') ? TPLDIR : '');
$templateid = $templateid ? $templateid : (defined('TEMPLATEID') ? TEMPLATEID : '');
$tplfile = ($tpldir ? $tpldir.'/' : './template/').$file.'.htm';
$filebak = $file;
$file == 'common/header' && defined('CURMODULE') && CURMODULE && $file = 'common/header_'.CURMODULE;
$cachefile = './data/template/'.(defined('STYLEID') ? STYLEID.'_' : '_').$templateid.'_'.str_replace('/', '_', $file).'.tpl.php';
////如果tplfile的文件不存在的时候,去/template/default/对应目录里面获取
if($templateid != 1 && !file_exists(DISCUZ_ROOT.$tplfile)) {
$tplfile = './template/default/'.$filebak.'.htm';
}
if($gettplfile) {
return $tplfile;
}
////根据摸板文件及缓存返回读取的文件
checktplrefresh($tplfile, $tplfile, @filemtime($cachefile), $templateid, $cachefile, $tpldir, $file);
return $cachefile;
}
发表评论
-
nginx、php-fpm默认配置与性能–TCP socket还是unix domain socket
2015-04-02 11:14 1474前几天看到一篇博客,提到php所在服务器在大并发情况下,频 ... -
使用socket方式连接Nginx优化php-fpm性能
2015-04-01 13:49 0Nginx连接fastcgi的方式有 ... -
PHP中include和require的区别详解
2015-04-01 08:32 01、概要 require()语句的性能与includ ... -
PHP 中cookie 和 session 的分析
2015-03-31 12:33 0HP 中cookie 和session 的分析 ... -
php 经典的算法题你懂的
2015-03-31 12:31 0有5个人偷了一堆苹果,准备在第二天分赃。晚上,有一人遛出来, ... -
PHP最常用的2种设计模式工厂模式和单例模式介绍
2015-03-31 12:26 0简单来说,PHP单例模式就是一个功能用一个类来实现,并且在整 ... -
PHP 数据类型
2015-03-31 12:23 0PHP 数据类型 PHP 支持八种原始类型(type)。 ... -
PHP mcrypt启用、加密以及解密过程详解
2015-03-30 11:32 1463Mcrypt扩展库可以实现加密解密功能,就是既能将明文加密, ... -
PHP扩展实现类扩展
2015-03-27 14:08 580在第一篇文章中,我们所开发的扩展是单个函数,本篇文章看一下 ... -
PHP高级工程师的面试题
2015-03-06 10:35 01. 基本知识点 HTTP协议中几个状态码的含义:1x ... -
PHP面试中常见的面试试题与算法例子
2015-03-05 14:14 0下面是四道比较常见的题目,主要考察的是对字符串函数以及文件操 ... -
PHP实现四种常用的排序算法
2015-03-05 14:09 0插入排序(Insertion Sort),选择排序(Sele ... -
用swagger-php/ui做API测试
2015-02-13 09:46 3652功能: 1 swagger-php根据自定义的规则生成API ... -
app后端设计(0)--总目录
2015-01-23 18:03 0做了3年app相关的系统架构,api设计,先后在3个创业公司中 ... -
PHP中eAccelerator、memcached、xcache、APC 4个加速、缓存扩展的区别
2015-01-23 10:26 919这篇文章主要介绍了PHP ... -
PHP内核探索:zend_parse_parameters函数
2015-01-16 14:14 969最简单的获取函数调用者传递过来的参数便是使用zend_pars ... -
实战:用C写php扩展(二)
2015-01-16 11:05 1001一、前言 在我的上一篇文章“实战:用C写php扩展(一)”里介 ... -
实战:用C写php扩展(一)
2015-01-16 11:04 10201、 前言 首先,确保你的机器安装了apache和php。假 ... -
JavaScript or PHP 来检测移动设备
2014-09-22 10:04 635iPhone & iPod Detection T ... -
YII Framework学习教程-YII的Modules(模块化)
2014-08-27 11:04 757一个相对来说大的项目。如果按照yii生成的 ...
相关推荐
X2.5中,添加自定义数据调用模块可以实现对论坛内特定数据的动态调用与展示,如热点新闻、最新帖子等。这对于提升用户体验、增强论坛的互动性和信息丰富度有着重要作用。此外,自定义模块还可以根据需求灵活配置...
X2.5靓号插件系统源码"是一个专为Discuz!X2.5论坛平台设计的插件,用于实现论坛用户选择和管理“靓号”(特殊、吉祥或者有纪念意义的用户名)的功能。这个插件系统的核心是用PHP编程语言编写的,PHP是一种广泛应用于...
Discuz X1.5是康盛创想Comsenz推出的一个以社区为基础的专业建站平台,让论坛BBS、个人空间SNS、门户Portal、群组Group、应用开放平台Open Platform充分融合于一体,帮助网站实现一站式服务。 Discuz! X1.5.1 ...
- `function`:函数文件,进一步分为多个子目录: - `cache`:缓存功能拆分目录。 - `include`:被包含的文件,包括: - `cron`:计划任务。 - `misc`:杂项。 - `modcp`:前台论坛管理。 - `portalcp`:前台...
X2.5 远程图片幻灯片调用模块详解及源码解析》 Discuz! X2.5 是一款广泛使用的社区论坛系统,它提供了丰富的功能和高度的可定制性,深受广大站长喜爱。在这个系统中,远程图片幻灯片调用模块是一个重要的组件,它...
Discuz X1.5是康盛创想Comsenz推出的一个以社区为基础的专业建站平台,让论坛BBS、个人空间SNS、门户Portal、群组Group、应用开放平台Open Platform充分融合于一体,帮助网站实现一站式服务。 Discuz! X1.5.1 ...
提供了丰富的API接口,如钩子函数、数据操作类等,插件开发者可以利用这些接口实现与系统的深度集成。 3. 安装与卸载:插件需要提供安装脚本(install.php)和卸载脚本(uninstall.php),用于在后台进行安装和卸载...
【压缩包子文件的文件名称列表】: "discuz287"可能是指该模板是针对Discuz! 的第287个版本,或者是该模板的一个内部版本编号。这通常意味着模板可能已经过多次更新和优化,以适应Discuz! 不断升级的系统需求和新的...
Discuz X1.5是康盛创想Comsenz推出的一个以社区为基础的专业建站平台,让论坛BBS、个人空间SNS、门户Portal、群组Group、应用开放平台Open Platform充分融合于一体,帮助网站实现一站式服务。 Discuz! X1.5.1 ...
Discuz X1.5是康盛创想Comsenz推出的一个以社区为基础的专业建站平台,让论坛BBS、个人空间SNS、门户Portal、群组Group、应用开放平台Open Platform充分融合于一体,帮助网站实现一站式服务。 Discuz! X1.5.1 ...
在这个文件中,首先引入核心文件,然后创建并初始化对象,接下来通过调用includetemplate函数引入模板文件。而这里的host.htm,就是我们要定义的单页模板文件,它包含了HTML结构,使用特定的标签来引入内容。{...
理解PHP的基本语法和函数调用对于操作和自定义这个模板至关重要。 【压缩包子文件的文件名称列表】:虽然具体文件列表未给出,但通常一个Discuz! 模板包会包含以下几类文件: 1. **主题模板文件(templates)**:...
的一个特定版本(可能是X2.1.1)的模板文件集。这个版本的模板可能包含了与该版本Discuz! 兼容的所有界面文件,包括但不限于以下部分: 1. 主题文件(Themes):这里通常包含多个预设的主题,每个主题都有自己的...
API接口目录,用于提供外部调用的接口服务,方便与其他系统集成或开发移动应用。 #### 三、关键文件介绍 - **index.php**:网站的主页入口文件。 - **member.php**:用户管理页面,包括注册、登录、个人信息编辑等...
在【三瑞】微信商城 V1.5 for discuz3.X 中,此文件负责微信商城插件的功能实现和调用,确保插件与Discuz! 系统的无缝对接。 五、安装说明与伪静态规则: `安装说明.txt` 文件提供了详细的安装步骤和注意事项,帮助...
8. **template**:模板源文件目录,用于存放前端页面的模板文件。 9. **uc_client**:UCenter客户端接口目录,用于与UCenter服务器端进行通信。 10. **uc_server**:UCenter服务器端目录,用于管理和提供用户中心...
7. PHP函数与代码的重用性:定义和调用函数、参数、函数内的变量范围、函数的作用域和可用性、用变量存储函数的名称、递归函数、使用和包含文件等。 8. 面向对象的程序设计:类和对象的关键概念、构造方法和析构...
这个函数会调用短信服务商的API,发送验证码到用户的手机。 4. **验证验证码**:在用户提交注册信息时,系统需要验证输入的验证码是否正确。在注册验证的函数(如`checkregip`)中,加入验证码的校验逻辑。 5. **...
FIX 修正搜索接口错误调用了implode()函数问题 FIX 好友申请附言问题 FIX 前台管理中已经审核通过文章,后台还是提示审核的问题 FIX QQ互联暴露匿名帖用户信息的问题 FIX 专题模块可使用...
本文将深入解析Discuz模板目录的组成和各个文件的作用,帮助开发者更好地理解和使用模板。 首先,`/template/default/common`是公共模板目录,包含了全局加载的模板文件。例如,`block_forumtree.htm`用于构建论坛...