Bookmark and Share

Lee's 程序人生

HTML CSS Javascript XML AJAX ATLAS C# C++ 数据结构 软件工程 设计模式 asp.net Java 数字图象处理 Sql 数据库
  博客园  :: 首页  :: 新随笔  :: 联系 :: 管理

debug新体验:supesite 应用详解

Posted on 2010-05-07 15:11  analyzer  阅读(488)  评论(0编辑  收藏  举报
supesite 旧版本的使用是很久以前, 整个华丽的感觉就像是看童话, 也显得康盛团队的水平很艺术。 童话不能成为现实, 新版本的supesite放弃了华丽的外观及复杂的结构, 而采用了简明及高效的方式来展示一个cms应该拥有的核心是什么。代码虽然没有uchome及discuz x那般完美, 但整体上来说,思想及结构还是可取的, 比如就debug功能。 第一次体验debug功能是在uchome上面, define('D_BUG', '0'); 那时看这一句时, 想了很久都没有明白,意义何在。 如今终于明白了, 这是给程序员的一块蛋糕。
  当然, 如果你笨得跟牛一样, 那肯定是给你的一颗炸弹。
  
  1:common.inc.php 中代码:
1// 设置debug是否开启,<1 为关闭,其它为开启
2define('D_BUG''1');
3// 当开启D_BUG时, 打error的通用错误提示,否则打开致命错误提示
4D_BUG?error_reporting(7):error_reporting(E_ERROR);
2: function/common.function.php中代码
01function ob_out() {
02    // 引入一些全局的数组
03    global $_SGLOBAL$_SCONFIG$_SC;
04    // 将当前的内容赋值给某键名
05    $_SGLOBAL['content'] = ob_get_contents();
06 
07    // 初始化部分数组
08    $preg_searchs $preg_replaces $str_searchs $str_replaces array();
09 
10    // 假如是ajax行为就对替换数组做前期赋值
11    if($_SGLOBAL['inajax']) {
12        $preg_searchs[] = "/([\x01-\x09\x0b-\x0c\x0e-\x1f])+/";
13        $preg_replaces[] = ' ';
14 
15        $str_searchs[] = ']]>';
16        $str_replaces[] = ']]&gt;';
17    }
18 
19    // 如果系统配置中对url规范有要求的, 就增加新的替换规则,比如伪静态,或者生成html等等。
20    if($_SCONFIG['urltype'] != 4 && $_SCONFIG['urltype'] != 5) {
21        $preg_searchs[] = "/href\=\"(\S*?)\/(index\.php)?\?uid\-([0-9]+)\-?(\S*?)\"/i";
22        $preg_replaces[] = 'href="\\1/?\\3/\\4"';
23        $preg_searchs[] = "/href\=\"\S*?\/(index\.php)?\?(\S+?)\"/ie";
24        $preg_replaces[] = "url_replace('\\2')";
25    }
26     
27    // 如果替换数组不为空, 就执行替换。
28    if($preg_searchs) {
29        $_SGLOBAL['content'] = preg_replace($preg_searchs$preg_replaces,$_SGLOBAL['content']);
30    }
31    // 如果字符替换数组不为空, 也执行替换
32    if($str_searchs) {
33        $_SGLOBAL['content'] = trim(str_replace($str_searchs$str_replaces,$_SGLOBAL['content']));
34    }
35     
36    // 清除当前所有输入
37    obclean();
38     
39    // 如果是ajax行为,就执行header部分发送及xml规范控制
40    if($_SGLOBAL['inajax']) {
41        @header("Expires: -1");
42        @header("Cache-Control: no-store, private, post-check=0, pre-check=0, max-age=0", FALSE);
43        @header("Pragma: no-cache");
44        @header("Content-type: application/xml; charset=$_SC[charset]");
45        echo '<'."?xml version=\"1.0\" encoding=\"$_SC[charset]\"?>\n";
46        echo "<root><![CDATA[".trim($_SGLOBAL['content'])."]]></root>";
47        exit();
48    else{  //如果是普通行为,就到这一步
49        // 设置字符输出编码
50        if($_SCONFIG['headercharset']) {
51            @header('Content-Type: text/html; charset='.$_SC['charset']);
52        }
53         
54        // 再一次输出内容,print 是我改的, 原本是echo
55        print $_SGLOBAL['content'];
56         
57        // D_BUG 功能开启时, 并且在没有定义CREATEHTML常量的页中引入debug的应用页
58        if(D_BUG && !defined('CREATEHTML')) {
59            @include_once(S_ROOT.'./include/debug.inc.php');
60        }
61    }
62}
此函数在footer.html模板中得到执行。 3: include/debug.inc.php中代码
001<?php
002 
003/*
004    [SupeSite] (C) 2007-2009 Comsenz Inc.
005    $Id: debug.inc.php 10898 2008-12-31 02:58:50Z zhaofei $
006*/
007// 门牌效应
008if(!defined('IN_SUPESITE')) {
009    exit('Access Denied');
010}
011 
012// 判断一下是否有开启此功能。很严苛的判断了。
013if(D_BUG) {
014// 首页输出一个hr 及 css样式.
015    echo '
016<!--
017***************************** debug *********************************************
018-->
019<hr>
020<style>
021.tclass, .tclass2 {
022text-align:left;width:760px;border:0;border-collapse:collapse;margin-bottom:5px;table-layout: fixed; word-wrap: break-word;background:#FFF;}
023.tclass table, .tclass2 table {width:100%;border:0;table-layout: fixed; word-wrap: break-word;}
024.tclass table td, .tclass2 table td {border-bottom:0;border-right:0;border-color: #ADADAD;}
025.tclass th, .tclass2 th {border:1px solid #000;background:#CCC;padding: 2px;font-family: Courier New, Arial;font-size: 11px;}
026.tclass td, .tclass2 td {border:1px solid #000;background:#FFFCCC;padding: 2px;font-family: Courier New, Arial;font-size: 11px;}
027.tclass2 th {background:#D5EAEA;}
028.tclass2 td {background:#FFFFFF;}
029.firsttr td {border-top:0;}
030.firsttd {border-left:none !important;}
031.bold {font-weight:bold;}
032</style>
033';
034    // 定义class的名字
035    $class 'tclass2';
036    // 判断$_SGLOBAL['debug_query']为空,就将键名设置为空数组
037    if(empty($_SGLOBAL['debug_query'])) $_SGLOBAL['debug_query'] = array();
038     
039    /*
040        循环数组, 无论它有没有内容.
041        内容的主体是计算了一些mysql执行语句的时间及优化等等,在class/db_mysql.class.php文件中有这一段
042            if(D_BUG) {
043            global $_SGLOBAL;
044            if(empty($_SGLOBAL['debug_query'])) $_SGLOBAL['debug_query'] = array();
045            $mtime = explode(' ', microtime());
046            $sqltime = number_format(($mtime[1] + $mtime[0] - $sqlstarttime), 6)*1000;
047            $explain = array();
048            $info = mysql_info();
049            if(strtolower(substr($sql,0,7)) == 'select ') {
050                $explain = mysql_fetch_assoc(mysql_query('EXPLAIN '.$sql, $this->link_identifier));
051            }
052            $_SGLOBAL['debug_query'][] = array('sql'=>$sql, 'time'=>$sqltime, 'info'=>$info, 'explain'=>$explain);
053        }
054        以上是对$_SGLOBAL['debug_query']数组写入了当前mysql执行的数据。
055    */
056    foreach ($_SGLOBAL['debug_query'as $dkey => $debug) {
057        ($class == 'tclass')?$class 'tclass2':$class 'tclass';
058        echo '<table cellspacing="0" class="'.$class.'"><tr><th rowspan="2" width="20">'.($dkey+1).'</th><td width="60">'.$debug['time'].' ms</td><td class="bold">'.shtmlspecialchars($debug['sql']).'</td></tr>';
059        if(!empty($debug['info'])) {
060            echo '<tr><td>Info</th><td>'.$debug['info'].'</td></tr>';
061        }
062        if(!empty($debug['explain'])) {
063            echo '<tr><td>Explain</td><td><table cellspacing="0"><tr class="firsttr"><td width="5%" class="firsttd">id</td><td width="10%">select_type</td><td width="12%">table</td><td width="5%">type</td><td width="20%">possible_keys</td><td width="10%">key</td><td width="8%">key_len</td><td width="5%">ref</td><td width="5%">rows</td><td width="20%">Extra</td></tr><tr>';
064            foreach ($debug['explain'as $ekey => $explain) {
065                ($ekey == 'id')?$tdclass ' class="firsttd"':$tdclass='';
066                if(empty($explain)) $explain '-';
067                echo '<td'.$tdclass.'>'.$explain.'</td>';
068            }
069            echo '</tr></table></td></tr>';
070        }
071        echo '</table>';
072    }
073     
074    // 以下是取得当前页所有include的文件, 注意判断中的是=不是==
075    if($files = get_included_files()) {
076        ($class == 'tclass')?$class 'tclass2':$class 'tclass';
077        echo '<table class="'.$class.'">';
078            foreach ($files as $fkey => $file) {
079                echo '<tr><th width="20">'.($fkey+1).'</th><td>'.$file.'</td></tr>';
080            }
081        echo '</table>';
082    }
083     
084    // 以下是循环列表cookie的内容, 注意判断是赋值
085    if($cookies $_COOKIE) {
086        ($class == 'tclass')?$class 'tclass2':$class 'tclass';
087        $i = 1;
088        echo '<table class="'.$class.'">';
089            foreach ($cookies as $ckey => $cookie) {
090                echo '<tr><th width="20">'.$i.'</th><td width="250">$_COOKIE[\''.$ckey.'\']</td><td>'.$cookie.'</td></tr>';
091                $i++;
092            }
093        echo '</table>';
094    }
095     
096    // 以下是对_SERVER数组进行列表, 但事实上永远不会打开, 因为判断中写了个条件0
097    if(0 && $server $_SERVER) {
098        ($class == 'tclass')?$class 'tclass2':$class 'tclass';
099        $i = 1;
100        echo '<table class="'.$class.'">';
101            foreach ($server as $ckey => $value) {
102                echo '<tr><th width="20">'.$i.'</th><td width="250">$_SERVER[\''.$ckey.'\']</td><td>'.$value.'</td></tr>';
103                $i++;
104            }
105        echo '</table>';
106    }
107     
108    // 对字符数据流数组进行列表。
109    if($values $_REQUEST) {
110        ($class == 'tclass')?$class 'tclass2':$class 'tclass';
111        $i = 1;
112        echo '<table class="'.$class.'">';
113            foreach ($values as $ckey => $value) {
114                echo '<tr><th width="20">'.$i.'</th><td width="250">$_REQUEST[\''.$ckey.'\']</td><td>'.$value.'</td></tr>';
115                $i++;
116            }
117        echo '</table>';
118    }
119}
120 
121

?>

 

我要啦免费统计