本帖最后由 元首 于 2009-7-16 08:30 编辑
通常我们去分析一套开源程序,总是无法从正确的方向入手. 比如我们会不知道这个变量是什么时间产生的,这个段文字是从哪个变量出来的, 还有就是引入文件, 函数,常量等一些数据, 我们总是忘记. 为此我分享一下,一直以来使用的方法, 虽然笨了点, 但效果特佳.
我就是用了一个函数,来返回当次运行的所有变量,数组,常量,函数,及引入文件. 当你在看一段代码,搞不懂来龙去脉时, 就可以print_r这个函数, 里面的数据非常之全,多分析一下对自己是有帮助的.
安装方法:
由于discuz采用了单一引入文件流程, 所以基本上,无论你做什么, 都得从include/commn.inc.php文件起步. 我们的安装也就在这个文件上加段函数.
打开:commn.inc.php文件,在第8行"*/"下面增加:- $vars = 10000000;
- function vars($on=null){
- global $GLOBALS;
- $array = array();
- $s =0;
- $array['error'] = '';
- foreach ($GLOBALS['GLOBALS'] as $key => $val){
- if($key ==='vars' || $s ===1){
- $array[$key] = $val;
- $s=1;
- //处理部分变量的习惯问题,error记录着哪个变量有问题..
- if(eregi('[[:punct:]]',$key) || eregi('^[0-9]+',$key)){
- $array['error'].=$key.' / ';
- }
- }else {
- continue;
- }
- }
- $func = get_defined_functions();
- $cons = get_defined_constants(true);
- $array['function'] = $func['user'];
- $array['constants'] = $cons['user'];
- $array['include'] = get_included_files();
- unset($array['_DCACHE']);
- $ons = array('变量'=>1,'数组'=>2,'函数'=>3,'常量'=>4,'文件'=>5);
- in_array($on,array_keys($ons)) && $on = $ons[$on];
- switch ($on){
- case null:
- return $array;
- break;
- case 1: //变量
- $arrays = array();
- foreach ($array as $key => $val){
- if(is_array($val)===false)
- $arrays[$key] = $val;
- }
- return $arrays;
- break;
- case 2: //数组
- $arrays = array();
- foreach ($array as $key => $val){
- if(is_array($val)===true)
- $arrays[$key] = $val;
- }
- unset($arrays['function'],$arrays['include'],$arrays['constants']);
- return $arrays;
- break;
- case 3: //函数
- return $array['function'];
- break;
- case 4: //常量
- return $array['constants'];
- break;
- case 5: //引入文件
- return $array['include'];
- break;
- }
- }
复制代码 然后我们使用. 打开index.php 在最后一行, 即 "?>"结束行的上一行加:这段代码放的位置对于结果是有影响的, php流程是一直往下执行的, 我们放至在最后, 目的就是要获得全面的信息.
vars() 函数说明:
参数: 1;
参数名: $on;
参数值: null,1,2,3,4,5;
可选参数值: '变量','数组','函数','常量','文件'); //比如vars('变量'),相信有部分人记中文强.
返回值: 数组.
分析帮助:
数组的键名可直接应用于变量,比如 array('vars'=>10000);
其实就表示是$vars变量. 你可以echo $vars; 值与 array['vars']; 是一样的.
同样的道理,数组也是如此分析.
好了, 现在就认真分析这个数组吧. 不要忘记了, 写写笔记哦. |