zoukankan      html  css  js  c++  java
  • FirePHP调试指南

    综述

    引用《PHP 调试技术手册》

    如果Web前端调试来说,Firebug是不可或缺好的调试工具,它能够监控网络、监测css、js错误,查看DOM节点,查看当前页面获得了几个A,等等功能。
    PHP同样也有配合firebug这么好用的工具,那就是FirePHP。(官方网站: http://www.firephp.org )
    FirePHP是一个附加在 firebug 上面的插件,用来调试PHP,操作过程很简单。在PHP端使用FirePHP提供的PHP日志记录类库来输出调试信息, 在浏览器端使用 Firebug + FirePHP 来接收查看输出的调试信息,这些调试信息会直接附加在返回的HTTP头信息里,这些信息不会被浏览器直接显示,只会在firephp 获取显示,有效的达到了调试和页面显示都不冲突的问题。(必须使用firefox浏览器)

    FirePHP调试原理

    通过服务端库FirePHPCore,和基于Firebug的插件FirePHP,PHP脚本可以通过HTTP请求头发送调试信息到浏览器。一旦你设置开启FirePHP,你可以在Firebug的控制台获得PHP脚本警告和错误,就感觉像直接调试JavaScript一样。

    安装

    首先需要安装Firefox,Firebug,FirePHP,建议使用最新版本FireFox 19.0.2,Firebug 1.11.2,FirePHP 0.7.1;

    其次下载服务器端库FirePHPCore:

    >wget http://www.firephp.org/DownloadRelease/FirePHPLibrary-FirePHPCore-0.3.2
    >file FirePHPLibrary-FirePHPCore-0.3.2 
    FirePHPLibrary-FirePHPCore-0.3.2: Zip archive data, at least v2.0 to extract
    >unzip FirePHPLibrary-FirePHPCore-0.3.2 
    ~/public_html/FirePHPCore-0.3.2>ls-R
    .:
    CHANGELOG  CREDITS  FirePHPCore-0.3.2  FirePHPLibrary-FirePHPCore-0.3.2  lib  README  test
     
    ./FirePHPCore-0.3.2:
    CHANGELOG  CREDITS  lib  README
     
    ./FirePHPCore-0.3.2/lib:
    FirePHPCore
     
    ./FirePHPCore-0.3.2/lib/FirePHPCore: # 对于PHP5+只需用于fb.php,FirePHP.class.php这两个文件
    fb.php  fb.php4  FirePHP.class.php  FirePHP.class.php4  LICENSE
     
    ./lib:
    FirePHPCore
     
    ./lib/FirePHPCore:
    fb.php  fb.php4  FirePHP.class.php  FirePHP.class.php4  LICENSE
     
    ./test: # 自已在解压缩目录下创建test目录用于测试FirePHP
    firephptest.php

    测试

    接下来 在test目录下创建测试用例firephptest.php:

    <?php
     
    require_once '../lib/FirePHPCore/fb.php';
     
    $firephp = FirePHP::getInstance(true);
     
    $var = array(1, 2, 'hello world', array(1));
    fb($var);
    fb($var, 'Label');

    最后在浏览器访问www.domain.com/~zhanhailiang/FirePHPCore-0.3.2/test/firephptest.php,可以在控制台上看到如下输出:

    http://itravel.smartcom.cc/~zhanhailiang/FirePHPCore-0.3.2/test/firephptest.php
    
    log: array('0'=>'1', '1'=>'2', '2'=> ... )
    log: Label: array('0'=>'1', '1'=>'2', '2'=> ... )

    通过Firebug网络面板可以看到HTTP请求的响应头详情:

    Connection  close
    Content-Encoding    gzip
    Content-Type    text/html; charset=utf-8
    Date    Fri, 29 Mar 2013 01:39:32 GMT
    Server  nginx
    Transfer-Encoding   chunked
    X-Wf-1-1-1-1    142|[{"Type":"LOG","File":"\/home\/zhanhailiang\/public_html\/FirePHPCore-0.3.2\/test\/firephptest.php","Line":"8"},["1","2","hello world",["1"]]]|
    X-Wf-1-1-1-2    158|[{"Type":"LOG","Label":"Label","File":"\/home\/zhanhailiang\/public_html\/FirePHPCore-0.3.2\/test\/firephptest.php","Line":"9"},["1","2","hello world",["1"]]]|
    X-Wf-1-Index    2
    X-Wf-1-Plugin-1 http://meta.firephp.org/Wildfire/Plugin/FirePHP/Library-FirePHPCore/0.3
    X-Wf-1-Structure-1  http://meta.firephp.org/Wildfire/Structure/FirePHP/FirebugConsole/0.1
    X-Wf-Protocol-1 http://meta.wildfirehq.org/Protocol/JsonStream/0.2

    通过分析FirePHP开启和关闭选项,可以发现当FirePHP关闭时响应信息里是不存在X-Wf-***。通过分析HTTP请求可以发现,

    当关闭FirePHP,HTTP请求头为:

    Accept  text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8
    Accept-Encoding gzip, deflate
    Accept-Language zh-cn,zh;q=0.8,en-us;q=0.5,en;q=0.3
    Cache-Control   max-age=0
    Connection  keep-alive
    Host    itravel.smartcom.cc
    User-Agent  Mozilla/5.0 (Windows NT 6.1; rv:19.0) Gecko/20100101 Firefox/19.0

    当开启FirePHP时,HTTP请求头为:

    Accept  text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8
    Accept-Encoding gzip, deflate
    Accept-Language zh-cn,zh;q=0.8,en-us;q=0.5,en;q=0.3
    Cache-Control   no-cache
    Connection  keep-alive
    Host    itravel.smartcom.cc
    Pragma  no-cache
    User-Agent  Mozilla/5.0 (Windows NT 6.1; rv:19.0) Gecko/20100101 Firefox/19.0 FirePHP/0.7.1x-insight   activate

    可以看出开启FirePHP时HTTP请求头区别在于:

    Pragma  no-cache
    User-Agent  Mozilla/5.0 (Windows NT 6.1; rv:19.0) Gecko/20100101 Firefox/19.0 FirePHP/0.7.1
    x-insight   activate

    通过查看FirePHP.class.php源码可以看到FirePHPCore通过UA来判断客户端是否安装FirePHP:

        /**
         * Check if FirePHP is installed on client
         *
         * @return boolean
         */
        public function detectClientExtension()
        {
            // Check if FirePHP is installed on client via User-Agent header
            if (@preg_match_all('/\sFirePHP\/([\.\d]*)\s?/si',$this->getUserAgent(),$m) &&
               version_compare($m[1][0],'0.0.6','>=')) {
                return true;
            } else
            // Check if FirePHP is installed on client via X-FirePHP-Version header
            if (@preg_match_all('/^([\.\d]*)$/si',$this->getRequestHeader("X-FirePHP-Version"),$m) &&
               version_compare($m[1][0],'0.0.6','>=')) {
                return true;
            }
            return false;
        }

    那么x-insight请求头有没有用呢?查看FirePHPCore里的所有代码,并没有看到x-insight的用途,所以我猜测x-insight并没有实际用途。为了验证我的猜测,使用FF扩展HTTPRequester工具模拟构造一个只有UA:FirePHP,而没有x-insight请求头,测试下是否响应头和包含x-insight请求的响应头是否一致:

    GET http://itravel.smartcom.cc/~zhanhailiang/FirePHPCore-0.3.2/test/firephptest.php
    User-Agent: Mozilla/5.0 (Windows NT 6.1; rv:19.0) Gecko/20100101 Firefox/19.0 FirePHP/0.7.1
    
     -- response --
    200 OK
    Server:  nginx
    Date:  Fri, 29 Mar 2013 02:34:54 GMT
    Content-Type:  text/html; charset=utf-8
    Transfer-Encoding:  chunked
    Connection:  close
    X-Wf-1-1-1-1:  142|[{"Type":"LOG","File":"\/home\/zhanhailiang\/public_html\/FirePHPCore-0.3.2\/test\/firephptest.php","Line":"8"},["1","2","hello world",["1"]]]|
    X-Wf-Protocol-1:  http://meta.wildfirehq.org/Protocol/JsonStream/0.2
    X-Wf-1-Plugin-1:  http://meta.firephp.org/Wildfire/Plugin/FirePHP/Library-FirePHPCore/0.3
    X-Wf-1-Structure-1:  http://meta.firephp.org/Wildfire/Structure/FirePHP/FirebugConsole/0.1
    X-Wf-1-1-1-2:  158|[{"Type":"LOG","Label":"Label","File":"\/home\/zhanhailiang\/public_html\/FirePHPCore-0.3.2\/test\/firephptest.php","Line":"9"},["1","2","hello world",["1"]]]|
    X-Wf-1-Index:  2
    Content-Encoding:  gzip

    事实证明,我的猜测是对的。

    这样,就使用FirePHP调试PHP。

    FirePHP应用场景

    • 普通变量监测
    • 调用栈监测
    • 监测抛出异常
    • 组显示信息

    详情请见《PHP 调试技术手册》

    扩展阅读

  • 相关阅读:
    <转>性能测试浅谈
    Linux内存机制以及手动释放swap和内存
    Jmeter(十二)_打印时间戳
    Jmeter(二十一)_脚本参数化与内存溢出的解决方案
    Jmeter(五)_函数
    爬虫利器_you-get
    Jmeter(九)_获取JDBC响应做接口关联
    JMeter(十三)-代理服务器录制脚本
    JMeter(十)-正则表达式关联
    JMeter(十四)-自动生成测试报告
  • 原文地址:https://www.cnblogs.com/xinyuyuanm/p/2988761.html
Copyright © 2011-2022 走看看