<?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】的更多相关文章

  1. CI框架源代码阅读笔记3 全局函数Common.php

    从本篇開始.将深入CI框架的内部.一步步去探索这个框架的实现.结构和设计. Common.php文件定义了一系列的全局函数(一般来说.全局函数具有最高的载入优先权.因此大多数的框架中BootStrap ...

  2. CI框架源代码阅读笔记2 一切的入口 index.php

    上一节(CI框架源代码阅读笔记1 - 环境准备.基本术语和框架流程)中,我们提到了CI框架的基本流程.这里再次贴出流程图.以备參考: 作为CI框架的入口文件.源代码阅读,自然由此開始. 在源代码阅读的 ...

  3. Mongodb源代码阅读笔记:Journal机制

    Mongodb源代码阅读笔记:Journal机制 Mongodb源代码阅读笔记:Journal机制 涉及的文件 一些说明 PREPLOGBUFFER WRITETOJOURNAL WRITETODAT ...

  4. CI框架源代码阅读笔记5 基准測试 BenchMark.php

    上一篇博客(CI框架源代码阅读笔记4 引导文件CodeIgniter.php)中.我们已经看到:CI中核心流程的核心功能都是由不同的组件来完毕的.这些组件类似于一个一个单独的模块,不同的模块完毕不同的 ...

  5. Spark源代码阅读笔记之DiskStore

    Spark源代码阅读笔记之DiskStore BlockManager底层通过BlockStore来对数据进行实际的存储.BlockStore是一个抽象类,有三种实现:DiskStore(磁盘级别的持 ...

  6. Java Jdk1.8 HashMap源代码阅读笔记二

    三.源代码阅读 3.元素包括containsKey(Object key) /** * Returns <tt>true</tt> if this map contains a ...

  7. ruby2.2.2 源代码阅读笔记

    这是win32下的结构 从ruby_setup开始阅读 Ruby对象内存结构 RVALUE是一个union,内含ruby所有结构体(RBasic RObject RClass RFloat RStri ...

  8. CI框架源代码阅读笔记7 配置管理组件 Config.php

    原文见这里:http://www.cnblogs.com/ohmygirl/p/CIRead-7.html 一个灵活可控的应用程序中,必定会存在大量的可控參数(我们称为配置),比如在CI的主配置文件里 ...

  9. 【MySQL】filesort.cc 源代码阅读笔记

    最近阅读了部分MySQL排序的代码,把心得记录一下. 参考代码 MySQL: 文件: filesort.cc 函数: filesort() 排序过程伪代码 function filesort(tabl ...

随机推荐

  1. 深入分析Java的序列化与反序列化

    序列化是一种对象持久化的手段.普遍应用在网络传输.RMI等场景中.本文通过分析ArrayList的序列化来介绍Java序列化的相关内容.主要涉及到以下几个问题: 怎么实现Java的序列化 为什么实现了 ...

  2. Android四大组件之ContentProvider(二)读取设备上的图片、音频和视频

    Android系统提供了MediaScanner,MediaProvider,MediaStore等接口,通过Content Provider的方式提供给用户.当设备开机或者有SD卡插拔等事件发生时, ...

  3. MongoDB Java 连接配置

    [前言] 由于处于线程安全等考虑,MongoDBJava从3.0开始已经打算废弃DB开头的类的使用,所以整体调用上有了较大的区别,特以此文志之 [正文] 环境配置 在Java程序中如果要使用Mongo ...

  4. sublime text2 快捷键

    主要快捷键列表: Ctrl+L 选择整行(按住-继续选择下行)Ctrl+KK 从光标处删除至行尾Ctrl+Shift+K 删除整行Ctrl+Shift+D 复制光标所在整行,插入在该行之前Ctrl+J ...

  5. Java中的一些常见错误

    1.空指针错误 在java数组的使用中,有时候需要对字符串数组中的元素进行对比.那么当元素不为null时,程序会正常运行:然而,一旦对比的元素为null,那么程序就会出现空指针错误. 解决方法:加入保 ...

  6. Eclipse如何生成带有自定tag的Java Doc

    1. 选择要生成Java Doc的工程,单击鼠标右键,在弹出菜单中选择[Export],会弹出以下对话框: 2. 选择[Java]--->[Javadoc],点击[Next]按钮,弹出以下对话框 ...

  7. [RxJS] Combination operators: concat, startWith

    Some Observables may complete, and we may want to append another Observable to the one which just co ...

  8. [JavaScript] Array.prototype.reduce in JavaScript by example

    Let's take a closer look at using Javascript's built in Array reduce function. Reduce is deceptively ...

  9. cs模式与bs模式

     关于CS(Client-Server)模式和BS(Browser-Server)模式的水很深,盆地自己也认为对此了解不够透彻,但作为手机客户端设计,如果不对CS.BS做一定程度的了解,是很容易出现一 ...

  10. 详解 Spring 3.0 基于 Annotation 的依赖注入实现--转载

    使用 @Repository.@Service.@Controller 和 @Component 将类标识为 Bean Spring 自 2.0 版本开始,陆续引入了一些注解用于简化 Spring 的 ...