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 

Solutions Collecting From Web of "Xdebug на macOS 10.13 с PHP 7"

Хорошо, поэтому я, наконец, понял, что он работает отлично! Я предполагаю, что двоичный файл xdebug, который поставляется с macOS High Sierra (находится по адресу: /usr/lib/php/extensions/no-debug-non-zts-20160303/xdebug.so ), несовместим с новым движком Zend PHP7.

Поэтому я загрузил последний источник с веб-сайта xdebug и сделал следующее:

  1. Установленный автоконтакт с варкой;
  2. Запустите phpize чтобы настроить сборку для нового движка Zend;
  3. Запустить ./configure
  4. Запустить make

Теперь новый двоичный файл находится под modules/xdebug.so

Однако macOS System Integrity Protection (SIP) предотвратит переписывание xdebug.so в /usr/lib/php/extensions/ . Я не хотел отключать это, поэтому я создал новый путь к каталогу в /usr/local/lib/php/extensions/ и скопировал новый двоичный файл в это место. Я не уверен, что этот каталог – лучшее место, чтобы положить его, или если это плохая практика, но это сработало для меня.

Наконец, я переконфигурировал свой php.ini для использования нового двоичного кода, и все отлично работало!

вы сделали опечатку в «zend_extention». это должно быть zend_extension. и я думаю, что полный путь не нужен zend_extension = xdebug.so должно быть достаточно

Чтобы установить его, у вас должны быть инструменты командной строки 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