关闭

写一个把调试信息输出到磁盘文件的DEBUG程序

标签: 磁盘functionextensionfileperformance浏览器
891人阅读 评论(0) 收藏 举报
分类:
昨天提到过,在下正在看OPENCART的源代码,随着工作的深入,局面日益复杂起来,写一些如echo,print_r等语句直接把变量显示在浏览器上,不仅干扰了正常的系统显示,因为SESSION的使用,也会造成系统运行时的干扰。要想个办法能把调试信息保存在一个文件里,运行过后调出来慢慢看,不是一个很好的办法吗?

   突然想起前两天发到论坛里的一篇文章:http://www.phpchina.com/bbs/thread-37420-1-2.html,里面不是有一个好的调试类吗?找出来一看,果然可以利用上,就搬出来做到一个文件里,代码如下

<?php

/* usage:
     write in:
        ZFDemo_Log::log("PHP extensions loaded = /n    " . implode("/n    ", $extensions));
     or:
        ZFDemo_Log::log("The '$ext' extension is required, but not currently loaded by php.");
       
        ZFDemo_Log::log("Zend_Session.ini=" . print_r($sessionConfig->toArray(), true));
        
     output:
        ZFDemo_Log::show();  

require_once('zfdemo_log.php');

*/

class ZFDemo_Log
{
    // very simple running log of "debug/" messages to highlight inner workings of demo
    public static $log = '';


    /**
     * Accumulate log messages, but also append them to a running log file for easy viewing.
     */
    public static function log($msg, $before = null)
    {
        static $flushed = false;
        if ($before) {
            self::$log = "$msg/n" . self::$log;
        } else {
            self::$log .= "$msg/n";
        }

        $logfile = 'log.txt';
        // performance is not an issue, so just sync to disk everytime
        if (isset($logfile)) {
            if ($flushed) {
                file_put_contents($logfile, "$msg/n", FILE_APPEND);
            } else {
                file_put_contents($logfile, self::$log);
            }
            $flushed = true;
        }
    }


    /*
     * Useful if you modify the demo, and need to quickly see the debug log in your browser.
     */
    public static function show()
    {
        echo "<html><head><title>ZF Demo Debug Log</title></head>/n<body>/n<pre>";
        echo htmlentities(self::$log, ENT_QUOTES, 'UTF-8');
        echo '</pre></body></html>';
    }


    public static function get()
    {
        return self::$log;
    }
}

保存到你正在开发的文件夹中,可以放在一个子目录下,如/DEBUG/zfdemo_log.php,然后在你需要调试的文件里进行调用,例示代码如下:

<pre>
<?php
require_once('debug/zfdemo_log.php');
$a = array (1, 2, array ("a", "b", "c"));

$b = array (3, 4, array ("d", "f", "g"));


ZFDemo_Log::log('$a=' . print_r($a, true));

ZFDemo_Log::log('$b=' . print_r($b, true));

ZFDemo_Log::show(); 

?>
</pre> 

执行后系统正常运行,然后在同一目录下可以找到一个文本文件log.txt,内容如下:

$a=Array
(
    [0] => 1
    [1] => 2
    [2] => Array
        (
            [0] => a
            [1] => b
            [2] => c
        )

)

$b=Array
(
    [0] => 3
    [1] => 4
    [2] => Array
        (
            [0] => d
            [1] => f
            [2] => g
        )

)

 

在对复杂的系统进行调试时,这种方法不失高效方便。当然如果需要直接在屏幕上查看调试信息的话,可在相应位置写入代码:

  ZFDemo_Log::show();  

即可实现浏览器上直接显示调试信息。

   (当时发贴时,二楼一个家伙马上就说这个教程“误人子弟”,其目的无非是想打压ZF,不过大家可以看到,这个例子中可以提出这么好的调试类代码,怎么说也会对大伙有益吧,如果你觉得这份东东对你有帮助,请留言支持一下吧

 
0
0

查看评论
* 以上用户言论只代表其个人观点,不代表CSDN网站的观点或立场
    个人资料
    • 访问:7834198次
    • 积分:153239
    • 等级:
    • 排名:第3名
    • 原创:6348篇
    • 转载:35篇
    • 译文:2篇
    • 评论:2693条
    文章分类
    最新评论
    热门站