Discuz!官方免费开源建站系统

 找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索

快速分析discuz代码结构(帮助函数)

[复制链接]
元首 发表于 2009-7-16 08:27:56 | 显示全部楼层 |阅读模式
本帖最后由 元首 于 2009-7-16 08:30 编辑

通常我们去分析一套开源程序,总是无法从正确的方向入手. 比如我们会不知道这个变量是什么时间产生的,这个段文字是从哪个变量出来的, 还有就是引入文件, 函数,常量等一些数据, 我们总是忘记. 为此我分享一下,一直以来使用的方法, 虽然笨了点, 但效果特佳.

  我就是用了一个函数,来返回当次运行的所有变量,数组,常量,函数,及引入文件. 当你在看一段代码,搞不懂来龙去脉时, 就可以print_r这个函数, 里面的数据非常之全,多分析一下对自己是有帮助的.

  安装方法:

  由于discuz采用了单一引入文件流程, 所以基本上,无论你做什么, 都得从include/commn.inc.php文件起步. 我们的安装也就在这个文件上加段函数.
  打开:commn.inc.php文件,在第8行"*/"下面增加:
  1. $vars = 10000000;
  2. function vars($on=null){
  3. global $GLOBALS;
  4.     $array = array();
  5.     $s =0;
  6.     $array['error'] = '';
  7.     foreach ($GLOBALS['GLOBALS'] as $key => $val){
  8.         if($key ==='vars' || $s ===1){
  9.             $array[$key] = $val;
  10.             $s=1;
  11.             //处理部分变量的习惯问题,error记录着哪个变量有问题..
  12.             if(eregi('[[:punct:]]',$key) || eregi('^[0-9]+',$key)){
  13.                  $array['error'].=$key.' / ';
  14.             }
  15.         }else {
  16.          continue;
  17.         }
  18.     }
  19. $func = get_defined_functions();
  20. $cons = get_defined_constants(true);
  21. $array['function'] = $func['user'];
  22. $array['constants'] = $cons['user'];
  23. $array['include'] = get_included_files();
  24. unset($array['_DCACHE']);
  25. $ons = array('变量'=>1,'数组'=>2,'函数'=>3,'常量'=>4,'文件'=>5);
  26. in_array($on,array_keys($ons)) &&  $on = $ons[$on];
  27.    switch ($on){
  28.            case null:
  29.                    return $array;
  30.                    break;
  31.            case 1:   //变量
  32.                    $arrays = array();
  33.         foreach ($array as $key => $val){
  34.                 if(is_array($val)===false)
  35.                 $arrays[$key] = $val;
  36.         }
  37.         return $arrays;
  38.         break;
  39.            case 2:  //数组
  40.                    $arrays = array();
  41.              foreach ($array as $key => $val){
  42.                 if(is_array($val)===true)
  43.                 $arrays[$key] = $val;
  44.         }
  45.         unset($arrays['function'],$arrays['include'],$arrays['constants']);
  46.         return $arrays;
  47.         break;  
  48.            case 3:   //函数
  49.                return $array['function'];
  50.                break;
  51.            case 4:   //常量
  52.                 return $array['constants'];
  53.                 break;
  54.            case 5:   //引入文件
  55.                return $array['include'];
  56.                break;       
  57.    }
  58. }
复制代码
然后我们使用. 打开index.php 在最后一行, 即 "?>"结束行的上一行加:
  1. print_r(vars());
复制代码
这段代码放的位置对于结果是有影响的, php流程是一直往下执行的, 我们放至在最后, 目的就是要获得全面的信息.
  vars() 函数说明:
  参数: 1;
  参数名: $on;
  参数值: null,1,2,3,4,5;
  可选参数值: '变量','数组','函数','常量','文件');  //比如vars('变量'),相信有部分人记中文强.
  返回值: 数组.

  分析帮助:
  数组的键名可直接应用于变量,比如 array('vars'=>10000);
  其实就表示是$vars变量. 你可以echo $vars; 值与 array['vars']; 是一样的.
  同样的道理,数组也是如此分析.

  好了, 现在就认真分析这个数组吧. 不要忘记了, 写写笔记哦.
不被谁所认识 发表于 2009-7-16 08:43:34 | 显示全部楼层
支持下元首沙发等候供迎楼下层的朋友
回复

使用道具 举报

不被谁所认识 发表于 2009-7-16 08:44:51 | 显示全部楼层
3楼支持请求元首前往我的求助帖处看看https://discuz.dismall.com/thread-1352571-1-1.html,帮忙分析不实现的情况,谢谢
回复

使用道具 举报

选峰工作室 发表于 2009-7-16 11:47:35 | 显示全部楼层
本帖最后由 选峰工作室 于 2009-7-16 11:57 编辑

很好。谢谢。
回复

使用道具 举报

肥爺 发表于 2009-7-17 04:13:51 | 显示全部楼层
支持下元首
回复

使用道具 举报

free-man-free 发表于 2013-12-31 10:38:39 | 显示全部楼层
这个是老版本的了,能不能解析下新版本的discuz3.0的,新版本/include/文件夹下就没有commn.inc.php这个文件
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

手机版|小黑屋|Discuz! 官方站 ( 皖ICP备16010102号 )star

GMT+8, 2024-11-16 01:17 , Processed in 0.027066 second(s), 4 queries , Gzip On, Redis On.

Powered by Discuz! X3.4

Copyright © 2001-2023, Tencent Cloud.

快速回复 返回顶部 返回列表