Установка Xdebug на MacOS Catalina 10.15

13

Я попытался установить Xdebug на OS X 10.15 и столкнулся со следующей проблемой:

/private/tmp/pear/install/xdebug/xdebug.c:25:10: фатальная ошибка: файл 'php.h' не найден

Я попытался решить проблему, как описано здесь: Установка xdebug на MacOs Mojave - файл 'php.h' не найден

К сожалению, файлы заголовков не могут быть найдены в этом каталоге: /Library/Developer/CommandLineTools/Packages

Любые идеи, где я могу получить текущие заголовочные файлы для OS X 10.15?

Гюнтер
источник

Ответы:

28

ТЛ; др

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

Луи Шаретт
источник
1
Самый ценный ответ! Это должно быть помечено как правильное! Спасибо, сэр!
eltomato
Вы спасли мой день
Людовико
Это лучший способ решить проблему. Это сработало для меня. Спасибо, Луи
Раджа Мохаммед
1
Для поддержки PHP 7.4 вам необходимо установить XDebug 2.9 (не 2.7.2). Просто следуйте этим инструкциям по установке и после make installвыполните все шаги главы «Включенная поддержка в PHP» этого поста. Имейте в виду, что у вас может быть php.iniфайл в другом месте. Запустите, php --iniчтобы выяснить, где и отредактируйте тот, который используется вместо этого.
Дейв
Я был хорош до ./configureкоманды. Я продолжаю получать no such file or directory: ./configure. Кто-нибудь еще сталкивался с этим или я просто счастливчик? : D
cbloss793
0

Если вы используете brew, я решаю это путем переустановки php и повторной ссылки:

brew reinstall php@7.3
brew link --overwrite php
jamespsterling
источник
Не сработало, чувак.
Эрик Чен
К сожалению, варево не всегда работает должным образом, в зависимости от ваших версий.
Джеймс Стерлинг
-1

Вы можете найти подробные инструкции с готовыми к использованию патчами на этом сайте: https://profilingviewer.com/install-xdebug-on-catalina.html

user24525
источник
1
Ответы, которые в первую очередь ссылаются на внешний сайт, должны включать в себя краткое изложение информации, чтобы она стала первичным источником, а также ссылкой. Это поможет ответу выдержать испытание временем.
Луи Шарет
-2

Я бы порекомендовал вам использовать «brew» для установки PHP, а затем использовать инструмент «pecl», который поставляется с установленной версией brew PHP для установки Xdebug.

Дерик
источник
Это именно то, что я сделал. При попытке установить Xdebug с pecl я получаю ошибку, упомянутую выше
Guenter
1
Это означает, что он выбирает не тот инструмент pecl, который установлен на вашем Mac. Вы должны убедиться, что используете приготовленный напиток.
Дерик
@Guenter этот совет решил твою проблему? У меня такая же проблема, brew install phpно я все еще получаю ту же ошибку.
Картер Папе
Спасибо @Derick, это решило мою проблему
Гюнтер
1
pecl install xdebugработал для меня до 10.15.3
Хуанми Соссо