通过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 相关文章推荐
ftp类(myftp.php)
Oct 09 PHP
require(),include(),require_once()和include_once()的异同
Jan 02 PHP
PHPMailer 中文使用说明小结
Jan 22 PHP
基于Snoopy的PHP近似完美获取网站编码的代码
Oct 23 PHP
iis下php mail函数的sendmail配置方法(官方推荐)
Apr 25 PHP
Smarty中调用FCKeditor的方法
Oct 27 PHP
php实现excel中rank函数功能的方法
Jan 20 PHP
thinkPHP模型初始化实例分析
Dec 03 PHP
PHP上传文件参考配置大文件上传
Dec 16 PHP
php禁用函数设置及查看方法详解
Jul 25 PHP
详解thinkphp中的volist标签
Jan 15 PHP
PHP实现的多维数组排序算法分析
Feb 10 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与php MySQL 之间的关系
2009/07/17 PHP
优化PHP代码技巧的小结
2013/06/02 PHP
php时区转换转换函数
2014/01/07 PHP
PHP中遇到的时区问题解决方法
2015/07/23 PHP
php单链表实现代码分享
2016/07/04 PHP
PHP不使用内置函数实现字符串转整型的方法示例
2017/07/03 PHP
laravel批量生成假数据的方法
2019/10/09 PHP
特殊字符、常规符号及其代码对照表
2006/06/26 Javascript
js 浮动层菜单收藏
2009/01/16 Javascript
js 发个判断字符串是否为符合标准的函数
2009/04/27 Javascript
zShowBox 图片放大展示jquery版 兼容性
2011/09/24 Javascript
javaScript 删除字符串空格多种方法小结
2012/10/24 Javascript
javascript实现将文件保存到本地方法汇总
2015/07/26 Javascript
jQuery Validate表单验证插件的基本使用方法及功能拓展
2017/01/04 Javascript
zTree实现节点修改的实时刷新功能
2017/03/20 Javascript
浅谈 Vue 项目优化的方法
2017/12/16 Javascript
移动端图片上传旋转、压缩问题的方法
2018/10/16 Javascript
vue头部导航动态点击处理方法
2018/11/02 Javascript
vue封装一个简单的div框选时间的组件的方法
2019/01/06 Javascript
js实现简易计算器小功能
2020/11/18 Javascript
[01:59]游戏“zheng”当时试玩会
2019/08/21 DOTA
django之常用命令详解
2016/06/30 Python
解决pyqt中ui编译成窗体.py中文乱码的问题
2016/12/23 Python
《Python学习手册》学习总结
2018/01/17 Python
python 将字符串转换成字典dict的各种方式总结
2018/03/23 Python
用python写一个定时提醒程序的实现代码
2019/07/22 Python
让IE支持CSS3的不完全兼容方案
2014/09/19 HTML / CSS
如何使用css3实现一个类在线直播的队列动画的示例代码
2020/06/17 HTML / CSS
世界上最好的威士忌和烈性酒购买网站:The Whisky Exchange
2016/11/20 全球购物
泰国汽车、火车和轮渡票预订网站:Bus Online Ticket
2017/09/09 全球购物
戴尔美国官方折扣店:Dell Outlet
2018/02/13 全球购物
英文版网络工程师求职信
2013/10/28 职场文书
爱岗敬业演讲稿
2014/05/05 职场文书
工作会议方案
2014/05/21 职场文书
云冈石窟导游词
2015/02/04 职场文书
2015年员工工作总结范文
2015/04/08 职场文书