当前位置: 首页 > 工具软件 > PHP Debug Bar > 使用案例 >

利用浏览器控制台(Console)进行PHP Debug

邵凯定
2023-12-01

当我们的PHP程序Debug时,比较常用的方式是将变量的信息打印到浏览器中,例如这样:

<?php  
echo '<pre>';  
print_r($bar);  
echo '</pre>';  
exit;  

可是直接打印出来有可能会干扰你的页面,打乱布局,影响作为Api返回的数据等问题。这时我们可以采取将调试信息输出到文件的方式,如下是最简单的例子:

error_log(print_r($bar, true));
可是这种方式用来记录日志还合适,用到调试时终究还是不太方便。此时我们可以利用现代浏览器的控制台,比如Chrome Console(Win快捷键 Ctrl+Shift+J),将内容输出到Console里,就可以解决这个问题了。

现在已经有一些这样的工具了,比如说 PHP-Console 或者Chrome Logger ,前者针对PHP,后者支持多种服务端语言,使用方式都是先安装一个Chrome扩展,然后提供服务端的库供调用。实现方式大致是利用Session,Cookies等来传递数据。

如上是比较完善的解决方式,都提供了丰富的功能。但如果只是想要一个简单的,可用的,不用安装扩展程序的方式来解决这个问题,那么可以这么来做:

复制代码
<?php
function console_log(KaTeX parse error: Expected '}', got 'EOF' at end of input: … if (is_array(data) || is_object(KaTeX parse error: Expected '}', got 'EOF' at end of input: …'".json_encode(data)."’);");
}
else
{
echo(“");
}
}
复制代码
其实质上就是在页面里加入了一段javascript的脚本,利用 console.log();函数输出信息到控制台,如上方法打印出来都是字符串形式,如果将单引号去掉,PHP的数组和对象将以JS对象的方式打印出来,即

echo(“");
究竟使用哪一种看你喜欢的方式了。

如上就是最简单的实现方式了,但这么做有一点不太好,就是输出的很凌乱,如果你在不同的位置都调用了该函数,那么在页面的各个位置都将插入一段

复制代码
<?php
//注册一个shutdown函数,如果不这么做的话记得在程序最后echo Console_log::fetch_output();
register_shutdown_function(‘my_shutdown’);

function my_shutdown()  
{  
    echo Console_log::fetch_output();  
}  
  
class Console_log {  
    private static $output = '';  
    static function log($data)  
    {  
        if (is_array($data) || is_object($data))  
        {  
            $data = json_encode($data);  
        }  
        ob_start();  
        ?>  
        <?php if (self::$output === ''):?>  
        <script>  
        <?php endif;?>  
        console.log('<?=$data;?>');  
        <?php  
        self::$output .= ob_get_contents();  
        ob_end_clean();  
    }  
    static function fetch_output()  
    {  
        if (self::$output !== '')  
        {  
            self::$output .= '</script>';  
        }  
        return self::$output;  
    }  
}  

复制代码
注意如果使用<?=来代替<?php echo ,需要在php.ini中开启Short_open_tag=On。这段代码就是利用php的输出控制缓冲函数来将数据保存下来,最后一次全部输出。

 类似资料: