通过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防注
Jan 15 PHP
深入php list()函数的详解
Jun 05 PHP
基于header的一些常用指令详解
Jun 06 PHP
用Zend Studio+PHPnow+Zend Debugger搭建PHP服务器调试环境步骤
Jan 19 PHP
php定义数组和使用示例(php数组的定义方法)
Mar 29 PHP
PHP curl使用实例
Jul 02 PHP
我整理的PHP 7.0主要新特性
Jan 07 PHP
Laravel框架实现超简单的分页效果示例
Feb 08 PHP
在PHP中输出JS语句以及乱码问题的解决方案
Feb 13 PHP
php适配器模式简单应用示例
Oct 23 PHP
Yii框架自定义数据库操作组件示例
Nov 11 PHP
php回调函数处理数组操作示例
Apr 13 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中extract()函数的妙用分析
2012/07/11 PHP
使用php 获取时间今天明天昨天时间戳的详解
2013/06/20 PHP
两级联动select刷新后其值保持不变的实现方法
2014/01/27 PHP
PHP使用mkdir创建多级目录的方法
2015/12/22 PHP
crontab无法执行php的解决方法
2016/01/25 PHP
简单JS代码压缩器
2006/10/12 Javascript
jQuery 学习 几种常用方法
2009/06/11 Javascript
ExtJs扩展之GroupPropertyGrid代码
2010/03/05 Javascript
window.open不被拦截的实现代码
2012/08/22 Javascript
基于JQuery实现的图片自动进行缩放和裁剪处理
2014/01/31 Javascript
jQuery中outerWidth()方法用法实例
2015/01/19 Javascript
jquery实现图片上传前本地预览功能
2016/05/10 Javascript
js 获取经纬度的实现方法
2016/06/20 Javascript
ES6概念 ymbol.for()方法
2016/12/25 Javascript
vue上传图片组件编写代码
2017/07/26 Javascript
Vue Cli与BootStrap结合实现表格分页功能
2017/08/18 Javascript
vue实现nav导航栏的方法
2017/12/13 Javascript
Angular动态绑定样式及改变UI框架样式的方法小结
2018/09/03 Javascript
Python读取ini文件、操作mysql、发送邮件实例
2015/01/01 Python
11个并不被常用但对开发非常有帮助的Python库
2015/03/31 Python
Python实现短网址ShortUrl的Hash运算实例讲解
2015/08/10 Python
Python日志模块logging基本用法分析
2018/08/23 Python
Python中正则表达式的用法总结
2019/02/22 Python
详解django实现自定义manage命令的扩展
2019/08/13 Python
Python 找出出现次数超过数组长度一半的元素实例
2020/05/11 Python
Python+OpenCV图像处理——图像二值化的实现
2020/10/24 Python
英国鞋类及配饰零售商:Kurt Geiger
2017/02/04 全球购物
医学生自荐信
2013/12/03 职场文书
同居协议书范本
2014/04/23 职场文书
银行转正自我鉴定
2014/09/29 职场文书
司法局2014法制宣传日活动总结
2014/11/01 职场文书
酒店人事专员岗位职责
2015/04/07 职场文书
党员反邪教心得体会
2016/01/15 职场文书
Python通用验证码识别OCR库ddddocr的安装使用教程
2022/07/07 Python
win11怎么消除图标小盾牌?win11消除图标小盾牌解决方法
2022/08/05 数码科技
Docker容器harbor私有仓库部署和管理
2022/08/05 Servers