通过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 用checkbox一次性删除多条记录的方法
Feb 23 PHP
php控制linux服务器常用功能 关机 重启 开新站点等
Sep 05 PHP
PHP中3种生成XML文件方法的速度效率比较
Oct 06 PHP
基于flush()不能按顺序输出时的解决办法
Jun 29 PHP
php输出指定时间以前时间格式的方法
Mar 21 PHP
PHP安全上传图片的方法
Mar 21 PHP
[原创]php逐行读取txt文件写入数组的方法
Jul 02 PHP
php解决和避免form表单重复提交的几种方法
Aug 31 PHP
php实现压缩合并js的方法【附demo源码下载】
Sep 22 PHP
laravel框架的安装与路由实例分析
Oct 11 PHP
在TP5数据库中四个字段实现无限分类的示例
Oct 18 PHP
php反序列化长度变化尾部字符串逃逸(0CTF-2016-piapiapia)
Feb 15 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&amp;&amp;mysql)四
2006/10/09 PHP
PHP入门速成教程
2007/03/19 PHP
解析php中两种缩放图片的函数,为图片添加水印
2013/06/14 PHP
PHP学习记录之数组函数
2018/06/01 PHP
laravel与thinkphp之间的区别与优缺点
2021/03/02 PHP
动手学习无线电
2021/03/10 无线电
原来Jquery.load的方法可以一直load下去
2011/03/28 Javascript
js实现点击后将文字或图片复制到剪贴板的方法
2014/08/04 Javascript
javascript中replace( )方法的使用
2015/04/24 Javascript
jQuery预加载图片常用方法
2015/06/15 Javascript
jQuery插件pagination实现无刷新分页
2016/05/21 Javascript
React 子组件向父组件传值的方法
2017/07/24 Javascript
jQuery实现左右两个列表框的内容相互移动功能示例
2019/01/27 jQuery
JS中的算法与数据结构之链表(Linked-list)实例详解
2019/08/20 Javascript
jQuery与原生JavaScript选择HTML元素集合用法对比分析
2019/11/26 jQuery
JavaScript 几种循环方式以及模块化的总结
2020/09/03 Javascript
Vue实现手机号、验证码登录(60s禁用倒计时)
2020/12/19 Vue.js
[49:27]2018DOTA2亚洲邀请赛 4.4 淘汰赛 TNC vs VG 第一场
2018/04/05 DOTA
视觉直观感受若干常用排序算法
2017/04/13 Python
Django实现全文检索的方法(支持中文)
2018/05/14 Python
python求解数组中两个字符串的最小距离
2018/09/27 Python
python实现创建新列表和新字典,并使元素及键值对全部变成小写
2019/01/15 Python
利用Python+阿里云实现DDNS动态域名解析的方法
2019/04/01 Python
python django生成迁移文件的实例
2019/08/31 Python
python实现的按要求生成手机号功能示例
2019/10/08 Python
Django Admin后台添加数据库视图过程解析
2020/04/01 Python
python 实现端口扫描工具
2020/12/18 Python
python 基于PYMYSQL使用MYSQL数据库
2020/12/24 Python
利用CSS3实现文字折纸效果实例代码
2018/07/10 HTML / CSS
HTML5 Video/Audio播放本地文件示例介绍
2013/11/18 HTML / CSS
见习期自我鉴定范文
2014/03/19 职场文书
《充气雨衣》教学反思
2014/04/07 职场文书
2015年语文教学工作总结
2015/05/25 职场文书
公司员工管理制度
2015/08/04 职场文书
Python入门学习之类的相关知识总结
2021/05/25 Python
quickjs 封装 JavaScript 沙箱详情
2021/11/02 Javascript