Итак, 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 (SIP) не позволит вам перезаписать xdebug.so
под /usr/lib/php/extensions/
, Я не хотел отключать это, поэтому я создал новый путь к каталогу в /usr/local/lib/php/extensions/
и скопировал новый двоичный файл в это место. Я не уверен, является ли этот каталог лучшим местом для размещения, или это плохая практика, но он работал для меня.
Наконец я переконфигурировал свой php.ini для использования нового бинарного файла, и все заработало отлично!
Для его установки вам понадобятся инструменты командной строки 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
вы сделали опечатку в «zend_extention». это должно быть zend_extension.
и я думаю, что полный путь не нужен
zend_extension = xdebug.so
должно быть достаточно
Для тех, кто опаздывает на эту вечеринку, первоначальная попытка в этом вопросе, кажется, работает нормально в macOS 10.13.6