通过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 和 XML: 使用expat函数(二)
Oct 09 PHP
php 用checkbox一次性删除多条记录的方法
Feb 23 PHP
php smarty 二级分类代码和模版循环例子
Jun 01 PHP
深入理解php的MySQL连接类
Jun 07 PHP
PHP基础知识介绍
Sep 17 PHP
php实现监听事件
Nov 06 PHP
codeigniter使用技巧批量插入数据实例方法分享
Dec 31 PHP
使用CodeIgniter的类库做图片上传
Jun 12 PHP
PHP中的一些常用函数收集
May 26 PHP
PHP简单检测网址是否能够正常打开的方法
Sep 04 PHP
highchart数据源纵轴json内的值必须是int(详解)
Feb 20 PHP
PHP微信模板消息操作示例
Jun 29 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中die(),exit(),return的区别
2013/06/20 PHP
PHP获取本周第一天和最后一天示例代码
2014/02/24 PHP
php中最简单的字符串匹配算法
2014/12/16 PHP
PHP脚本监控Nginx 502错误并自动重启php-fpm
2015/05/13 PHP
PHP 7.0新增加的特性介绍
2017/06/08 PHP
php+redis实现商城秒杀功能
2020/11/19 PHP
php框架CI(codeigniter)自动加载与自主创建对象操作实例分析
2020/06/06 PHP
Javascript 刷新全集常用代码
2009/11/22 Javascript
JQUERY1.6 使用方法四 检测浏览器
2011/11/23 Javascript
如何编写高质量JS代码
2014/12/28 Javascript
jQuery使用prepend()方法在元素前添加内容用法实例
2015/03/26 Javascript
Bootstrap3制作自己的导航栏
2016/05/12 Javascript
js改变html的原有内容实现方法
2016/10/05 Javascript
Vue.js组件tree实现无限级树形菜单
2016/12/02 Javascript
laydate.js日期时间选择插件
2017/01/04 Javascript
JS装饰器函数用法总结
2018/04/21 Javascript
微信小程序实现跑马灯效果完整代码(附效果图)
2018/05/30 Javascript
elementUI Tree 树形控件的官方使用文档
2019/04/25 Javascript
Express 配置HTML页面访问的实现
2020/11/01 Javascript
Python学习_几种存取xls/xlsx文件的方法总结
2018/05/03 Python
Python使用jsonpath-rw模块处理Json对象操作示例
2018/07/31 Python
pycharm运行和调试不显示结果的解决方法
2018/11/30 Python
对python PLT中的image和skimage处理图片方法详解
2019/01/10 Python
详解pandas删除缺失数据(pd.dropna()方法)
2019/06/25 Python
python3爬虫中多线程进行解锁操作实例
2020/11/25 Python
让IE6支持css3,让 IE7、IE8 都支持CSS3
2011/10/09 HTML / CSS
css3 transform 3d 使用css3创建动态3d立方体(html5实践)
2013/01/06 HTML / CSS
TCP/IP的分层模型
2013/10/27 面试题
应聘文员自荐信范文
2014/03/11 职场文书
商业计算机应用专业自荐书
2014/06/09 职场文书
爱心捐书活动总结
2014/07/05 职场文书
党员干部群众路线个人整改措施
2014/09/18 职场文书
少先队中队工作总结
2015/08/14 职场文书
2019暑假学生安全口号
2019/06/27 职场文书
导游词之河北邯郸
2019/09/12 职场文书
JavaScript组合继承详解
2021/11/07 Javascript