Установка xhprof и Graphviz на Windows
В этой статье я расскажу как установить xhprof и Graphviz на Windows, какие ошибки возникают и как их устранить.
xhprof — php-расширение от facebook. Это иерархический профайлер, который позволяет собирать такую статистику как время выполнения каждой функции, использование памяти, время ожидания, количество вызовов.
Graphviz — пакет утилит по автоматической визуализации графов, заданных в виде описания на языке DOT, а также дополнительных TUI и GUI программ, виджетов и библиотек, используемых при разработке программного обеспечения для визуализации структурированных данных.
Вам нужно определить какую версию вам скачивать. На выбор есть две версии PHP 5.3 и 5.4, с Thread Safety или Non Thread Safety (nts).
Чтобы определить какая версия у вас установлена, посмотрите вывод функции phpinfo(). Если в строке «Thread Safety» установлено enabled, значит вам нужно скачивать расширение без nts, и наоборот, если установлено disabled, то скачивать нужно с nts.
Расширение xhprof вам нужно скопировать в директорию ext, где установлен PHP.
В php.ini нужно добавить:
Перезапускаем Apache.
xhprof/examples/sample.php
Открываем URL http://localhost/xhprof/examples/sample.php и если мы видим отладочные данные, то всё хорошо, xhprof работает.
http://localhost/xhprof/xhprof_html/callgraph.php?run=545937b66b2b1&source=xhprof_foo
с параметрами run и source взятых из отладочных данных.
Вероятнее всего вы увидите такое сообщение:
Пофиксим этот баг. Откройте файл xhprof/xhprof_lib/utils/callgraph_utils.php, перейдите на строку 110 и замените:
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» должна существовать.
Перезапускаем 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());
После всех этих действий, если вы все сделали правильно, вы увидите сгенерированный граф.