通过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 相关文章推荐
php中文本数据翻页(留言本翻页)
Oct 09 PHP
php中设置多级目录session的问题
Aug 08 PHP
关于js和php对url编码的处理方法
Mar 04 PHP
php中隐形字符65279(utf-8的BOM头)问题
Aug 16 PHP
php使用date和strtotime函数输出指定日期的方法
Nov 14 PHP
php使用for语句输出三角形的方法
Jun 09 PHP
非常经典的PHP文件上传类分享
May 15 PHP
在Ubuntu 18.04上安装PHP 7.3 7.2和7.0的方法
Apr 09 PHP
微信公众平台开发教程②微信端分享功能图文详解
Apr 10 PHP
php数组和链表的区别总结
Sep 20 PHP
Laravel中Kafka的使用详解
Mar 24 PHP
PHP判断是否是json字符串
Apr 01 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 CLI模式下的多进程应用分析
2013/06/03 PHP
php基于PDO实现功能强大的MYSQL封装类实例
2017/02/27 PHP
PHP编程获取各个时间段具体时间的方法
2017/05/26 PHP
取得传值的函数
2006/10/27 Javascript
jquery实现叠层3D文字特效代码分享
2015/08/21 Javascript
jQuery实现美观的多级动画效果菜单代码
2015/09/06 Javascript
jquery层级选择器(匹配父元素下的子元素实现代码)
2016/09/05 Javascript
Angular获取手机验证码实现移动端登录注册功能
2017/05/17 Javascript
js实现随机数字字母验证码
2017/06/19 Javascript
微信小程序组件 marquee实例详解
2017/06/23 Javascript
关于js的三种使用方式(行内js、内部js、外部js)的程序代码
2018/05/05 Javascript
详解nodejs 开发企业微信第三方应用入门教程
2019/03/12 NodeJs
JavaScript使用百度ECharts插件绘制饼图操作示例
2019/11/26 Javascript
jQuery 函数实例分析【函数声明、函数表达式、匿名函数等】
2020/05/19 jQuery
react结合bootstrap实现评论功能
2020/05/30 Javascript
Python的randrange()方法使用教程
2015/05/15 Python
django通过ajax发起请求返回JSON格式数据的方法
2015/06/04 Python
django接入新浪微博OAuth的方法
2015/06/29 Python
Python 在字符串中加入变量的实例讲解
2018/05/02 Python
Python打包方法Pyinstaller的使用
2018/10/09 Python
python通过TimedRotatingFileHandler按时间切割日志
2019/07/17 Python
python实现udp传输图片功能
2020/03/20 Python
python利用递归方法实现求集合的幂集
2020/09/07 Python
scrapy redis配置文件setting参数详解
2020/11/18 Python
matplotlib事件处理基础(事件绑定、事件属性)
2021/02/03 Python
韩国三大免税店之一:THE GRAND 中文免税店
2016/07/21 全球购物
试用期转正鉴定评语
2014/01/27 职场文书
国贸专业自荐信范文
2014/03/02 职场文书
公司股权转让协议书
2014/04/12 职场文书
数据保密承诺书
2014/06/03 职场文书
农民工讨薪标语
2014/06/26 职场文书
厨师长岗位职责范本
2014/08/25 职场文书
党校学习心得体会范文
2014/09/09 职场文书
2014年村计划生育工作总结
2014/11/14 职场文书
关于成立领导小组的通知
2015/04/23 职场文书
《植树问题》教学反思
2016/03/03 职场文书