通过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.ini中文版(2)
Oct 09 PHP
JavaScript创建命名空间的5种写法
Jun 24 PHP
PHP静态文件生成类实例
Nov 29 PHP
PHP获取youku视频真实flv文件地址的方法
Dec 23 PHP
php使用PDO方法详解
Dec 27 PHP
php上传中文文件名乱码问题处理方案
Feb 03 PHP
php接口数据加密、解密、验证签名
Mar 12 PHP
php计算税后工资的方法
Jul 28 PHP
YII使用url组件美化管理的方法
Dec 28 PHP
PHP编程计算两个时间段是否有交集的实现方法(不算边界重叠)
May 30 PHP
浅谈PHP中如何实现Hook机制
Nov 14 PHP
PDO::setAttribute讲解
Jan 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+Mysql+jQuery查询和列表框选择操作实例讲解
2015/10/22 PHP
phplist及phpmailer(组合使用)通过gmail发送邮件的配置方法
2016/03/30 PHP
PHP创建/删除/复制文件夹、文件
2016/05/03 PHP
jquery 表格分页等操作实现代码(pagedown,pageup)
2010/04/11 Javascript
JS判断对象是否存在的10种方法总结
2013/12/23 Javascript
jQuery中:gt选择器用法实例
2014/12/29 Javascript
javascript+css3 实现动态按钮菜单特效
2016/02/06 Javascript
详解js中的apply与call的用法
2016/07/30 Javascript
JS动态的把左边列表添加到右边的实现代码(可上下移动)
2016/11/17 Javascript
谈谈JavaScript数组常用方法总结
2017/01/24 Javascript
AngularJS自定义指令之复制指令实现方法
2017/05/18 Javascript
nodejs接入阿里大鱼短信验证码的方法
2017/07/10 NodeJs
详谈for循环里面的break和continue语句
2017/07/20 Javascript
微信小程序动态增加按钮组件
2018/09/14 Javascript
express+vue+mongodb+session 实现注册登录功能
2018/12/06 Javascript
[01:06:18]DOTA2-DPC中国联赛 正赛 Phoenix vs Dynasty BO3 第二场 1月26日
2021/03/11 DOTA
Python lambda和Python def区别分析
2014/11/30 Python
Python实现的密码强度检测器示例
2017/08/23 Python
Python栈算法的实现与简单应用示例
2017/11/01 Python
Python使用pandas处理CSV文件的实例讲解
2018/06/22 Python
python 随机生成10位数密码的实现代码
2019/06/27 Python
Python全栈之列表数据类型详解
2019/10/01 Python
python绘制随机网络图形示例
2019/11/21 Python
关于tensorflow softmax函数用法解析
2020/06/30 Python
Python绘图之柱形图绘制详解
2020/07/28 Python
python与c语言的语法有哪些不一样的
2020/09/13 Python
英国首屈一指的票务公司:See Tickets
2019/05/11 全球购物
美国在线肉类和海鲜配送:Crowd Cow
2020/10/02 全球购物
财务部出纳岗位职责
2013/12/22 职场文书
大学学生会竞选演讲稿
2014/04/25 职场文书
2014年教师节讲话稿5篇
2014/09/10 职场文书
初中家长评语大全
2014/12/26 职场文书
房地产销售主管岗位职责
2015/02/13 职场文书
php字符串倒叙
2021/04/01 PHP
详解Flutter网络请求Dio库的使用及封装
2022/04/14 Java/Android
鲲鹏 CentOS 7 安装Python3.7
2022/05/11 Servers