通过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 相关文章推荐
PHP5 安装方法
Jan 15 PHP
php强制下载类型的实现代码
Apr 21 PHP
Eclipse中php插件安装及Xdebug配置的使用详解
Apr 25 PHP
深入php define()函数以及defined()函数的用法详解
Jun 05 PHP
兼容各大浏览器带关闭按钮的漂浮多组图片广告代码
Jun 05 PHP
PHP采集静态页面并把页面css,img,js保存的方法
Dec 23 PHP
PHP数据库操作Helper类完整实例
May 11 PHP
PHP中字符串长度的截取用法示例
Jan 12 PHP
php7安装mongoDB扩展的方法分析
Aug 02 PHP
PHP实现广度优先搜索算法(BFS,Broad First Search)详解
Sep 16 PHP
Yii框架分页技术实例分析
Aug 30 PHP
基于PHP实现用户登录注册功能的详细教程
Aug 04 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 购物车的例子
2009/05/04 PHP
PHP实现上传图片到 zimg 服务器
2016/10/19 PHP
ThinkPHP5+UEditor图片上传到阿里云对象存储OSS功能示例
2019/08/05 PHP
Javascript中的var_dump函数实现代码
2009/09/07 Javascript
javascript getElementsByClassName 和js取地址栏参数
2010/01/02 Javascript
js的逻辑运算符 ||
2010/05/31 Javascript
用jquery与css打造个性化的单选框和复选框
2010/10/20 Javascript
$(&quot;&quot;).click与onclick的区别示例介绍
2014/09/25 Javascript
浅谈JavaScript实现面向对象中的类
2014/12/09 Javascript
ECMAScript6中Set/WeakSet详解
2015/06/12 Javascript
JavaScript中字面量与函数的基本使用知识
2015/10/20 Javascript
EditPlus中的正则表达式 实战(2)
2016/12/15 Javascript
jQuery简单实现MD5加密的方法
2017/03/03 Javascript
利用jQuery实现一个简单的表格上下翻页效果
2017/03/14 Javascript
基于Vue实现tab栏切换内容不断实时刷新数据功能
2017/04/13 Javascript
Cpage.js给组件绑定事件的实现代码
2017/08/31 Javascript
nodejs基础之常用工具模块util用法分析
2018/12/26 NodeJs
JS PHP字符串截取函数实现原理解析
2020/08/29 Javascript
JavaScript 如何在浏览器中使用摄像头
2020/12/02 Javascript
深度剖析使用python抓取网页正文的源码
2014/06/11 Python
Python数据类型详解(一)字符串
2016/05/08 Python
python3.7 使用pymssql往sqlserver插入数据的方法
2019/07/08 Python
小 200 行 Python 代码制作一个换脸程序
2020/05/12 Python
phonegap常用事件总结(必看篇)
2017/03/31 HTML / CSS
日本PLST在线商店:日本时尚杂志刊载的人气服装
2016/12/10 全球购物
使用索引(Index)有哪些需要考虑的因素
2016/10/19 面试题
自我鉴定思想方面
2013/10/07 职场文书
学校司机岗位职责
2013/11/14 职场文书
内刊编辑求职自荐书范文
2014/02/19 职场文书
白酒代理协议书范本
2014/10/26 职场文书
自查自纠整改报告
2014/11/06 职场文书
2015年团支部年度工作总结
2015/05/27 职场文书
邹越演讲观后感
2015/06/15 职场文书
2016五四青年节活动总结范文
2016/04/06 职场文书
数据库的高级查询六:表连接查询:外连接(左外连接,右外连接,UNION关键字,连接中ON与WHERE的不同)
2021/04/05 MySQL
《金肉人》米特&《航海王》阿鹤声优松岛实因胰脏癌去世 享寿81岁
2022/04/13 日漫