тл; д-р
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 запобіжить це. Але не хвилюйтесь, ми подбаємо про це вручну на наступному кроці. зробити встановлення все ще потрібно, оскільки він підпише файл * .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 недоступний при встановленні. Поверніться назад, щоб дізнатися, чого не вистачає.
EDIT
Більш повним виправленням буде редагування результату php-config --include-dir
, який повертається /usr/include/php
. Це дозволило б будь-якій установці знайти необхідні файли заголовків без необхідності вручну редагувати файли або прапорці компілятора.