apache — 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

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 (SIP) не позволит вам перезаписать xdebug.so под /usr/lib/php/extensions/, Я не хотел отключать это, поэтому я создал новый путь к каталогу в /usr/local/lib/php/extensions/ и скопировал новый двоичный файл в это место. Я не уверен, является ли этот каталог лучшим местом для размещения, или это плохая практика, но он работал для меня.

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

14

Другие решения

Для его установки вам понадобятся инструменты командной строки 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
7

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

3

Для тех, кто опаздывает на эту вечеринку, первоначальная попытка в этом вопросе, кажется, работает нормально в macOS 10.13.6

0
По вопросам рекламы [email protected]