FirePHP — php版的firebug

jackxiang 2008-7-3 14:34 | |
在friendfeed上找到的了这个名为FirePHP的Firefox插件,是基于Firebug的一个扩展,可以用来在Firebug的console中方便的输出php的调试信息又不影响php程序的正常运行。实际上这东东出来的时间也不短了,只是以前没试用过,现在把玩了一会也挺有趣:
Http://www.firephp.org/

FirePHP的php调试信息都是通过在http头里面添加X-FirePHP-Data信息串来标识,不会直接输出到页面上,这样也就避免对php正常输出产生影响。可以输出的调试信息类型如下:

    * 正常的调试字符串,类型有LOG,INFO,WARN,ERROR几种
    * 数组array
    * object
    * 异常Exception
    * SQL返回数据
    * http header
    通过使用Firephp你可以在Firebug的Console栏中看到要调试的数据,而不影响php程序的正常执行,所以说,这东西对于Ajax开发是很有帮助的!
如何使用:http://www.blankyao.cn/blog/php-firephp-ajax.html




<?php
require('FirePHPCore/fb.php');
//echo 'FirePHP测试';
//echo "hello the world!";
fb('Hello World'); /* Defaults to FirePHP::LOG */

fb('Log message'  ,FirePHP::LOG);
fb('Info message' ,FirePHP::INFO);
fb('Warn message' ,FirePHP::WARN);
fb('Error message',FirePHP::ERROR);

fb('Message with label','Label',FirePHP::LOG);

fb(array('key1'=>'val1',
'key2'=>array(array('v1','v2'),'v3')),
'TestArray',FirePHP::LOG);

function test($Arg1) {
throw new Exception('Test Exception');
}
try {
test(array('Hello'=>'World'));
} catch(Exception $e) {
/* Log exception including stack trace & variables */
fb($e);
}

fb(array('2 SQL queries took 0.06 seconds',array(
array('SQL Statement','Time','Result'),
array('SELECT * FROM Foo','0.02',array('row1','row2')),
array('SELECT * FROM Bar','0.04',array('row1','row2'))
)),FirePHP::TABLE);

?>


firebug firecookie ietab httpfox



下面一起来看下Firephp的使用方法。
第一步:安装
     1.如果你的FireFox没有Firebug这个插件的话,首先要安装Firebug这个插件,可以到其官方地址去下载:http://www.getfirebug.com/
2.安装Firephp,官方地址:http://www.firephp.org/
3.下载Firephp的php文件。并放在合适的目录。
第二步:
     包含fb.php,根据你放置的Firephp文件的地址来包含fb.php,比如:
    require(’FirePHPCore/fb.php’)
第三步:
     打开输出缓冲(因为Firephp主要用到的是header函数),有如下三种方法:
         在程序的前面加上ob_start()
        修改php.ini 将output_buffering设为1或者on
        修改apache的设置,在配置文件中加上php_flag output_buffering on
第四步:开始调试:
     可以调试输出以下数据类型:
         字符串,可以分为LOG,INFO,WARN,ERROR四种
        Object或者Array
        通过sql查询返回的数据
        抛出的异常信息
        服务器返回的信息(不输出在console中,而是NET中
如果你感觉还不错的话,可以安装后运行以下程序看下结果:

$var = array('a'=>'pizza', 'b'=>'cookies', 'c'=>'celery');
fb($var);
fb($var, "An array");
fb($var, FirePHP::WARN);
fb($var, FirePHP::INFO);
fb($var, 'An array with an Error type', FirePHP::ERROR);


你也可以使用FirePHP来跟踪你程序的执行情况:通过使用FirePHP::TRACE常量,你可以在 fb被调用的地方查看行数、类名和方法名

function hello() {
  fb('Hello World!', FirePHP::TRACE);
}
function greet() {
  hello();
}
greet();

产生的输出如下:

这个跟踪功能可以完美的调试更复杂的代码,让你精确的知道你的方法是在哪里被调用的。
当然,别忘了你需要在你代码发布之前移除你的调试语句。

参考:http://blog.csdn.net/leijuly/archive/2009/05/31/4227613.aspx

自己测试了下,是Ok的,以后就可以用它来调试PHP变量的哇,测试代码如下:

firephp的Consol输出结果如下:
http://test3.qq.com/firephp_test3.php
2 SQL queries took 0.06 seconds
SQL Statement   Time   Result
SELECT * FROM Foo   0.02   array('0'=>' row1 ', '1'=>' row2 ')
SELECT * FROM Bar   0.04   array('0'=>' row1 ', '1'=>' row2 ')

自己试了下也是Ok的,如下:

name
jack  lixu
echo  xxd

当firefox升级到firefox6后,这个firephp和firebug匹配上有些问题,只能开启一次,再刷新后控制台就给屏蔽了,点再开启也不行,最后再次升级了firebug插件才Ok,这点要注意。



以上的输出截图,注意table和log,以及info是很适用的输出模型:
点击在新窗口中浏览此图片


特别注意,如出现:
其中某个包含文件中如,password.php,最后两行,vi能看到一行空输出,91行:
90 ?>
91
这儿有一行空输出,一般是看不见的。
这儿有空格输出,于是出现了报错:
Fatal error: Uncaught exception 'Exception' with message 'Headers already sent in /data/home/jackxiang/public_html/pms_proj/trunk/php/lib/password.php on line 92. Cannot send log data to FirePHP. You must have Output Buffering enabled via ob_start() or output_buffering ini directive.' in /data/home/admin/libs/FirePHPCore/FirePHP.class.php on line 1178

这儿得用到前面的:
第三步:
     打开输出缓冲(因为Firephp主要用到的是header函数),有如下三种方法:
         在程序的前面加上ob_start()
        修改php.ini 将output_buffering设为1或者on
        修改apache的设置,在配置文件中加上php_flag output_buffering on


其实就是在password.php中输出前加入,ob_start();  #开启缓冲,然后在打firephp变量前加入:
ob_clean();  #关闭缓冲
分别如下:password.php,
89 ob_start();
90 ?>
91

在打印变量处如,BuildProcess.php中:


于是出现如下结果:


其实这个为何要这样加,或者就是头一个文件里里加的原因请看:http://wyllife.blog.163.com/blog/static/41163901201153113512946/

作者:jackxiang@向东博客 专注WEB应用 构架之美 --- 构架之美,在于尽态极妍 | 应用之美,在于药到病除
地址:https://jackxiang.com/post/1117/
版权所有。转载时必须以链接形式注明作者和原始出处及本声明!


最后编辑: jackxiang 编辑于2011-9-21 21:28
评论列表
发表评论

昵称

网址

电邮

打开HTML 打开UBB 打开表情 隐藏 记住我 [登入] [注册]