资源预览内容
第1页 / 共38页
第2页 / 共38页
第3页 / 共38页
第4页 / 共38页
第5页 / 共38页
第6页 / 共38页
第7页 / 共38页
第8页 / 共38页
第9页 / 共38页
第10页 / 共38页
亲,该文档总共38页,到这儿已超出免费预览范围,如果喜欢就下载吧!
资源描述
PHPCMS 整站代码分析讲解(一) 昨天在网上逛看到这个帖子,就转来与大家分享!原作者 逆雪寒。首先我对 PHPCMS 的 头程序文件开始讲解 : include/common.inc.php这个文件是程序 启动的核心文件. Copy to clipboard - CODE:$val) $string$key = new_addslashes($val); return $string; 这个函数也是写得贼好。也是同时考虑过滤 字符窜或数组,也是使用了 传归。看下就应该 明白了吧。这个不用说了。我们要学下这个思路这个方法方式哦。这样才能进步。 哈哈。我们要懂模仿。 */ extract($_POST, EXTR_OVERWRITE); extract($_GET, EXTR_OVERWRITE); /*嘿。 extract 前面加个 鸡蛋做什么呢?抑制错误的。还不懂的话。自己百度了。 为什么用 extract()函数呢.平时我们程序 是不是要常使用 $_POST$_GET 来获取传递的 变量呀。是不是感觉贼麻烦呀。 比如 $_POSTxx这样接受是挺好。但写多了很麻烦是吧。我是感觉麻烦。我现在想直接 就 $xx 就可以获取传递过来的东西。那怎么办呢。 就用了 extract()函数来实现这么一个技巧。 这个技巧在 discuz 论坛上也有应用。 */ unset($_POST, $_GET); /*unset() 好处不用说了吧。 释放 $_POST $_GET 数组 ,因为已经不需要他们了。 */ ?明天放假了今天在写点罗放假没空写了要陪老婆,大家看了有什么不明白的可以跟 帖问我懂的我会回答谢谢PHPCMS 整站代码分析讲解(二)Copy to clipboard - CODE: /*代码讲解分析: 逆雪寒. 2007 - 12 - 2 */ require PHPCMS_ROOT./config.inc.php; /*加栽整站的配置参数文件。 一般的程序都会有这个文件。 做什么的呢?比如一些数据库连接 地址。用户名,密码等。需要用到的参数都定义在这个文件里面。这样以后配置变了。我们 只要改动下这个文件里面的 变量值就好。是不是很方便呢。呵呵.在这里说下 require() 这个加载函数。 require 和 include 都是用来加载其他 PHP 文件用的。但他们是有区别的。 require 函数:是“预解释“ 函数。就是程序一加载,就执行了 require 函数。而 include呢。是个过程加载函数。我们 可以在逻辑里比如:if 里面使用 include 来动态的加载其他程序片段。而 require 就不行。 */ require PHPCMS_ROOT./languages/.$CONFIGlanguage./phpcms.lang.php; /*顾名思义:这个就是加载语言包了。的国际化目前做得最多的。就是直接用 文件来实现。在 phpcms.lang.php 文件里面定义程序中要用到的中文信息。 然后在程序一 开始就加载。那里程序里面 就可以使用这个文件里面的变量和一切。 那么就简单了。 模板上就不需要直接写中文信息了。 直接用这个文件里面定义的变量等来替换。从而实现国际化。over!最好自己打开这个语言 文件再加上自己思考下。就知道。原来如此简单。 */ define(PHPCMS_PATH, $CONFIGrootpath); define(PHPCMS_CACHEDIR, $CONFIGcachedir); /*$CONFIGrootpath这个就是全局配置文件config.inc.php 文件里面数据库信息。等全部 配置信息。在这里把他们定义为常量。为什么需要定义为常量呢。因为作者感觉这样写 爽罗。呵呵。其实因为后面 用到这两个变量多。 所以干脆定义为常量。 方便使用。 再多说一个技巧: $CONFIGrootpath 其实也可以写成$CONFIGrootpath但是最好不要这样。为什么呢。因为引擎会先 判断rootpath 是不是常量。如果不是才会认定$CONFIGrootpath是数组。这 样性能上就差了一点点了。再多说一个技巧:为什么程序多数都用单引号呢而不 用 “ 双引号呢。因为这样效率好, “ 双引号。php 引擎还会先检查里面是否有变量,如果有就解释。而 单引号不会做这一步的检查。 而直接就当成字符窜了。所以效率上也会有一点点影响哦。 */ $CONFIGenablephplog ? set_error_handler(phpcms_error) : error_reporting(E_ERROR | E_WARNING | E_PARSE); /*$CONFIGenablephplog是 否 开 启 错 误 日 志 设 置 。 这 个 设 置 在 全 局 配 置 文 件 里 面.config.inc.php 。这里使用了三目运算符偶最喜欢用了。 一些简短的逻辑判断。 可以使用? : ;来实现比较简洁 set_error_handler() 这个函数就大有来头了。 php4 里面的典型自定义程序出错后行为的一个 函数。十分好用。怎么用呢? set_error_handler(函数)的参数也是一个函数。这个函数。 反映了程序出错后行为的。 phpcms_error 函数存在global.func.php 全局函数里面。function phpcms_error($errno, $errmsg, $filename, $linenum, $vars) $filename = str_replace(PHPCMS_ROOT, ., $filename);$filename = str_replace(“, /, $filename);/把win平台的 换成/兼容常见 系统的路径 if(!defined(E_STRICT) define(E_STRICT, 2048); $dt = date(Y-m-d H:i:s); $errortype = array ( E_ERROR= Error, E_WARNING= Warning, E_PARSE= Parsing Error, E_NOTICE= Notice, E_CORE_ERROR= Core Error, E_CORE_WARNING= Core Warning, E_COMPILE_ERROR= Compile Error, E_COMPILE_WARNING = Compile Warning, E_USER_ERROR= User Error, E_USER_WARNING= User Warning, E_USER_NOTICE= User Notice, E_STRICT= Runtime Notice ); $user_errors = array(E_USER_ERROR, E_USER_WARNING, E_USER_NOTICE); $err = “n“; $err .= “t“ . $dt . “n“; $err .= “t“ . $errno . “n“; $err .= “t“ . $errortype$errno . “n“; $err .= “t“ . $errmsg . “n“; $err .= “t“ . $filename . “n“; $err .= “t“ . $linenum . “n“; if (in_array($errno, $user_errors) $err .= “t“ . wddx_serialize_value($vars, “Variables“) . “n“; $err .= “nn“; echo $err; error_log($err, 3, PHPCMS_ROOT./data/php_error_log.xml); chmod(PHPCMS_ROOT./data/php_error_log.xml, 0777); 就是这个鸟蛋。 现在我们慢慢来干掉他。 呵呵这个自定义出错信息函数默认带有四个 参数。第一个参数$errno 是程序出错的等级。第二参数是程序出错的界面信息。第 三是出现错误的程序文件名。 第四是第几行出现错误。第五个参数。要不要都行是当前变量状态的快照.看吧。我们有 这些信息后。 想定义怎么样的错误信息给客户看都很容易了是吧?但现在我们是要生成错误 日志呢?这里 phpcms 作者是动态生成一个文件来做错误日志的。不错不错.他使 用了 in_array() 函数来实现(因为比较简单,自己理解下)只记录E_USER_ERROR, E_USER_WARNING, E_USER_NOTICE 这三个级别的错误日志信息。 n 是文本换行符t 是 制表符. 这里他使用了一个比较漂亮而不常用的函数 wddx_serialize_value () wddx 其实也 是一种xml 。wddx_serialize_value()这个函数就是把一般变量以格式输出。这 样我们就不用自己模拟写 xml 了。方便吧。呵呵 第一个参数就是:要格式输出的变量, 第二个参数是输出的 xml 的介绍信息. 下面就是 error_log() 函数。这个函数十分有用了。 就是生成错误日志文件。不需要我们 fopen 了。方便吧。它还有很多功能。详细的 看手册。chmod 设置日志文件的权限是可读可写可执行。在 php5 中。我习惯使用 extendsException来定义自己的出错信息。 所以很少用 set_error_handle(). 如果没开启日 志功能。那么error_reporting(E_ERROR | E_WARNING | E_PARSE)就运行了。把一般出错 信息先出过来。 */ if($CONFIGsessionsavepath) session_save_path($CONFIGsessionsavepath); /*定义 session 的存储路径,session 其实也是 cookie 不过 session 是实现在服务器端的。 安全但负载重点。这样做的好处?效率很好。如果你在虚拟主机的话。大家的 session cookie 都放在了 php.ini 里面设置的默认地方。文件夹臃肿就会慢罗。是吧。第二就是安全罗。记 得一定要定义在 session_start()函数之前 */ session_start(); if(function_exists(date_default_timezone_set) date_default_timezone_set($CONFIGtimezone); /*php5 开始有时区的概念了。记得就行 */ header(Content-type: text/html; charset=.$CONFIGcharset); /*设置页面编码.php 编码有:页面编码。数据库编码。文件内码。如果三码相同就一般 不会出现乱码.文件内码是什么呢?每个文件都有自己的内部编码。一般都用比 较爽。怎么改变文件内码?你用也行也行。随便。数据库编码那肯定是要指定的了。mysql5 开始也有字符集模式这个最好也设置这样可以兼容更多平台。 页面编码: 这句就是。 一般的头文件都有。 那 还需要 header(Content-type: text/html; charset=.$CONFIG
收藏 下载该资源
网站客服QQ:2055934822
金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号