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

Тогда вам нужно скачать код отсюда. После этого вы должны запустить в папке с исходным кодом:

  1. phpize
  2. ./configure
  3. make
  4. 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, вы можете сделать следующее:

  1. Установите автоконф с помощью brew brew install autoconf.

  2. Перейдите на версию PHP, на которой вы хотите Xdebug, запустите brew unlink [email protected] && brew link --force --overwrite php. Это переключится с PHP 7.1 на PHP 7.3.

  3. Загрузите последнюю версию Xdebug с сайта xdebug.

  4. Извлеките tar из Xdebug и перейдите в извлеченный каталог, где вы увидите все файлы.

  5. Запустите phpize, чтобы настроить сборку для нового движка Zend.

  6. Запустите ./configure.

  7. Запустите make.

  8. Расширение Xdebug xdebug.so компилируется в каталог modules.

  9. Создайте новый путь к каталогу в /usr/local/lib/php/7.3.1/extensions/ и скопируйте xdebug.so в это место. Здесь 7.3.1 - текущая версия, которую я переключил ранее, измените ее, чтобы она соответствовала вашей версии PHP.

  10. Откройте php.ini в редакторе и введите zend_extension="/usr/local/lib/php/7.3.1/extensions/xdebug.so" затем сохраните изменения.

  11. Запустите php -v, и он покажет, что Xdebug настроен правильно.

Если вы хотите настроить Xdebug на другую версию PHP, просто повторите действия, начиная с шага 2 до 11. Как упоминалось в предыдущем посте, таким образом вам не нужно отключать/включать защиту целостности системы в Mac OS X.