Согласно man-странице PHP, существуют следующие параметры командной строки:
--zend-extension file
-z file Load Zend extension file
Это, вероятно, означает, что вы можете загружать xdebug как расширение Zend таким образом, загружая Xdebug только тогда, когда вам это действительно нужно, что в моем случае полезно, поскольку xdebug может серьезно замедлить модульные тесты Drupal, но мне может понадобиться отладить некоторые тесты.
Однако загрузка Xdebug таким образом, похоже, не работает.
Среда: MacOS 10.10, PHP 5.6.3-dev, Xdebug 2.2.5.
$> ls -l /usr/local/lib/php/extensions/debug-non-zts-20131226/xdebug.so
-rwxr-xr-x 1 root wheel 319276 Oct 24 13:45 /usr/local/lib/php/extensions/debug-non-zts-20131226/xdebug.so
$> grep xdebug /usr/local/etc/php/5.6/php.ini
zend_extension=/usr/local/lib/php/extensions/debug-non-zts-20131226/xdebug.so
$> php -v |grep -i xdebug
with Xdebug v2.2.5, Copyright (c) 2002-2014, by Derick Rethans
Так ясно, когда указано в php.ini
файл, xdebug загружается правильно. Когда я закомментирую строку xdebug,
> grep xdebug /usr/local/etc/php/5.6/php.ini
;zend_extension=/usr/local/lib/php/extensions/debug-non-zts-20131226/xdebug.so
Вы можете видеть, что он правильно не загружен:
> php -i|grep -i xdebug
>
Тем не менее, когда я пытаюсь использовать -z для загрузки расширения,
> php -z /usr/local/lib/php/extensions/debug-non-zts-20131226/xdebug.so -i|grep -i xdebug
>
И никакая функциональность Xdebug не включена.
Я не читал ничего, что упоминает, что это не работает, но это не так. Не удается загрузить xdebug через -z, но это не мешает мне написать скрипт для переключения zend_extension
строка в файле php.ini, это не совсем удобно.
Кто-нибудь может объяснить, почему это так?
У меня нет объяснения, почему он не работает с -z
аргумент, но попробуйте:
php -dzend_extension=/usr/local/lib/php/extensions/debug-non-zts-20131226/xdebug.so -f myscript.php
Затем вы можете создать ярлык для профилирования сценариев PHP на лету. Рассмотрим этот скрипт bash:
#!/bin/bash
php -dzend_extension=/path/to/xdebug.so -dxdebug.profiler_enable=1 -dxdebug.profiler_output_dir=$(pwd) $@
Затем вы можете профилировать сценарий с помощью ./xdebug -f script.php
предполагая xdebug
это имя вашего сценария.
Других решений пока нет …