Xdebugは、PHPにデバッグ機能を実装するためのモジュールです。もともとPHPに は言語レベルでのデバッグ機能やプロファイラーが用意されておらず、モジュー ルをインストールする必要がありました。PHPでこの機能を実現するためのモ ジュールとして、以下のようなものがあります。
- Xdebug (http://xdebug.org/)
- DBG(http://dd.cron.ru/)
- Advanced PHP Debugger(http://pecl.php.net/package/apd)
今回はプロファイラーも内蔵し、最新版であるPHP 5.1にも対応したXdebugエク ステンションを使って、プロファイルを行う方法を説明します。
Xdebugのインストール
Xdebugは、以下のとおりインストールします。
1.モジュールの作成
XdebugはPECLの1つなので、Unixシステムの場合はpeclコマンドによりコンパイ ルして作成します。Windowsシステムの場合は、PHPのバージョン別にコンパイル されたモジュールをダウンロードすることが一番の近道です。
・Unixシステムの場合
pecl install xdebug-beta
あるいは
pear install xdebug-beta (peclコマンドが存在しない場合)
PECL4WIN(http://pecl4win.php.net/)より、コンパイルされたWindows版モ ジュールをダウンロード
2.PHPに組み込む
Xdebugのモジュールのファイルは、php.iniで記述されているextension_dirディ レクトリに保存します。 これをPHPに組み込むには、php.iniに以下の行を追加します。Xdebugモジュール の拡張子は、Windowsの場合は.dll、Unix系の場合は.soとなります。
・Unixシステムの場合
extension=xdebug.so
extension_ts=xdebug.dll
Webサーバーを再起動し、phpinfo()関数の出力にxdebugエクステンションの欄が 表示されたら、インストール成功です。(http://www.phppro.jp/phptips/sample/xdebug1.png)
Xdebugでプロファイリング
先ほどのphp.iniの後ろに、以下の行を追記します。
;プロファイリングを有効に
xdebug.profiler_enable = 1
;プロファイリング結果の出力ディレクトリ
xdebug.profiler_output_dir = "/path/to/output/directory"
もう一度Webサーバーを再起動して、PHPスクリプトを実行してみましょう。 出力ディレクトリに、cachegrind.out.から始まるファイル名が作成されたと思 います。これが、プロファイリングの結果ファイルです。
プロファイリング結果を確認する
このファイル形式は、WinCacheGrindというソフトウェアで視覚的に表示できま す。WinCacheGrind(http://sourceforge.net/projects/wincachegrind/)にア クセスし、ファイルをダウンロードします。セットアップを完了すると、 WinCacheGrindが起動します。
このソフトウェアは、KDEウィンドウマネージャにて提供されているKCacheGrind をWindows環境に移植したものです。よって、LinuxユーザーはKDE環境下 KCacheGrindを使っても読み込むことができます。
実際にサンプルのファイルのプロファイリング結果を読み込んだ結果が画面2(http://www.phppro.jp/phptips/sample/xdebug2.png)です。今回は詳しく説明しませんが、各処理について、どの程度の時間がかかって いるのか集計されます。たとえばこの結果では、require_once関数、DB-> connectメソッドなどに多くの時間が割かれていることが分かります。
なお、Xdebugには本来の機能であるデバッガも搭載されています。これについて は、またの機会に説明したいと思います。 処理が遅いなと思ったら、Xdebug+WinCacheGrindを使ってプロファイリングを 行ってみると良いでしょう。