Итак, 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
Хорошо, поэтому я, наконец, понял, что он работает отлично! Я предполагаю, что двоичный файл xdebug, который поставляется с macOS High Sierra (находится по адресу: /usr/lib/php/extensions/no-debug-non-zts-20160303/xdebug.so
), несовместим с новым движком Zend PHP7.
Поэтому я загрузил последний источник с веб-сайта xdebug и сделал следующее:
phpize
чтобы настроить сборку для нового движка Zend; ./configure
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
Затем вам нужно скачать код отсюда. После этого вам нужно запустить в папке исходного кода:
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