Discuz!源代码阅读笔记之common.inc.php文件【1】
<?php /*
[Discuz!] (C)2001-2007 Comsenz Inc.
This is NOT a freeware, use is subject to license terms $Id: common.inc.php 10344 2007-08-27 02:36:30Z monkey $
*/
/*
说明:
Discuz!核心文件阅读;
*/
error_reporting(0); //对脚本的错误回显作了屏蔽,参数“0”的意思量关闭所有级别的错误报告。
set_magic_quotes_runtime(0);//传入的参数“0”来关闭php的魔法引用,[这么做是禁止php解释对页面传递到服务器的参数进行处理,交由下面的Discuz!来过滤]
$mtime = explode(' ', microtime());//使用一个字符串分割另一个字符串
$discuz_starttime = $mtime[1] + $mtime[0]; /*********************************************************************/
/*
这组全部是Discuz!的常量的定义;
*/ define('SYS_DEBUG', FALSE); //脚本量否运行在系统除错状态
define('IN_DISCUZ', TRUE); //定义了Discuz程序代码的运行范围,在此定义为true后就可以在其他的脚本程序中使用了;
/*
if(!defind('IN_DISCUZ')){
exit('Access Denied');
}
//来判断是否处于Discuz的运行范围内,如果不是,则页面提示“Access Denied”并结束,这可以在一定程度上避免了脚本包含调用错误引起的被入侵;
*/ /*
DISCUZ_ROOT 定义了Discuz!脚本程序的相对目录的根目录的路径;例如我的这个discuz!的这个值就是;C:\AppServ\www\
*/
define('DISCUZ_ROOT', substr(dirname(__FILE__), 0, -7)); /*
MAGIC_QUOTES_GPC被定义成了get_magic_quotes_gpc()的返回值,也就是以后用来获取运行运行环境中对GET,POST,COOKIES的变量是否进行了PHP的魔法引用;
*/
define('MAGIC_QUOTES_GPC', get_magic_quotes_gpc()); !defined('CURSCRIPT') && define('CURSCRIPT', '');
/********************************************************************/ /********************************************************************/
//这段代码的是保持与版本低于4.1.0的php运行环境的预定义变量名的兼容性;
if(PHP_VERSION < '4.1.0') {
$_GET = &$HTTP_GET_VARS;
$_POST = &$HTTP_POST_VARS;
$_COOKIE = &$HTTP_COOKIE_VARS;
$_SERVER = &$HTTP_SERVER_VARS;
$_ENV = &$HTTP_ENV_VARS;
$_FILES = &$HTTP_POST_FILES;
}
/********************************************************************/ /********************************************************************/
//这段代码中是用来检查是否存在“$REQUEST['GLOBALS']”或是“$_FILES['GLOBALS']"如果不存在,程序将会退出并提示Request tainting attempted.【说明$RESQUEST全局数组中包含了php的使用的$_GET,$_POST,$COOKIE中的全部的内容】;
if (isset($_REQUEST['GLOBALS']) OR isset($_FILES['GLOBALS'])) {
exit('Request tainting attempted.');
}
/********************************************************************/ /********************************************************************/
//引用Discuz!的全局函数文件”global,func.php些文件内的内容我们可以看到这个文件名称的定义是文件名.func.php根据discuz!的文件命名说明,这个文件应该是discuz!自定义的函数库,或叫叫做是自定义的全局函数库;
require_once DISCUZ_ROOT.'./include/global.func.php';
/********************************************************************/ /********************************************************************
getrobot()函数如下:
function getrobot() {
if(!defined('IS_ROBOT')) {
$kw_spiders = 'Bot|Crawl|Spider|slurp|sohu-search|lycos|robozilla'; //正则表达式,搜索引擎标识;
$kw_browsers = 'MSIE|Netscape|Opera|Konqueror|Mozilla'; //正则表达式,浏览器的标识符;
if(preg_match("/($kw_browsers)/", $_SERVER['HTTP_USER_AGENT'])) { //判断是哪一种浏览器来访问php程序
define('IS_ROBOT', FALSE);
} elseif(preg_match("/($kw_spiders)/", $_SERVER['HTTP_USER_AGENT'])) {
define('IS_ROBOT', TRUE);
} else {
define('IS_ROBOT', FALSE);
}
}
return IS_ROBOT;
}
由上面的函数的整体来看,getrobot()此函数是用来判断请求当前请求是否是客户端还是搜索引擎的机器人程序;
*/
define('ISROBOT', getrobot());
/********************************************************************/ /********************************************************************/
//说明:判断是NOROBOT这个常量是不是已经定义了,如果他定义了并且值为true则header('HTTP/1.1 403 Forbidden');,出现这种情况可能是这里的资源不想被访问到;
if(defined('NOROBOT') && ISROBOT) {
exit(header("HTTP/1.1 403 Forbidden")); //403错误是:资源不可用。服务器理解客户的请求,但拒绝处理它。
}
/********************************************************************/
/********************************************************************
daddslashes()函数: function daddslashes($string, $force = 0) {
!defined('MAGIC_QUOTES_GPC') && define('MAGIC_QUOTES_GPC', get_magic_quotes_gpc());
if(!MAGIC_QUOTES_GPC || $force) {
if(is_array($string)) {
foreach($string as $key => $val) {
$string[$key] = daddslashes($val, $force);
}
} else {
$string = addslashes($string);
}
}
return $string;
}
看了这个函数可以看到,是一个过滤函数;
结合下面的代码可以知道,其作用是把”_COOKIE,_POST,_GET”三个数组变量中的每个不以下划线“_”开头的元素,使用这个函数来进行过虑; */
foreach(array('_COOKIE', '_POST', '_GET') as $_request) {
foreach($$_request as $_key => $_value) {
$_key{0} != '_' && $$_key = daddslashes($_value);
}
}
/*
小提示:
关于上foreach($$_request as...当中的这两个$$符号的意思; 例子:
可变变量
$first ="hello";
$hello ="world";
echo $first." ".$$first;
结果是 hello world $$first就是$hello,因为$first的值是hello
*/ /*
接着判断"MAGIC_QUOTES_GPC"当中的值是否存在客户端提交过来的文件数组,如果条件成立的话,也使用这个函数进行过虑;
*/
if (!MAGIC_QUOTES_GPC && $_FILES) {
$_FILES = daddslashes($_FILES);
}
/********************************************************************/ /********************************************************************/
/*
说明这段代码就是用来初始化本文件中的要使用的到的配制信息;
参数说明:
$charset //字符编码;
$dbcharset //数据库编码;
$forumfounders //论坛创始人 UID
$metakeywords //页面当中的Meta信息;
$extrahead //页面中付加在<head>当中的信息;
$seodescription //页面对搜索引擎的优化信息;
*/
$charset = $dbcharset = $forumfounders = $metakeywords = $extrahead = $seodescription = '';
/*
参数说明:
$plugins //插件信息完整数组信息;
$hooks //插件信息钩子数组信息;
$jsmenu //用于js代码的菜单内容信息数组;
$forum //
$thread //
$language //语言包数组;
$actioncode //动态代码数组;
$modactioncode //操作动作代码数组;
$lang //语言包数组;
*/
$plugins = $hooks = $admincp = $jsmenu = $forum = $thread = $language = $actioncode = $modactioncode = $lang = array(); require_once DISCUZ_ROOT.'./config.inc.php'; //引用配制文件;
/*
参数说明:
$_DCOOKIE //Discuz!自定义存放Cookie信息的数组;
$_DSESSION //Discuz!自定义存放Session信息的数组;
$_DCACHE //Discuz!自定义的存放系统缓存信息的数组;
$_DPLUGIN //Discuz!算定义存放插件的数组;
$advilist //Discuz!自定义存放广告的数组;
*/
$_DCOOKIE = $_DSESSION = $_DCACHE = $_DPLUGIN = $advlist = array();
/********************************************************************/
Discuz!源代码阅读笔记之common.inc.php文件【1】的更多相关文章
- CI框架源代码阅读笔记3 全局函数Common.php
从本篇開始.将深入CI框架的内部.一步步去探索这个框架的实现.结构和设计. Common.php文件定义了一系列的全局函数(一般来说.全局函数具有最高的载入优先权.因此大多数的框架中BootStrap ...
- CI框架源代码阅读笔记2 一切的入口 index.php
上一节(CI框架源代码阅读笔记1 - 环境准备.基本术语和框架流程)中,我们提到了CI框架的基本流程.这里再次贴出流程图.以备參考: 作为CI框架的入口文件.源代码阅读,自然由此開始. 在源代码阅读的 ...
- Mongodb源代码阅读笔记:Journal机制
Mongodb源代码阅读笔记:Journal机制 Mongodb源代码阅读笔记:Journal机制 涉及的文件 一些说明 PREPLOGBUFFER WRITETOJOURNAL WRITETODAT ...
- CI框架源代码阅读笔记5 基准測试 BenchMark.php
上一篇博客(CI框架源代码阅读笔记4 引导文件CodeIgniter.php)中.我们已经看到:CI中核心流程的核心功能都是由不同的组件来完毕的.这些组件类似于一个一个单独的模块,不同的模块完毕不同的 ...
- Spark源代码阅读笔记之DiskStore
Spark源代码阅读笔记之DiskStore BlockManager底层通过BlockStore来对数据进行实际的存储.BlockStore是一个抽象类,有三种实现:DiskStore(磁盘级别的持 ...
- Java Jdk1.8 HashMap源代码阅读笔记二
三.源代码阅读 3.元素包括containsKey(Object key) /** * Returns <tt>true</tt> if this map contains a ...
- ruby2.2.2 源代码阅读笔记
这是win32下的结构 从ruby_setup开始阅读 Ruby对象内存结构 RVALUE是一个union,内含ruby所有结构体(RBasic RObject RClass RFloat RStri ...
- CI框架源代码阅读笔记7 配置管理组件 Config.php
原文见这里:http://www.cnblogs.com/ohmygirl/p/CIRead-7.html 一个灵活可控的应用程序中,必定会存在大量的可控參数(我们称为配置),比如在CI的主配置文件里 ...
- 【MySQL】filesort.cc 源代码阅读笔记
最近阅读了部分MySQL排序的代码,把心得记录一下. 参考代码 MySQL: 文件: filesort.cc 函数: filesort() 排序过程伪代码 function filesort(tabl ...
随机推荐
- Hadoop Hive概念学习系列之什么是Hive?(一)
参考 <Hadoop大数据分析与挖掘实战>的在线电子书阅读 http://yuedu.baidu.com/ebook/d128cf8e33687e21 ...
- FastDfs 说明、安装、配置
fastdfs是一个开源的,高性能的的分布式文件系统,他主要的功能包括:文件存储,同步和访问,设计基于高可用和负载均衡,fastfd非常适用于基于文件服务的站点,例如图片分享和视频分享网站 fastf ...
- hdoj 2094 产生冠军
产生冠军 Time Limit: 1000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others)Total Submis ...
- 窗口对象的方法 prompt() 用来输入数据
prompt() 窗口对象的方法,用来输入信息的 一.window.prompt('提示信息',默认值); 1.例: window.prompt('请输入文字','这是默认值'); var us ...
- android 01
安卓开源(就是免费),谷歌收购后推出,可以山寨(小米,三星都是安卓的山寨),ios不是开源(苹果应用要商用就要交钱).安卓3.0是平板,现在安卓至少是4.0以上,否则out了. 微软主要是系统和off ...
- 高级性能调试手段(oprofile+gprofile)+内核追踪手段:LTT
http://blog.csdn.net/wlsfling/article/details/5876134http://www.lenky.info/archives/2012/03/1371http ...
- Understanding JTS--reference
Part I-An introduction to transactions If you look at any introductory article or book on J2EE, you' ...
- Markdown写接口文档,自动添加TOC
上回说到,用Impress.js代替PPT来做项目展示.这回换Markdown来做接口文档好了.(不敢说代替Word,只能说个人感觉更为方便)当然,还要辅之以Git,来方便版本管理. Markdown ...
- Block之变量作用域
在使用block的过程中经常会调用不同类型.不同作用域的变量,如果对这些变量作用域的理解稍有偏差,就会出现问题.故此特意整理出block中会经常使用到的几种变量,如有补充,欢迎指出. 1. 局部变量 ...
- Bash函数使用
#!/bin/bash function Fun_Name() { #function here echo "this is a function" } Fun_Name