PHPのプロファイラとよく使う設定

March 3, 2015

便利な設定をまとめてメモ。

1. Chrome Logger

Chrome拡張は以下からインストール。

ライブラリファイルは以下から取得。

設定は後述。

2. XHProf

Install

http://pecl.php.net/package/xhprofからtar.gzをダウンロード。

yum -y install gcc php php-devel # コンパイルに必要
wget http://pecl.php.net/get/xhprof-0.9.4.tgz
tar xvfz xhprof-0.9.4.tgz
cd xhprof-0.9.4/extension/
phpize
make
make test
make install

TEST後にレポートを送るか言われるが一旦無視

Do you want to send this report now? [Yns]: n

インストール後、php.iniを開いてエクステンション登録

extension=xhprof.so

その後apache/php-fpmを再起動。

deploy

解凍したtar.gz内にxhprof_libおよびxhprof_htmlがあるので参照できるドキュメントルートに配備。

3. auto_prepend_file

apacheのconfigかhtaccessに以下を記載。PHPを途中でexit()した場合auto prependされないのだが後述のregister_shutdown_functionを使えば以上終了する場合でも実行してくれる(らしい)。

php_value auto_prepend_file /path/to/my_prepend.php

その後my_prepend.phpを以下のように記述。

<?php
include '/path/to/ChromePhp.php';

// 接続元IPアドレス偽装
#$_SERVER['REMOTE_ADDR'] = 'xxx.xxx.xxx.xxx';

#$_SERVER['HTTP_USER_AGENT'] = 'hogehoge user agent';

// パラメータの強制変更(デバッグ用など)
#$_POST['hoge'] = 'foo';
#$_GET['aaa'] = 'bbb';

// xhprof
function __xhprof_finish() {
  $xhprof_lib = '/path/to/xhprof_lib';
  require_once($xhprof_lib . '/utils/xhprof_lib.php');
  require_once($xhprof_lib . '/utils/xhprof_runs.php');

  $app_name = 'myapp';
  $result = xhprof_disable();
  $runs = new XHProfRuns_Default();
  $run_id = $runs->save_run($result, $app_name);
  $url = 'http://localhost/?run='.$run_id . '&source='.$app_name;
  #error_log($url); // 計測結果の確認URLをerror_logに出力
}

xhprof_enable();
register_shutdown_function('__xhprof_finish');

Chrome Loggerは以下のように使う。

ChromePhp::log('Hello console!');
ChromePhp::log($_SERVER);
ChromePhp::warn('something went wrong!');

参考



Recent blog posts



(c) Copyright 2023 Kotaro Yoshimatsu