通过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 str_replace的替换漏洞
Mar 15 PHP
php单例模式实现(对象只被创建一次)
Dec 05 PHP
解析php中获取url与物理路径的总结
Jun 21 PHP
PHP使用正则表达式清除超链接文本
Nov 12 PHP
php画图实例
Nov 05 PHP
微信access_token的获取开发示例
Apr 16 PHP
ThinkPHP安装和设置
Jul 27 PHP
调试WordPress中定时任务的相关PHP脚本示例
Dec 10 PHP
PHP解压tar.gz格式文件的方法
Feb 14 PHP
Zend Framework教程之连接数据库并执行增删查的方法(附demo源码下载)
Mar 21 PHP
Yii2单元测试用法示例
Nov 12 PHP
Laravel5.4框架使用socialite实现github登录的方法
Mar 20 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的邮件群发系统phplist配置方法详细总结
2016/03/30 PHP
浅谈ThinkPHP5.0版本和ThinkPHP3.2版本的区别
2017/06/17 PHP
thinkphp分页集成实例
2017/07/24 PHP
laravel-admin 在列表页添加自定义按钮的例子
2019/09/30 PHP
浏览器常用高宽的jquery插件
2011/02/24 Javascript
jquery1.10给新增元素绑定事件的方法
2014/03/06 Javascript
JavaScript 学习笔记之变量及其作用域
2015/01/14 Javascript
如何用js实现鼠标向上滚动时浮动导航
2016/07/18 Javascript
jQuery使用animate实现ul列表项相互飘动效果示例
2016/09/16 Javascript
input框中的name和id的区别
2016/11/16 Javascript
jQuery无刷新上传之uploadify简单代码
2017/01/17 Javascript
微信小程序实现图片预加载组件
2017/01/18 Javascript
vue mixins组件复用的几种方式(小结)
2017/09/06 Javascript
Javascript实现运算符重载详解
2018/04/07 Javascript
jQuery中的类名选择器(.class)用法简单示例
2018/05/14 jQuery
JS实现深度优先搜索求解两点间最短路径
2019/01/17 Javascript
使用jquery的cookie实现登录页记住用户名和密码的方法
2019/03/13 jQuery
vue 实现Web端的定位功能 获取经纬度
2019/08/08 Javascript
JS Array.from()将伪数组转换成数组的方法示例
2020/03/23 Javascript
JS eval代码快速解密实例解析
2020/04/23 Javascript
JavaScript代码简化技巧实例解析
2020/09/09 Javascript
[02:36]DOTA2亚洲邀请赛小组赛精彩集锦:EE凭借法力虚空拿下4杀
2017/03/30 DOTA
彻底搞懂Python字符编码
2018/01/23 Python
python实现数据写入excel表格
2018/03/25 Python
python读取视频流提取视频帧的两种方法
2020/10/22 Python
Python正则表达式和元字符详解
2018/11/29 Python
如何使用css3实现一个类在线直播的队列动画的示例代码
2020/06/17 HTML / CSS
Prototype如何更新局部页面
2013/03/03 面试题
高分子材料与工程专业个人求职信
2013/12/15 职场文书
工商管理专业职业生涯规划
2014/01/01 职场文书
上级检查欢迎词
2014/01/18 职场文书
酒吧创业计划书
2014/01/18 职场文书
2014年领导班子工作总结
2014/12/11 职场文书
护士医德考评自我评价
2015/03/03 职场文书
保送生自荐信
2015/03/06 职场文书
企业承诺书格式范文
2015/04/28 职场文书