通过chrome浏览器控制台(Console)进行PHP Debug的方法


Posted in PHP onOctober 19, 2016

 效果如下图

通过chrome浏览器控制台(Console)进行PHP Debug的方法

PHP Console是一款可以帮助用户模拟真实的PHP网站运行环境,帮助用户使用Chrome插件对PHP代码进行调试的Chrome插件,用户在Chrome中安装了PHP Console插件以后,可以在自己的PHP项目中引用PHP Console项目代码,并输出调试信息,让PHP Console插件进行捕获,这样在网站发布成功以后,还可以使用PHP Console插件进行输出调试信息到Chrome浏览器中,用户可以通过PHP 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;?>');
    <?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的输出控制缓冲函数来将数据保存下来,最后一次全部输出。

PHP 相关文章推荐
第十节--抽象方法和抽象类
Nov 16 PHP
用PHP控制用户的浏览器--ob*函数的使用说明
Mar 16 PHP
PHP动态创建Web站点的方法
Aug 14 PHP
PHP处理会话函数大总结
Aug 05 PHP
CI框架常用函数封装实例
Nov 21 PHP
PHP经典实用正则表达式小结
May 04 PHP
php微信公众号开发之简答题
Oct 20 PHP
PHP序列化的四种实现方法与横向对比
Nov 29 PHP
PHP使用PDO操作sqlite数据库应用案例
Mar 07 PHP
Yii框架函数简单用法分析
Sep 09 PHP
浅谈laravel-admin的sortable和orderby使用问题
Oct 03 PHP
PHP实现微信公众号验证Token的示例代码
Dec 16 PHP
php禁用cookie后session设置方法分析
Oct 19 #PHP
php无限级分类实现方法分析
Oct 19 #PHP
php简单截取字符串代码示例
Oct 19 #PHP
Nginx环境下PHP flush失效的解决方法
Oct 19 #PHP
php封装的验证码工具类完整实例
Oct 19 #PHP
php封装的图片(缩略图)处理类完整实例
Oct 19 #PHP
php封装的表单验证类完整实例
Oct 19 #PHP
You might like
用PHP编写和读取XML的几种方式
2013/01/12 PHP
Yii获取当前url和域名的方法
2015/06/08 PHP
php中错误处理操作实例分析
2019/08/23 PHP
用YUI做了个标签浏览效果
2007/02/20 Javascript
[全兼容哦]--实用、简洁、炫酷的页面转入效果loing
2007/05/07 Javascript
javascript 打开页面window.location和window.open的区别
2010/03/17 Javascript
nodejs 后缀名判断限制代码
2011/03/31 NodeJs
利用JavaScript实现新闻滚动效果(实例代码)
2013/11/27 Javascript
javascript创建createXmlHttpRequest对象示例代码
2014/02/10 Javascript
JS获取iframe中marginHeight和marginWidth属性的方法
2015/04/01 Javascript
jquery采用oop模式class类的使用示例
2016/01/22 Javascript
非常实用的js验证框架实现源码 附原理方法
2016/06/08 Javascript
基于Vuejs框架实现翻页组件
2020/06/29 Javascript
Angular自定义组件实现数据双向数据绑定的实例
2017/12/11 Javascript
Linux Centos7.2下安装nodejs&amp;npm配置全局路径的教程
2018/05/15 NodeJs
三分钟学会用ES7中的Async/Await进行异步编程
2018/06/14 Javascript
微信小程序Page中data数据操作和函数调用方法
2019/05/08 Javascript
Node.js从字符串生成文件流的实现方法
2019/08/18 Javascript
jquery实现烟花效果(面向对象)
2020/03/10 jQuery
基于javascript实现日历功能原理及代码实例
2020/05/07 Javascript
Linux下多个Python版本安装教程
2018/08/15 Python
Python下简易的单例模式详解
2019/04/08 Python
浅谈tensorflow 中的图片读取和裁剪方式
2020/06/30 Python
django restframework serializer 增加自定义字段操作
2020/07/15 Python
阻止移动设备(手机、pad)浏览器双击放大网页的方法
2014/06/03 HTML / CSS
Skip Hop官网:好莱坞宝宝挚爱品牌
2018/06/17 全球购物
高三自我鉴定怎么写
2013/10/19 职场文书
设计部经理的岗位职责
2013/11/16 职场文书
湖南省召开党的群众路线教育实践活动总结大会报告
2014/10/21 职场文书
党的群众路线学习笔记
2014/11/06 职场文书
2014学生会工作总结报告
2014/12/02 职场文书
神农溪导游词
2015/02/11 职场文书
2015国际残疾人日活动总结
2015/03/24 职场文书
2016年“七一建党节”广播稿
2015/12/18 职场文书
介绍信应该怎么开?
2019/04/03 职场文书
【DOTA2】半决赛强强对话~ PSG LGD vs EHOME - DPC 2022 CN REGIONAL FINALS WINTER
2022/04/02 DOTA