Установка xhprof и Graphviz на Windows

В этой статье я расскажу как установить xhprof и Graphviz на Windows, какие ошибки возникают и как их устранить.

xhprof — php-расширение от facebook. Это иерархический профайлер, который позволяет собирать такую статистику как время выполнения каждой функции, использование памяти, время ожидания, количество вызовов.

Graphviz — пакет утилит по автоматической визуализации графов, заданных в виде описания на языке DOT, а также дополнительных TUI и GUI программ, виджетов и библиотек, используемых при разработке программного обеспечения для визуализации структурированных данных.

Установка xhprof

Сначала скачаем расширение xhprof под Windows.

Вам нужно определить какую версию вам скачивать. На выбор есть две версии PHP 5.3 и 5.4, с Thread Safety или Non Thread Safety (nts).

Чтобы определить какая версия у вас установлена, посмотрите вывод функции phpinfo(). Если в строке «Thread Safety» установлено enabled, значит вам нужно скачивать расширение без nts, и наоборот, если установлено disabled, то скачивать нужно с nts.

Расширение xhprof вам нужно скопировать в директорию ext, где установлен PHP.

В php.ini нужно добавить:
[xhprof]
extension=xhprof_0.10.3_php53_vc9.dll
xhprof.output_dir="C:/temp/"

Значение extension у вас может быть другим, смотря какую версию xhprof вы скачали.
Путь «C:/temp/» взят для примера, у вас он может быть другим. Если вы не меняли путь, директория «temp» должна существовать.

Также нам нужно скачать PHP-файлы xhprof и скопировать их в директорию, где расположены файлы сервера.

Перезапускаем Apache.

Установка Graphviz

Скачиваем zip-архив Graphviz стабильной версии, на момент написания статьи это 2.38 и распаковываем в «C:/graphviz/».

Тестируем xhprof

В xhprof уже есть файл для тестирования, его можно найти по этому пути:
xhprof/examples/sample.php

Открываем URL http://localhost/xhprof/examples/sample.php и если мы видим отладочные данные, то всё хорошо, xhprof работает.

Тестируем Graphviz

 В отладочных данных мы видим такую строчку:
Assuming you have set up the http based UI for XHProf at some address, 
you can view run at http:///index.php?run=545937b66b2b1&source=xhprof_foo

Чтобы сгенерировать граф, вам нужно перейти по URL:
http://localhost/xhprof/xhprof_html/callgraph.php?run=545937b66b2b1&source=xhprof_foo
с параметрами run и source взятых из отладочных данных.

Вероятнее всего вы увидите такое сообщение:
Warning: proc_open() [function.proc-open]: CreateProcess failed, error code - 0 in W:\domains\localhost\xhprof\xhprof_lib\utils\callgraph_utils.php on line 113
failed to execute cmd " dot -Tpng"

Оно говорит о том, что командный интерпретатор не может найти файл dot.exe.

Пофиксим этот баг. Откройте файл xhprof/xhprof_lib/utils/callgraph_utils.php, перейдите на строку 110 и замените:
$cmd = " dot -T".$type;

на
$cmd = " C:/graphviz/dot -T".$type;

и в строке 112 замените:
$process = proc_open($cmd, $descriptorspec, $pipes, "/tmp", array());

на
$process = proc_open($cmd, $descriptorspec, $pipes, "C:/temp/", array());

После всех этих действий, если вы все сделали правильно, вы увидите сгенерированный граф.