В моїй попередній статті розглядалися можливості профайлера РНР кода XHprof від веб розробників Facebook-а, а саме піднімалися питання встановлення, налаштування і використання.
Поставлена задача налаштує профайлер для універсального використання в вигляді:
/mysite/page?debug
В нас це вийшло. Тому у даній статті розглядається ця проблема.
І так:
0) визначаємо девелопмент-сервер на якому ми хочемо профілювати і робити аналіз веб-додатків.
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<br />\nmemory_get_usage = {$cur} kb<br />\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_domain>/xhprof_html/index.php?run=%s&source=%s', $run_id, $profiler_namespace); print '<script type="text/javascript">window.location.href=\''. $profiler_url .'\';</script>'; } } if (isset($_GET['debug'])) { my_xhprof_enable(); register_shutdown_function('my_xhprof_disable'); }