ТЛ; др
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
. Это позволит любой установке найти необходимые заголовочные файлы без необходимости вручную редактировать файлы или флаги компилятора.