FireBug のコンソールにデバッグログを吐き出す

ikedaFirebug, FirePHP, PHP, ZendFramework, デバッグ

池田です。

開発時に PHP でデバッグするときは手軽に変数の中身を確認できる print_r や var_dump が便利です。これを syslog に流したりするわけですが、以前から Firefox の Firebug コンソールにデバッグ情報を表示する ZendFramework のクラスが気になっていたので試してみました。

ZendFramework は PEAR のように各クラス群がそれ自体独立したライブラリのようなものなので、今回は標準のフレームワーク環境は作らず、単純に require して使います。
また Firefox には、Firebug とは別に FirePHP というプラグインをインストールしておきます。接続から「コンソール」を有効にして許可するサイトを追加しておいて下さい。

そして、おもむろに下のようなクラスを作ります。ZendFramework のパスを通しておいてください。
Zend/Log/Writer/Firebug.php が FirePHP へのログ送出を管理する肝のクラスです。
詳細は親切な日本語ドキュメントを見てください。

<?php
require_once 'Zend/Log.php';
require_once 'Zend/Log/Writer/Firebug.php';
require_once 'Zend/Controller/Request/Http.php';
require_once 'Zend/Controller/Response/Http.php';
require_once 'Zend/Wildfire/Channel/HttpHeaders.php';

class debug
{
    public function __construct()
    {
    }

    static public function log($variables)
    {
        $writer = new Zend_Log_Writer_Firebug();
        $logger = new Zend_Log($writer);

        $request = new Zend_Controller_Request_Http();
        $response = new Zend_Controller_Response_Http();
        $channel = Zend_Wildfire_Channel_HttpHeaders::getInstance();
        $channel->setRequest($request);
        $channel->setResponse($response);

        ob_start();
        $logger->debug("Debug: " . print_r($variables, true));
        $channel->flush();

        $response->sendHeaders();
         $writer->shutdown();
    }
}

最後にあなたのアプリケーションへデバッグしたい変数とともに挿入すると Firebug のコンソール上に値が表示されます。

debug::log($values);

結果は以下の通り。

ログレベルに応じて表示スタイルを変更できるのでいろいろ試してみてください。
例えば警告レベルなら 26 行目を以下のようにします。

$logger->warn("Warn: " . print_r($variables, true));

ikedaFirebug, FirePHP, PHP, ZendFramework, デバッグ

Posted by ikeda