Xdebug на macOS 10.13 с PHP 7
Итак, macOS High Sierra 10.13 теперь поставляется с PHP 7.1. При настройке Apache я также создал новый /etc/php.ini
из файла /etc/php.ini.default
, удостоверился, что он был загружен PHP после перезапуска Apache, однако версия расширения Xdebug, поставляемая с macOS 10.13, похоже, не загружается или показывается при запуске phpinfo();
Мой php.ini определенно загружается:
$ php -i | grep php.ini
Configuration File (php.ini) Path => /etc
Loaded Configuration File => /etc/php.ini
Вот что выглядит мой /etc/php.ini, где я настраиваю Xdebug:
[xdebug]
zend_extension = "/usr/lib/php/extensions/no-debug-non-zts-20160303/xdebug.so"
xdebug.remote_enable=on
xdebug.remote_log="/var/log/xdebug.log"
xdebug.remote_host=localhost
xdebug.remote_handler=dbgp
xdebug.remote_port=9000
[Обновить, исправлено это опечатка здесь...]
Однако Xdebug не загружает и не проверяет php -i
не дает результатов:
$php -i | grep xdebug
PHP Warning: Method xdebug_start_function_monitor() cannot be a NULL
function in Unknown on line 0
PHP Warning: xdebug: Unable to register functions, unable to load in Unknown on line 0
Segmentation fault: 11
И да, путь к файлу верен:
$ ls /usr/lib/php/extensions/no-debug-non-zts-20160303/xdebug.so
/usr/lib/php/extensions/no-debug-non-zts-20160303/xdebug.so*
Это работало на PHP 5, поэтому я надеюсь, что кто-то может помочь мне и всем остальным в будущем бороться с этой проблемой.
Когда я проверяю свой журнал apache, я получаю следующую ошибку:
Failed loading /usr/lib/php/extensions/no-debug-non-zts-20160303/xdebug.so: dlopen(/usr/lib/php/extensions/no-debug-non-zts-20160303/xdebug.so, 9): Symbol not found: _xdebug_monitored_function_dtor
Referenced from: /usr/lib/php/extensions/no-debug-non-zts-20160303/xdebug.so
Expected in: flat namespace
in /usr/lib/php/extensions/no-debug-non-zts-20160303/xdebug.so
Я не уверен, как я могу решить эту ошибку:
Symbol not found: _xdebug_monitored_function_dtor
Ответы
Ответ 1
Хорошо, поэтому я, наконец, понял, что он работает отлично! Я предполагаю, что двоичный файл xdebug, поставляемый с macOS High Sierra (найденный под: /usr/lib/php/extensions/no-debug-non-zts-20160303/xdebug.so
), несовместим с новым механизмом Zend PHP7.
Итак, я загрузил последний источник с xdebug и сделал следующее:
- Установленный autoconf с brew;
- Запустите
phpize
, чтобы настроить сборку для нового механизма Zend;
- Запустить
./configure
- Запустить
make
Теперь новый двоичный файл находится под modules/xdebug.so
Однако защита от целостности системы MacOS (SIP) предотвратит перезапись xdebug.so
под /usr/lib/php/extensions/
. Я не хотел отключать это, поэтому я создал новый путь к каталогу под /usr/local/lib/php/extensions/
и скопировал новый двоичный файл в это место. Я не уверен, что этот каталог - лучшее место, чтобы положить его, или если это плохая практика, но это сработало для меня.
Наконец, я переконфигурировал свой php.ini, чтобы использовать новый двоичный файл, и все работает отлично!
Ответ 2
Для его установки вам понадобятся инструменты командной строки xcode.
Итак, вам нужно запустить:
xcode-select --install
Затем вам нужно установить autoconf:
brew install autoconf
Тогда вам нужно скачать код отсюда. После этого вы должны запустить в папке с исходным кодом:
-
phpize
-
./configure
-
make
-
sudo cp modules/xdebug.so/usr/local/php/extensions
(если каталог не существует, создайте его)
И наконец внутри php.ini добавить
zend_extension=/usr/local/php/extensions/xdebug.so
После этого вы можете включить xdebug в php.ini и перезапустить apache.
sudo apachectl restart
Ответ 3
вы сделали опечатку в "zend_extention". это должно быть zend_extension.
и я думаю, что полный путь не нужен
zend_extension = xdebug.so
должно быть достаточно
Ответ 4
Для тех, кто опаздывает на эту вечеринку, первоначальная попытка в этом вопросе, кажется, работает нормально в macOS 10.13.6
Ответ 5
Привет всем, кто получил ошибку при попытке установить xDebug на Mac.
ошибка: неизвестное имя типа 'uint64_t'
В вашем локальном /bin/include есть файлы, которые вызывают эту ошибку. Удаляя их, вы избавляетесь от ошибки. Хотя, возможно, вам придется переварить варево.
https://github.com/cython/cython/issues/2009
Ответ 6
Если у вас установлен brew с несколькими версиями PHP, т.е. 7.1, 7.2 и 7.3, в Mac OS X mojave, вы можете сделать следующее:
Установите автоконф с помощью brew brew install autoconf
.
Перейдите на версию PHP, на которой вы хотите Xdebug, запустите brew unlink [email protected] && brew link --force --overwrite php
. Это переключится с PHP 7.1 на PHP 7.3.
Загрузите последнюю версию Xdebug с сайта xdebug.
Извлеките tar из Xdebug и перейдите в извлеченный каталог, где вы увидите все файлы.
Запустите phpize
, чтобы настроить сборку для нового движка Zend.
Запустите ./configure
.
Запустите make
.
Расширение Xdebug xdebug.so
компилируется в каталог modules
.
Создайте новый путь к каталогу в /usr/local/lib/php/7.3.1/extensions/
и скопируйте xdebug.so
в это место. Здесь 7.3.1
- текущая версия, которую я переключил ранее, измените ее, чтобы она соответствовала вашей версии PHP.
Откройте php.ini
в редакторе и введите
zend_extension="/usr/local/lib/php/7.3.1/extensions/xdebug.so"
затем сохраните изменения.
Запустите php -v
, и он покажет, что Xdebug настроен правильно.
Если вы хотите настроить Xdebug на другую версию PHP, просто повторите действия, начиная с шага 2 до 11. Как упоминалось в предыдущем посте, таким образом вам не нужно отключать/включать защиту целостности системы в Mac OS X.