通过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 相关文章推荐
复杂检索数据并分页显示的处理方法
Oct 09 PHP
PHP4和PHP5性能测试和对比 测试代码与环境
Aug 17 PHP
PHP has encountered an Access Violation at 7C94BD02解决方法
Aug 24 PHP
php中判断字符串是否全是中文或含有中文的实现代码
Sep 16 PHP
PHP的SQL注入过程分析
Jan 06 PHP
PHP简单实现“相关文章推荐”功能的方法
Jul 19 PHP
PHP程序员必须清楚的问题汇总
Dec 18 PHP
php实现统计网站在线人数的方法
May 12 PHP
PHP文件操作之获取目录下文件与计算相对路径的方法
Jan 08 PHP
深入理解Yii2.0乐观锁与悲观锁的原理与使用
Jul 26 PHP
弹出模态框modal的实现方法及实例
Sep 19 PHP
CI框架网页缓存简单用法分析
Dec 26 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_pconnect()函数使用介绍
2012/02/05 PHP
基于PHP遍历数组的方法汇总分析
2013/06/08 PHP
php上传文件问题汇总
2015/01/30 PHP
Yii控制器中操作视图js的方法
2016/07/04 PHP
漂亮的thinkphp 跳转页封装示例
2019/10/16 PHP
用JavaScript脚本实现Web页面信息交互
2006/10/11 Javascript
Javascript计算时间差的函数分享
2011/07/04 Javascript
js隐藏与显示回到顶部按钮及window.onscroll事件应用
2013/01/25 Javascript
javascript实现文本域写入字符时限定字数
2014/02/12 Javascript
通过url查找a元素并点击
2014/04/09 Javascript
JavaScript数组函数unshift、shift、pop、push使用实例
2014/08/27 Javascript
jQuery 实现侧边浮动导航菜单效果
2014/12/26 Javascript
Jquery幻灯片特效代码分享--打开页面随机选择切换方式(3)
2015/08/15 Javascript
JS原型、原型链深入理解
2016/02/27 Javascript
基于BootStrap Metronic开发框架经验小结【二】列表分页处理和插件JSTree的使用
2016/05/12 Javascript
jQuery文件上传控件 Uploadify 详解
2016/06/20 Javascript
JS简单实现禁止访问某个页面的方法
2016/09/13 Javascript
完美解决jQuery fancybox ie 无法显示关闭按钮的问题
2016/11/29 Javascript
DropDownList实现可输入可选择(两种版本可选)
2016/12/07 Javascript
详解vue-cli 本地开发mock数据使用方法
2018/05/29 Javascript
详解vue 自定义marquee无缝滚动组件
2019/04/09 Javascript
详解如何探测小程序返回到webview页面
2019/05/14 Javascript
js实现鼠标滑动到某个div禁止滚动
2020/09/17 Javascript
nuxt 每个页面head标签内容设置方式
2020/11/05 Javascript
合并百度影音的离线数据( with python 2.3)
2015/08/04 Python
Ruby元编程基础学习笔记整理
2016/07/02 Python
python操作小程序云数据库实现简单的增删改查功能
2019/06/06 Python
pytorch的batch normalize使用详解
2020/01/15 Python
Win10下配置tensorflow-gpu的详细教程(无VS2015/2017)
2020/07/14 Python
通俗易懂了解Python装饰器原理
2020/09/17 Python
CSS3教程(8):CSS3透明度指南
2009/04/02 HTML / CSS
HTML5中外部浏览器唤起微信分享
2020/01/02 HTML / CSS
THE OUTNET美国官网:国际设计师品牌折扣网站
2017/03/07 全球购物
秘书专业自荐信范文
2013/12/26 职场文书
教师四风对照检查材料思想汇报
2014/09/17 职场文书
2015年质量管理工作总结范文
2015/05/18 职场文书