周末没事,在研究discuz和phpcms代码,发点大家共享下
时间:2010-05-22
来源:互联网

开头,phpcms和discuz核心文件都是从 includes/common.inc.php开始的,我们今天就从这个文件开始
这俩文件开头写的都差不多
复制代码
|
复制代码
|
作用:定义常量DISCUZ_ROOT的值
示例:
echo dirname(__FILE__); //显示 http://www.zhangyongwei.com/include
echo substr(dirname(__FILE__),0,-7);//从后面开始数截掉7个字符,显示 http://www.zhangyongwei.com/
复制代码
|
计算脚本开始运行的时间。很常见的写法。最后结算还在程序运行的终点位置。
作用:microtime()取得Unix 时间戳和微秒数后使用explode()进行切割并存进数组变量$mtime;
示例:
echo microtime(); //将显示 0.29353300 1164349567 (根据时间的不同会显示不同的数字,但格式是一样的
$mtime[0]="0.29353300";
$mtime[1]="1164349567";
作者: zx68555 发布时间: 2010-05-22
复制代码
|
把 $HTTP_ENV_VARS $HTTP_POST_VARS 全局变量设置为 NULL 因为php4.1.0以上默认以 $_POST 来替代。unset后防止程序运行在低版本会出现安全等问题。比如变量注入
复制代码
|
地球人都知道。关了字符窜入库自动转意 比如 my name is on'x 转成 my name is on \'x 为了最大的程序性能所以我们关掉吧
复制代码
|
程序入口标记。为什么需要这个东西呢。就好比你进一个小区,保安大哥哥肯定要你签字或是挂个鸟牌证明你是从正门进来的。
防止你翻墙进入去偷东西搞破坏。这个入口标记也有这个功能。 在这里定义了一个常量 IN_PHPCMS 为 TRUE ,然后我在其他程序文件里面检查这个标记。如果不存在或不为真,
那么就基本可以肯定你这个家伙是个小偷来的。 人可能翻墙进入。但程序怎么翻墙呢。只要在php.ini文件里面激活 allow_url_fopen选项,include() 就可以包含 URL 地址了。你想下如果你有个 放密码的PHP文件。如果给人家include 了以后。你怕不?
复制代码
|
为了程序产品的跨平台。自动获取程序的安装目录路径 ,定义为 PHPCMS_ROOT 常量 这就是代码规范!
discuz 里也有开头跟这个差不多,我接着讲,讲的乱啊
复制代码
|
作用:定义天下秀的常量值
作者: zx68555 发布时间: 2010-05-22
作者: ricky 发布时间: 2010-05-22
复制代码
|
啥意思呢?当PHP版本小于4.1.0 的时候使用传址方式获取内置全局变量
我用红字标明了传址,为什么要使用传址而不是传值方式?
要点:在变量前加 & 符号既是传址
复制代码
|
我接着讲
复制代码
|
包含 全局函数 global.func.php 文件。里面放了些程序全局都有需要用的函数.大家看到了吧。 常量 PHPCMS_ROOT 已经发挥作用。
作者: zx68555 发布时间: 2010-05-22

复制代码
|
这是我刚粘的一块,
复制代码
|
顾名思义: 这个就是加载语言包了。PHP的国际化目前做得最多的。就是直接用PHP文件来实现。 在 phpcms.lang.php 文件里面定义程序中要用到的中文信息。然后在程序一开始就加载。那里程序里面就可以使用这个文件里面的变量和一切。那么就简单了。模板上就不需要直接写中文信息了。直接用这个文件里面定义的变量等来替换。
复制代码
|
这是对phpcms错误的处理方法
复制代码
|
复制代码
|
写的很强大的函数
作者: zx68555 发布时间: 2010-05-22
复制代码
|
这个鸟函数默认带五个参数 第一个参数 $errno 是程序出错的等级。 第二参数是程序出错的界面信息。第三是出现错误的程序文件名。第四是 第几行出现错误。第五个参数。要不要都行,是当前变量状态,没多大意义,信息都有了,该展现给前台信息,phpcms是生成xml文件来做错误日志的
复制代码
|
他使用了 in_array()--(检查数组中是否存在某个值) 函数来实现。只记录 E_USER_ERROR, E_USER_WARNING, E_USER_NOTICE 这三个级别的错误日志信息。\n 是文本换行符 \t是制表符. wddx_serialize_value () 这个函数听强的,这个函数就是把一般变量以XML格式输出。这样我们就不用自己模拟写xml了。第一个参数就是: 要格式输出的变量,第二个参数是输出的xml的介绍信息. ,具体函数大家可以看手册。
下面就是 error_log() 函数。这个函数十分有用了。就是生成错误日志XML文件。不需要我们fopen 了。强,是吧,
oh my god ,群里那棒人怎么也不来顶下,累死了,接着啊 chmod 设置日志文件的权限是 可读可写可执行。
这个函数讲完!
作者: zx68555 发布时间: 2010-05-22
作者: deepblue 发布时间: 2010-05-22
作者: gin 发布时间: 2010-05-22
'700')this.width='700';if(this.offsetHeight>'700')this.height='700';" title="Click Here To EnLarge">嘿嘿,插入下图片,唉,他们都不顶,气死我了,我接着讲啊
在php5中。我习惯使用 extends Exception(继承) 来定义自己的出错信息。所以很少用 set_error_handle(). 如果没开启日志功能。那么 error_reporting(E_ERROR | E_WARNING | E_PARSE) 就运行了。把一般出错信息先出过来。建议大家以后写代码页这样,考虑的多点,有用!
复制代码
|
讲到这里不得不说$_SERVER这个鸟东西了,PHP服务器变量,大家尽可以去搜搜有什么参数,或者在文件开头打印下,print_r($_SERVER);里面包含了很多变量
偷偷懒把手册上的贴出来啊
复制代码
|
复制代码
|
这个是用到了preg_replace函数,大家以前看张老师是不是好多preg_replace,这里咱就用到了,"/(.*)\.php(.*)/i"是正则 具体怎么写正则,大家还可以去看看张老师讲的那一章,正则也是从小的东西做出来的,嘿嘿
先发了啊我接着
作者: zx68555 发布时间: 2010-05-22
作者: zhang578695398 发布时间: 2010-05-22

钟胜辉定义的好多$_SERVER变量我就不说了,我也懒得讲,我往下走
define('RELATE_REFERER',urlencode(RELATE_URL));urlencode函数是
(本函数将字符串以 URL 编码。例如空格就会变成加号。Homepage 中 form 资料传送就是用 urlencode 编码后再送出)
例如:<? echo urlencode("张永伟"); ?> 结果是:%E5%BC%A0%E6%B0%B8%E4%BC%9F 这是URL编码,是不是超级乱,
作者: zx68555 发布时间: 2010-05-22
作者: xiaohufei 发布时间: 2010-05-22
复制代码
|
哈哈,这么快就被deepblue老大设为精华了,我得加油啊
if(function_exists('date_default_timezone_set')) date_default_timezone_set(TIMEZONE);php5开始有时区的概念了。记得就行,没多少东西
header('Content-type: text/html; charset='.CHARSET);设置页面编码,我详细点 php编码有: 页面编码。数据库编码。文件内码。如果三码相同就一般不会出现乱码. 文件内码是什么呢?每个文件都有自己的内部编码。一般都用utf8比较爽。怎么改变文件内码?你用DW也行UE也行。随便。数据库编码那肯定是要指定的了。mysql5开始也有字符集模式这个最好也设置这样可以兼容更多平台。
页面编码:<meta http-equiv="Content-Type" c /> 这句就是。一般的HTML头文件都有。那 还需要header('Content-type: text/html; charset='.CHARSET);吗?其实需要的。因为有些自己写的提示层呀。或是文件里没指定页面编码的。就很容易出现乱码那么我们就防范于未然。 header 一个编码过去就解决了,爽吧
作者: zx68555 发布时间: 2010-05-22
复制代码
|
if(CACHE_PAGE && !defined('IN_ADMIN')) cache_page_start();这个是以前版本的phpcms里面没有的,到phpcms2008以后,好多文件开头都有cache_page_start(); 啥意思呢?
在config.inc.php 页面有//页面缓存配置define('CACHE_PAGE', 0); //是否开启PHP页面自动缓存功能
CACHE_PAGE && !defined('IN_ADMIN') 看看定义了IN_ADMIN he CACHE_PAGE这个缓存鸟东西,用到了就开启下面的方法,看看下面的cache_page_start(); 这个方法这么写的:
复制代码
|
复制代码
|
define('GZIP', 1); //是否Gzip压缩后输出(config.inc.php) 跟上面的那个写法是一样的
extension_loaded(string name)[手册:extension_loaded -- Find out whether an extension is loaded eg:
复制代码
|
]
这个鸟函数是是判断zlib 这个模组是否已载入 返回true 和flase .ini_set这个函数手册上也是英文的,晕,他是php自带的用来设置php.ini配置文件的函数
搞个用法啊:
语法:ini_set("选项","值")
该函数用时最好放到php的脚本最头部(从该函数开始设置的参数生效,该脚本结束失效)
比如:
ini_set(''max_execution_time'', ''180'');
设置php的脚本超时时间为 180秒 php程序员站
ini_set("asp_tags","On")
打开asp脚本标记的支持 比如:<% echo "aaa"%>
ini_set("display_errors","On")
打脚本错误信息
当然了, ini_set('zlib.output_compression', 'On') 这个就是打开php是否Gzip压缩后输出
说白了,ini_set就是在程序里设置你的php.ini 的函数,强大吧!嘿嘿,累死我了
ob_start();这个函数大家去手册上看看,是英文的;是一段时讲缓存的,这个函数主要作用就是打开缓存区,我查查啊,现学现卖
复制代码
|
所有对header()函数有了解的人都知道,这个函数会发送一段文件头给浏览器,但是如果在使用这个函数之前已经有了任何输出(包括空输出,比如空格,回车和换行)就会提示出错。如果我们去掉第一行的ob_start(),再执行此程序,我们会发现得到了一条错误提示:"Header had all ready send by"!但是加上ob_start,就不会提示出错,原因是当打开了缓冲区,echo后面的字符不会输出到浏览器,而是保留在服务器,直到你使用flush或者ob_end_flush才会输出,所以并不会有任何文件头输出的错误!
我接着走代码上来:
复制代码
|
这段就熟悉了,加载你的数据库类 这个要注意啊,不一定是咱们的MySQL数据库 这这里定义了DB_DATABASE一个常量
在config.inc.php里面:define('DB_DATABASE', 'mysql'); //数据库类型
说的私人的东西吧,我跟着钟胜辉有五六个月吧,那时他一不在搞phpcms了,搞cmstop,当然了,我写这些当然不是说phpcms写的好,cmstop里有我好多东西,感觉cmstop程序里的东西的确强,phpcms只是一般的功能强大的cms而已,我建议大家可以把phpcms拿来做研究,别玩这个鸟东西,不说废话了,他的这个mysql.class.php类里就跟以前一个网友在咱吧里上传的那个数据库类差不多,不过支持扩展的多,功能也强,建议某些同学学习的时候可以找一些开源的程序他的类来研究,很有用的接着:
require 'session_'.SESSION_STORAGE.'.class.php'(//Session配置 define('SESSION_STORAGE', 'mysql'); //Session 存储方式(files, mysql, apc, eaccelerator, memcache, shmop));把session_mysql.class.php加载过来了
session_set_cookie_params(0, COOKIE_PATH, COOKIE_DOMAIN);这个鸟函数又是英文的,晕,我英文太菜了,解释下就是设置 Session 的生存期的,该函数必须在 session_start() 函数调用之前调用 那两个常量他都在config.inc.php里调用过
嘿嘿
作者: zx68555 发布时间: 2010-05-22
复制代码
|
可以先看看
作者: zx68555 发布时间: 2010-05-22
作者: libailin 发布时间: 2010-05-22
作者: lqjlee 发布时间: 2010-05-23
作者: 有你真好 发布时间: 2010-05-23

作者: zx68555 发布时间: 2010-05-29
复制代码
|
此函数非常的有用,最少我是经常用到的
产生随机码的函数
复制代码
|
作者: zx68555 发布时间: 2010-05-29
作者: axiebin 发布时间: 2010-05-29
作者: goodluck709 发布时间: 2010-06-02



作者: 浊浊然 发布时间: 2010-06-02

作者: victory23 发布时间: 2010-06-08

作者: phpstyle 发布时间: 2010-06-08
方便以后查找
作者: the7th 发布时间: 2010-06-08
作者: selboo 发布时间: 2010-06-08

作者: leif 发布时间: 2010-06-18
作者: sayokay 发布时间: 2010-06-18
作者: www.qyie.cn 发布时间: 2010-06-19
热门阅读
-
office 2019专业增强版最新2021版激活秘钥/序列号/激活码推荐 附激活工具
阅读:74
-
如何安装mysql8.0
阅读:31
-
Word快速设置标题样式步骤详解
阅读:28
-
20+道必知必会的Vue面试题(附答案解析)
阅读:37
-
HTML如何制作表单
阅读:22
-
百词斩可以改天数吗?当然可以,4个步骤轻松修改天数!
阅读:31
-
ET文件格式和XLS格式文件之间如何转化?
阅读:24
-
react和vue的区别及优缺点是什么
阅读:121
-
支付宝人脸识别如何关闭?
阅读:21
-
腾讯微云怎么修改照片或视频备份路径?
阅读:28