В моей предыдущей статье рассматривались возможности профайлера PHP кода XHprof от веб разработчиков Facebook-а, а именно затрагивались вопросы установки, настройки и использования.
Поставлена задача настроить профайлер для универсального использования в виде:
/mysite/page?debug
То есть, чтобы для каждой страницы можно было использовать профайлер одним универсальным способом.
У нас это получилось. Вот данная статья и раскрывает тему сисек.
Итак:
0) определяем девелопмент-сервер, на котором мы хотим профилировать и делать анализ веб-приложений
1) создаем домен
2) в корне домена создаем папку xhprof_log.
3) в корне домена создаем файл xhprof.php с следующим содержанием:
function my_xhprof_enable() {
if (extension_loaded('xhprof')) {
switch ($_GET['debug']) {
case 'simple':
define('DEBUG_MICROTIME_START', microtime(1));
break;
case 'all':
xhprof_enable(XHPROF_FLAGS_CPU + XHPROF_FLAGS_MEMORY);
break;
case 'cpu':
xhprof_enable(XHPROF_FLAGS_CPU);
break;
case 'memory':
xhprof_enable(XHPROF_FLAGS_MEMORY);
break;
case 'time':
default:
xhprof_enable();
}
}
}
function my_xhprof_disable() {
if ($_GET['debug'] == 'simple') {
$time = number_format(microtime(1) - DEBUG_MICROTIME_START, 4);
$cur = number_format(memory_get_usage() / 1024, 3);
$peak = number_format(memory_get_peak_usage() / 1024, 3);
print "\ntime = {$time} seconds
\nmemory_get_usage = {$cur} kb
\nmemory_get_peak_usage = {$peak} kb";
}
elseif (extension_loaded('xhprof')) {
include_once dirname(__FILE__) . '/xhprof_lib/utils/xhprof_lib.php';
include_once dirname(__FILE__) . '/xhprof_lib/utils/xhprof_runs.php';
$profiler_namespace = isset($_GET['namespace']) ? $_GET['namespace'] : $_SERVER['SERVER_NAME'];
$xhprof_data = xhprof_disable();
$xhprof_runs = new XHProfRuns_Default();
$run_id = $xhprof_runs->save_run($xhprof_data, $profiler_namespace);
$profiler_url = sprintf('/xhprof_html/index.php?run=%s&source=%s', $run_id, $profiler_namespace);
print '';
}
}
if (isset($_GET['debug'])) {
my_xhprof_enable();
register_shutdown_function('my_xhprof_disable');
}



