您好,欢迎访问一九零五行业门户网

通过浏览器的Console进行PHP调试

当我们的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($data) { if (is_array($data) || is_object($data)) { echo("<script>console.log('.json_encode($data).');</script>);          }          else          {              echo(<script>console.log('.$data.');</script>);          }      }
其实质上就是在页面里加入了一段javascript的脚本,利用 console.log();函数输出信息到控制台,如上方法打印出来都是字符串形式,如果将单引号去掉,php的数组和对象将以js对象的方式打印出来,即
echo(<script>console.log(.json_encode($data).);</script>);
究竟使用哪一种看你喜欢的方式了。
如上就是最简单的实现方式了,但这么做有一点不太好,就是输出的很凌乱,如果你在不同的位置都调用了该函数,那么在页面的各个位置都将插入一段<script>,虽说js在页面几乎任何位置都可以,但我们可以有更好的办法,将所有数据统一到一处输出:
<?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;?>');               注意如果使用 【相关教程推荐】
1. php编程从入门到精通全套视频教程
2. php从入门到精通 
3. bootstrap教程
其它类似信息

推荐信息