通过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 相关文章推荐
用IE远程创建Mysql数据库的简易程序
Oct 09 PHP
PHP+MYSQL的文章管理系统(一)
Oct 09 PHP
linux下使用ThinkPHP需要注意大小写导致的问题
Aug 02 PHP
php中可能用来加密字符串的函数[base64_encode、urlencode、sha1]
Jan 16 PHP
PHP中使用break跳出多重循环代码实例
Jan 21 PHP
服务器上配置PHP运行环境教程
Feb 12 PHP
php使用cookie实现记住用户名和密码实现代码
Apr 27 PHP
PHP+MySQL存储数据常见中文乱码问题小结
Jun 13 PHP
php生成与读取excel文件
Oct 14 PHP
php处理抢购类功能的高并发请求
Feb 08 PHP
PHP生成随机数的方法总结
Mar 01 PHP
PHP 实现缩略图
Mar 09 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自动生成月历代码
2006/10/09 PHP
PHP 和 MySQL 基础教程(一)
2006/10/09 PHP
基于pear auth实现登录验证
2010/02/26 PHP
将php数组输出html表格的方法
2014/02/24 PHP
PHP list() 将数组中的值赋给变量的简单实例
2016/06/13 PHP
一个刚完成的layout(拖动流畅,不受iframe影响)
2007/08/17 Javascript
jquery学习笔记二 实现可编辑的表格
2010/04/09 Javascript
JavaScript对象、属性、事件手册集合方便查询
2010/07/04 Javascript
js关闭模态窗口刷新父页面或跳转页面
2012/12/13 Javascript
document.createElement()用法及注意事项(ff下不兼容)
2013/03/13 Javascript
javascript表单验证大全
2015/08/12 Javascript
深入浅析AngularJS中的module(模块)
2016/01/04 Javascript
Jquery鼠标放上去显示全名的实现方法
2017/02/06 Javascript
随机生成10个不重复的0-100的数字(实例讲解)
2017/08/16 Javascript
Vue编写多地区选择组件
2017/08/21 Javascript
JS基于设计模式中的单例模式(Singleton)实现封装对数据增删改查功能
2018/02/06 Javascript
JS中判断某个字符串是否包含另一个字符串的五种方法
2018/05/03 Javascript
详解VUE-地区选择器(V-Distpicker)组件使用心得
2018/05/07 Javascript
javascript将非数值转换为数值
2018/09/13 Javascript
angularJs自定义过滤器实现手机号信息隐藏的方法
2018/10/08 Javascript
微信小程序canvas.drawImage完全显示图片问题的解决
2018/11/30 Javascript
PostgreSQL Node.js实现函数计算方法示例
2019/02/12 Javascript
在 Vue 应用中使用 Netlify 表单功能的方法详解
2019/06/03 Javascript
vue radio单选框,获取当前项(每一项)的value值操作
2020/09/10 Javascript
Python 2.7.x 和 3.x 版本的重要区别小结
2014/11/28 Python
世界领先的高品质定制产品平台:Zazzle
2017/07/23 全球购物
美国最大的船只买卖在线市场:Boat Trader
2018/08/04 全球购物
大一学生假期实习的自我评价
2013/10/12 职场文书
医院护士的求职信
2014/01/03 职场文书
初中考试作弊检讨书
2014/02/01 职场文书
俄语专业毕业生求职信
2014/07/12 职场文书
个人作风建设自查报告
2014/10/22 职场文书
12.4全国法制宣传日活动总结
2014/11/01 职场文书
教师节主题班会方案
2015/08/17 职场文书
vue backtop组件的实现完整代码
2021/04/07 Vue.js
python使用PySimpleGUI设置进度条及控件使用
2021/06/10 Python