How to install XHProf on CentOS 6.3 for a dev machine:
# yum install php-pear # pecl config-set preferred_state beta # pecl install xhprof
If this does not work, upgrade PEAR. Related discussion: https://bugs.php.net/bug.php?id=58650
# cat > /etc/php.d/xhprof.ini
extension=xhprof.so
xhprof.output_dir = /tmp
^C
Now XHProf is installed and should show up when you type $ php -i | grep -i xhprof
Caveat: I might have installed some "hidden" prerequisites prior to installing xhprof, add them here if you find them (and remove this note).
We will now continue to install the GUI:
Add:
php_value auto_prepend_file /usr/share/pear/xhprof_external/header.php php_value auto_append_file /usr/share/pear/xhprof_external/footer.php
to /etc/httpd/conf.d/monitor.conf
# mkdir -p /usr/share/pear/xhprof_external # cat > /usr/share/pear/xhprof_external/header.php <?php if(extension_loaded('xhprof')) { xhprof_enable(XHPROF_FLAGS_CPU + XHPROF_FLAGS_MEMORY); require dirname(__FILE__).'/../xhprof_lib/display/xhprof.php'; } ^C # cat > /usr/share/pear/xhprof_external/footer.php <?php if(extension_loaded('xhprof')) { $profiler_namespace = 'ninja'; $xhprof_data = xhprof_disable(); $xhprof_runs = new XHProfRuns_Default(); $run_id = $xhprof_runs->save_run($xhprof_data, $profiler_namespace); if((!isset($_SERVER['HTTP_X_REQUESTED_WITH']) || strtolower($_SERVER['HTTP_X_REQUESTED_WITH']) !== 'xmlhttprequest') && 0 !== strpos($_SERVER['REQUEST_URI'], "/api") && false === strpos($_SERVER['HTTP_USER_AGENT'], 'python-requests')) { $profiler_url = sprintf('/xhprof/?source=%s&run=%s', $profiler_namespace, $run_id); $js = '<script>$(document).ready(function() { $(".headercontent ul:first") .append("<li id=\"xhprof_loaded\"><a href=\"'.$profiler_url.'\">Profiler output</a></li>"); });</script>'; echo $js; } } ^C # ln -s /usr/share/pear/xhprof_html /var/www/html/xhprof # mkdir -p /tmp/xhprof # chgrp apache /tmp/xhprof # service httpd restart