tl; dr
Apple postanowiło usunąć plik nagłówków /usr/include
i macOS_SDK_headers_for_macOS_10.14.pkg
pakiet. Aby zainstalować Xdebug, musisz ręcznie skompilować Xdebug z poprawnym odniesieniem w obu phpize
i make
.
Aby uzyskać więcej informacji, napisałem artykuł na blogu na temat problemu i rozwiązania
Krótko mówiąc, Apple zdecydowało się na nukcję /usr/include
w MacOS Catalina, która zawsze była domyślną lokalizacją pliku nagłówka C w systemach UNIX. Próba instalacji za pomocą PEAR / PECL zwróci błąd, ponieważ kompilator wyszuka potrzebny plik nagłówków /usr/include
. Tak więc rozwiązaniem jest ręczne skompilowanie Xdebug, ręczne określenie faktycznej lokalizacji plików nagłówkowych, które nadal są dostarczane przez Xcode, tylko w innym miejscu.
Najpierw upewnij się, że Xcode jest zainstalowany, w tym narzędzia wiersza poleceń. Następujące polecenie wyświetli lokalizację domyślnego zestawu SDK:
$ xcrun --show-sdk-path
/Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX.sdk
Nagłówek, który będziesz chciał ( php.h
), będzie wtedy w /Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX.sdk/usr/include/php/main
.
Pobieranie źródła
Skompilujmy 2.7.2 , otrzymując kod źródłowy z git. Alternatywnie możesz pobrać źródło ze strony Xdebug .
git clone https://github.com/xdebug/xdebug.git
cd xdebug
git checkout tags/2.7.2
phpize
Następnie musimy wykonać kopię phpize
, abyśmy mogli edytować ścieżkę dołączania:
cp /usr/bin/phpize .
nano ./phpize
Znajdź tę linię:
includedir="`eval echo ${prefix}/include`/php"
... i zastąp go następującą linią:
includedir="/Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX.sdk/usr/include/php"
Uruchom phpize
:
./phpize
Powinieneś teraz zobaczyć coś takiego:
Configuring for:
PHP Api Version: 20180731
Zend Module Api No: 20180731
Zend Extension Api No: 320180731
Konfiguruj i buduj
Możemy teraz skonfigurować:
./configure --enable-xdebug
... i uruchom make przy użyciu naszej niestandardowej lokalizacji SDK zdefiniowanej jako flagi kompilatora:
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'
Może zobaczysz jakieś ostrzeżenie, po prostu zignoruj je na razie. Wreszcie będziemy musieli uruchomić:
make install
Ponownie polecenie to zakończy się niepowodzeniem, ponieważ nie może przenieść rozszerzenia we właściwe miejsce. SIP temu zapobiegnie. Ale nie martw się, zajmiemy się tym ręcznie na następnym etapie. make install jest nadal wymagany, ponieważ podpisze plik * .so.
Włączona obsługa w PHP
Następnie przenosimy plik wykonywalny w bezpieczne miejsce. Używam /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
Następnie edytujemy konfigurację PHP, aby włączyć Xdebug. Po prostu edytuj php.ini
:
sudo nano /etc/php.ini
A na dole dodajemy:
[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
Uruchom ponownie wbudowany serwer, aby mieć pewność:
sudo apachectl restart
I w końcu przetestuj wszystko poszło dobrze:
php -i | grep "xdebug support"
Jeśli powyższe polecenie nic nie zwraca, oznacza to, że Xdebug nie jest dostępny w twojej instalacji. Wróć, aby dowiedzieć się, czego brakuje.
EDYTOWAĆ
Bardziej kompletną poprawką byłaby edycja wyniku php-config --include-dir
, który zwraca /usr/include/php
. Dzięki temu każda instalacja znalazłaby niezbędne pliki nagłówkowe bez konieczności ręcznej edycji plików lub flag kompilatora.