Установка Xdebug на MacOS Catalina 10.15 - PullRequest
3 голосов
/ 10 октября 2019

Я попытался установить 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?

Ответы [ 3 ]

5 голосов
/ 15 октября 2019

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

0 голосов
/ 15 октября 2019

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

brew reinstall php@7.3
brew link --overwrite php
0 голосов
/ 10 октября 2019

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

...