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 ...
随机推荐
- 从物理执行的角度透视spark Job
本博文主要内容: 1.再次思考pipeline 2.窄依赖物理执行内幕 3.宽依赖物理执行内幕 4.Job提交流程 一:再次思考pipeline 即使采用pipeline的方式,函数f对依赖的RDD中 ...
- Domino - SGU 101 (欧拉路径)
题目大意:这是一个多米诺骨游戏,这个游戏的规则就是一个连着一个,现在给出 N 个多米诺,每个多米诺两边都有一个编号,相邻的多米诺的编号要一致,当然多米诺是可以翻转的(翻转就加‘-’,不翻转是‘+’), ...
- hibernate一对多关系映射(自身关联)
示例:一个类别(Category)下面有多个子类别,多个子类别属于同一个父类别. public class Category { private Integer id; private String ...
- docker镜像与仓库
1.docker image 镜像 容器的基石 层叠的只读文件系统 联合加载(union mount) 2.镜像存储地址 /var/lib/docker 3.镜像操作 列出镜像 镜像标签和仓库 查 ...
- [置顶] Array ArrayList LinkList的区别剖析
这是一个面试中我们经常被问到的问题 Array.ArrayList.LinkList之间的区别:Array.ArrayList.LinkList均属于泛型的范畴,都用来存放元素,主要区别是Array是 ...
- Delphi中WebBrowser拦截网页Alert对话框消息(转)
interface uses Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, Dialogs, O ...
- Ubuntu 命令行下快速打开各类文件 分类: ubuntu shell 2014-11-18 20:06 210人阅读 评论(0) 收藏
xdg-open 命令可以用来在Ubuntu下快速打开各类文件. 下面是从 manual 文档里截取的内容: 可以知道,该命令的功能是在图形界面下按照用户的平时习惯打开各类文件,甚至是链接. 这样,我 ...
- Lucene.Net+盘古分词
前言 各位朋友,谢谢大家的支持,由于文件过大,有考虑到版权的问题,故没有提供下载,本人已建立一个搜索技术交流群:77570783,源代码已上传至群共享,需要的朋友,请自行下载! 首先自问自答几个问题, ...
- Linux下配置SSL (转)
没有安装apache的情况: 首先安装SSL,再编译安装Apache,再配置证书即可 1.下载apache和openssl 网址:http://www.apache.org http://www.op ...
- 通知模式实现两个textField传值及模态视图——iOS开发
通知模式实现两个textField传值及模态视图--iOS开发 利用通知模式,实现两个不同界面的textField之间的传值,在界面二输入字符,传值到前一界面的textField. 界面的切换,这里临 ...