tl; dr
Apple решила удалить файл заголовков в /usr/include
и пакет macOS_SDK_headers_for_macOS_10.14.pkg
. Чтобы установить Xdebug, вам нужно будет вручную скомпилировать Xdebug с правильной ссылкой в phpize
и make
.
. Более подробно я написал статью в блоге о проблеме и решение
Короче говоря, Apple решила обнулить /usr/include
в MacOS Catalina, который был местоположением по умолчанию для заголовочного файла C длякогда-либо в системах UNIX. Попытка установки через PEAR / PECL вернет ошибку, так как компилятор будет искать необходимый заголовочный файл в /usr/include
. Поэтому решение состоит в том, чтобы скомпилировать Xdebug вручную, вручную указав фактическое расположение файлов заголовков, которые все еще предоставляются XCode, просто в другом месте.
Сначала убедитесь, что Xcode установлен, включая командную строку. инструменты. Следующая команда отобразит местоположение SDK по умолчанию:
$ xcrun --show-sdk-path
/Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX.sdk
Заголовок, который вы хотите (php.h
), будет тогда в /Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX.sdk/usr/include/php/main
.
Получение источника
Давайте скомпилируем 2.7.2 , получая исходный код из git. Кроме того, вы можете загрузить исходный код с сайта Xdebug .
git clone https://github.com/xdebug/xdebug.git
cd xdebug
git checkout tags/2.7.2
phpize
Далее нам нужно сделать копию phpize
, чтобы мы могли редактировать путь включения:
cp /usr/bin/phpize .
nano ./phpize
Найдите эту строку:
includedir="`eval echo ${prefix}/include`/php"
... и замените ее следующей строкой:
includedir="/Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX.sdk/usr/include/php"
Выполните phpize
:
./phpize
Теперь вы должны увидеть что-то вроде этого:
Configuring for:
PHP Api Version: 20180731
Zend Module Api No: 20180731
Zend Extension Api No: 320180731
Настроить и построить
Теперь мы можем настроить:
./configure --enable-xdebug
... иЗапустите make, используя наше пользовательское местоположение SDK, определяемое как флаги компилятора:
make CPPFLAGS='-I/Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX.sdk/usr/include/php -I/Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX.sdk/usr/include/php/main -I/Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX.sdk/usr/include/php/TSRM -I/Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX.sdk/usr/include/php/Zend -I/Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX.sdk/usr/include/php/ext -I/Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX.sdk/usr/include/php/ext/date/lib'
Возможно, вы увидите какое-то предупреждение, просто пока проигнорируйте его. Наконец, нам нужно выполнить:
make install
Опять же, эта команда не будет выполнена, потому что она не может переместить расширение в нужное место. SIP предотвратит это. Но не беспокойтесь, мы позаботимся об этом вручную на следующем этапе. make install по-прежнему требуется, поскольку он подпишет файл * .so.
Включена поддержка в PHP
Далее мы переместим исполняемый файл куда-нибудь в безопасное место. Я использую /usr/local/php/extensions
.
sudo mkdir -p /usr/local/php/extensions
sudo cp /usr/lib/php/extensions/no-debug-non-zts-20180731/xdebug.so /usr/local/php/extensions
Затем мы редактируем конфигурацию PHP, чтобы включить Xdebug. Просто отредактируйте php.ini
:
sudo nano /etc/php.ini
И мы добавим следующее внизу:
[xdebug]
zend_extension=/usr/local/php/extensions/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
Перезагрузите встроенный сервер, чтобы убедиться:
sudo apachectl restart
И, наконец, проверьте, что все прошло нормально:
php -i | grep "xdebug support"
Если приведенная выше команда ничего не возвращает, Xdebug недоступен при вашей установке. Вернитесь к шагу, чтобы выяснить, чего не хватает.
РЕДАКТИРОВАТЬ
Более полным исправлением было бы редактирование результата php-config --include-dir
, который возвращает /usr/include/php
. Это позволит любой установке найти необходимые заголовочные файлы без необходимости вручную редактировать файлы или флаги компилятора.