通过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 相关文章推荐
example2.php
Oct 09 PHP
php array_pop()数组函数将数组最后一个单元弹出(出栈)
Jul 12 PHP
ThinkPHP3.1新特性之对Ajax的支持更加完善
Jun 19 PHP
CodeIgniter框架数据库事务处理的设计缺陷和解决方案
Jul 25 PHP
PHP中浮点数计算比较及取整不准确的解决方法
Jan 09 PHP
基于PHP+jQuery+MySql实现红蓝(顶踩)投票代码
Aug 25 PHP
php根据用户语言跳转相应网页
Nov 04 PHP
PHP模糊查询的实现方法(推荐)
Sep 06 PHP
PHP实现求解最长公共子串问题的方法
Nov 17 PHP
PHP addslashes()函数讲解
Feb 03 PHP
PHP架构及原理知识点详解
Dec 22 PHP
yii 框架实现按天,月,年,自定义时间段统计数据的方法分析
Apr 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将网址字符串转换成超链接(网址或email)
2010/05/25 PHP
深入探讨PHP中的内存管理问题
2011/08/31 PHP
PHP输出日历表代码实例
2015/03/27 PHP
php自动更新版权信息显示的方法
2015/06/19 PHP
PHP使用Curl实现模拟登录及抓取数据功能示例
2018/04/27 PHP
Laravel5.1 框架控制器基础用法实例分析
2020/01/04 PHP
Opacity.js
2007/01/22 Javascript
通过javascript的匿名函数来分析几段简单有趣的代码
2010/06/29 Javascript
简单js代码实现selece二级联动(推荐)
2014/02/18 Javascript
jQuery实现图片走马灯效果的原理分析
2016/01/16 Javascript
拥Bootstrap入怀——导航栏篇
2016/05/30 Javascript
Javascript基础_简单比较undefined和null 值
2016/06/14 Javascript
浅谈jQuery绑定事件会叠加的解决方法和心得总结
2016/10/26 Javascript
JavaScript中英文字符长度统计方法示例【按照中文占2个字符】
2017/01/17 Javascript
详解Angular的8个主要构造块
2017/06/20 Javascript
vue-cli中的webpack配置详解
2017/09/25 Javascript
vue项目常用组件和框架结构介绍
2017/12/24 Javascript
node 命令方式启动修改端口的方法
2018/05/12 Javascript
js字符串处理之绝妙的代码
2019/04/05 Javascript
bootstrap table插件动态加载表头
2019/07/19 Javascript
TypeScript中使用getElementXXX()的示例代码
2019/09/12 Javascript
jQuery 移除事件的方法
2020/06/20 jQuery
JavaScript实现HTML导航栏下拉菜单
2020/11/25 Javascript
python利用datetime模块计算时间差
2015/08/04 Python
常见的python正则用法实例讲解
2016/06/21 Python
python如何实现int函数的方法示例
2018/02/19 Python
英国高街品牌:Miss Selfridge(塞尔弗里奇小姐)
2016/09/21 全球购物
电脑饰品店的创业计划书
2014/01/21 职场文书
初三学习计划书范文
2014/04/30 职场文书
医学专业毕业生推荐信
2014/07/12 职场文书
大学生感恩父母演讲稿
2014/08/28 职场文书
安全月宣传标语
2014/10/07 职场文书
先进教育工作者事迹材料
2014/12/23 职场文书
追悼会悼词大全
2015/06/23 职场文书
百年校庆宣传标语口号
2015/12/26 职场文书
《小蝌蚪找妈妈》教学反思
2016/02/23 职场文书