<?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. hdoj 1599 find the mincost route【floyd+最小环】

    find the mincost route Time Limit: 1000/2000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/O ...

  2. Individual Contest #1 and Private Training #1

    第一次的增补赛,也是第一场个人排位赛,讲道理打的和屎一样,手速题卡了好久还WA了好多发,难题又切不出来,这种情况是最尴尬的吧! Individual Contest #1: Ploblem D: 题意 ...

  3. Maven浅析-1

    Maven的配置 1.首先从http://maven.apache.org/download.cgi下载当前最新版本的maven. 如果不想自己安装maven的话,建议直接下binary zip文件, ...

  4. C++程序在debug模式下遇到Run-Time Check Failure #0 - The value of ESP was not properly saved across a function call问题。

    今天遇到一个Access Violation的crash,只看crash call stack没有找到更多的线索,于是在debug模式下又跑了一遍,遇到了如下的一个debug的错误提示框: 这个是什么 ...

  5. UVA - 10785 The Mad Numerologist

    题目链接 这个题又犯了省题不清的错误.导致不停 wa.唉. 题目意思是给你一个长度L,然后和一张表相应每一个大写字母的value值.你须要依照一定规则找出长度为L的序列. 注意  序列的value值要 ...

  6. Qt之遍历文件夹(经典详解)

    关于Qt操作文件夹.文件的知识用途较多,比如遍历下一层乃至所有子孙文件.文件夹,获取它们的一些信息(大小.类型.最后更改时间等).当然,也可以进行级联删除.     首先看简单的: 一.Qt遍历文件夹 ...

  7. QT QXmlStreamWriter用法小结

    一 API介绍 writeStartDocument():写文档头,作用类似于创建一个xml文档,并在文档开头部分写入版本信息和编码信息,一般为: <?xml version="1.0 ...

  8. Not enough free space on disks! linux

    Not enough free space on disks!100多G未分配空间也装不了Linux ------------------------------------------------- ...

  9. alloc、init你弄懂50%了吗?

    前言 这是一篇我记录对alloc.init分析思考的笔记.如果读者想看懂我的第二个思考,可能需要您至少了解内存的分段分页管理,如果您对其一点都不知道,可以先看这篇软文简单了解一下.另外很重要的一点是, ...

  10. IntelliJ Idea 常用快捷键列表(精简版)

    查找快捷键: Ctrl+N 查找类 Ctrl+shift+N 查找文件 Ctrl+B 找变量来源 Ctrl+E 最近打开的文件 Ctrl+Alt+B 选中方法的实现 Ctrl+F7  选中方法(属性. ...