php页面调试输出

在web开发中往往,需要在页面上打印输出结果,经常使用 var_dump,echo,还要考虑字符编码转换,时间久了,难免觉得用此方法,在页面头打印出来的东西乱七八糟,丑的无比,尤其是打印输出数组,阅读起来真是一种痛苦。以前一个老大写的页面调试输出程序,对像数组这种总会要调试查看结果的东西,感觉非常的好。

显示如图所示:这样的展示清晰,支持折叠。

代码如下:(如何使用,我在此就不必多说了)

 

View Code
<?php
class CDebug
{
    private static $count = 0;
    /**
     * 输出调试信息.
     * @param mixed $arr 输出对象
     * @param string $title 标题提示信息
     * @param int $T 输出类型 0 print_r 1 var_dump 2 var_export
     * @example CDebug::print_r($arr,'$arr')
     */
    public static function print_r( $arr, $title = '', $T = 0 )
    {
        
        $T = intval( $T );
        self::$count++;
        if ( self::$count == 1 )
        {

            ?>
<style type="text/css">
<!--
*{
    margin:0px;
    padding:0px;
}
.m_fileldset {
    margin: 0px;
    padding: 2px;/*background-color: #06c;*/
    border: 1px dashed #09c;
    word-break:break-all;
    overflow:auto;
}
.m_legend {
    background-color: #06c;
    margin: 5px;
    padding: 2px;
    border: 1px solid #fff;
    color: #ffe;
    font-weight: bold;
    font-size:12px;
}
.m_button {
    border:1px solid #f96;
    background-color: #ffc;
}
.m_pre {
    text-align:left;
    font-size:12px;
}
-->
</style>
<script>
var m_sign = true;
function m_toggle() {
    var cs = document.getElementsByTagName("pre");
    var r = new Array();
    for(var i = 0;i<cs.length;i++)
    {
        var e = cs[i];
        if("m_pre" == e.className)
        {
            e.style.display = (m_sign == false ? "block" : "none");
            r.push( e);
        }
    }

    var cs = document.getElementsByTagName("button");

    for(var i = 0;i<cs.length;i++)
    {
        var e = cs[i];
        if("m_button" == e.className)
        {
            e.innerHTML = (m_sign == false ? "-" : "+");
        }
    }
    m_sign = !m_sign;
}
</script>
<button onclick="m_toggle()">Expand/Collapse All</button>
<?php
        }
        $temp_name = substr( md5( microtime() . serialize( $arr ) . $title . $T ), 0, 3 );

        ?>
<fieldset class="m_fileldset" >
<legend class="m_legend">
<label style="cursor:pointer">
<?=$title?>
<?php
        if ( $arr )
        {

            ?>
<button class="m_button" onclick="
var target = document.getElementById('<?=$temp_name?>');
if (target.style.display != 'none' )
{
  target.style.display = 'none';
  this.innerHTML='+';
}
else
{
  target.style.display = 'block';
  this.innerHTML='-';
}">-</button>
</label>
<?php
        }

        ?>
</legend>
<?php

        if ( $arr )
        {

            ?>
<pre id="<?=$temp_name?>" class="m_pre"><?php
            if ( 0 == $T )
            {
                self::_print_r( $arr );
            }
            else if ( 1 == $T )
            {
                self::_var_dump( $arr );
            }
            else if ( 2 == $T )
            {
                self::_var_export( $arr );
            }

            ?>
</pre>
<?php
        }

        ?>
</fieldset>
<?php
    }
    private static function _print_r( $arr )
    {
        echo htmlspecialchars( print_r ( $arr, true ) ) ;
    }
    private static function _var_dump( $arr )
    {
        var_dump( $arr );
    }
    private static function _var_export( $arr )
    {
        echo htmlspecialchars( var_export ( $arr, true ) ) ;
    }



    public static function pr( $arr, $title = '', $T = 0 ) {
        self::print_r($arr, $title, $T);
    }

    public static function pre( $arr, $title = '', $T = 0 ) {
        self::print_r($arr, $title, $T);
        exit;
    }



  public static function myfpr2($uid, $var, $title = '', $nameSpace = 'default') {
            self::myfpr($uid, $var, $title, $nameSpace);
    }


    protected static    $arrPrConf    = array();
    /**
     * 把变量用 print_r 输出到文件中,避免干扰到页面正常输出
     *
     *
     */
    public static function fpr($var, $title = '', $nameSpace = 'default') {

        ob_start();

        echo    sprintf("\n======== %s ========\n", $title);

        print_r($var);

        echo    sprintf("\n-------- -------- -------- --------\n");

        $content    = ob_get_contents();

        ob_end_clean();

        $int    = 0;

        if (strlen($content)) {

            $strFileName    = dirname(__FILE__) . '/../multilog/fpr.' . $nameSpace;

            if (isset(self::$arrPrConf['pr_init']) && 1 === self::$arrPrConf['pr_init']) {

                $int    = file_put_contents($strFileName, $content, FILE_APPEND);

            } else {
                
                if (file_exists($strFileName)) {
                    unlink($strFileName);
                }
                
                $int    = file_put_contents($strFileName, $content);

                self::$arrPrConf['pr_init']    = 1;
                
            }

        }

        return    $int;

    }

    public static function pr8( $arr, $title = '', $T = 0 ) {
        $arr    = self::toUtf8Deep($arr);
        self::print_r($arr, $title, $T);
    }

    public static function pre8( $arr, $title = '', $T = 0 ) {
        $arr    = self::toUtf8Deep($arr);
        
        self::print_r($arr, $title, $T);
        exit;
    }

    public static function toUtf8Deep($mixed) {

        $ret        = $mixed;

        if (is_array($mixed)) {

            foreach ($mixed as $key => $val) {
                $ret[$key]    = self::toUtf8Deep($val);
            }

        } else {

            $ret    = iconv("GB2312", "UTF-8", $ret);
        }

        return    $ret;

    }
}
?>

 

 

 

posted @ 2013-03-22 17:17  顺水的船  阅读(1003)  评论(0)    收藏  举报