Instalacja Xdebug na MacOS Catalina 10.15

13

Próbowałem zainstalować Xdebug na OS X 10.15 i napotkałem następujący problem:

/private/tmp/pear/install/xdebug/xdebug.c:25:10: błąd krytyczny: nie znaleziono pliku „php.h”

Próbowałem rozwiązać problem, jak opisano tutaj: Instalowanie xdebug na MacOs Mojave - nie znaleziono pliku „php.h”

Niestety nie można znaleźć plików nagłówkowych w tym katalogu: /Library/Developer/CommandLineTools/Packages

Jakieś pomysły, gdzie mogę uzyskać bieżące pliki nagłówkowe dla OS X 10.15?

Guenter
źródło

Odpowiedzi:

28

tl; dr

Apple postanowiło usunąć plik nagłówków /usr/includei macOS_SDK_headers_for_macOS_10.14.pkgpakiet. Aby zainstalować Xdebug, musisz ręcznie skompilować Xdebug z poprawnym odniesieniem w obu phpizei 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/includew 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.

Louis Charette
źródło
1
Najcenniejsza odpowiedź! To powinno być oznaczone jako poprawne! Dziękuję Panu!
eltomato
ZAPISZ MÓJ DZIEŃ
ludovico
To najlepszy sposób na rozwiązanie problemu. To zadziałało dla mnie. Dzięki, Louis
Raja Mohammed,
1
Aby obsługiwać PHP 7.4, musisz zainstalować XDebug 2.9 (nie 2.7.2). Postępuj zgodnie z instrukcjami instalacji i make installwykonaj wszystkie kroki rozdziału „Włączone wsparcie w PHP” w tym poście. Pamiętaj, że php.iniplik może znajdować się w innej lokalizacji. Uruchom, php --iniaby dowiedzieć się, gdzie i edytować ten, który jest używany zamiast tego.
Dejv
Byłem dobry aż do ./configurerozkazu. Ciągle dostaję no such file or directory: ./configure. Ktoś inny na to wpadł, czy jestem tylko szczęściarzem? : D
cbloss793
0

Jeśli używasz naparu, rozwiązuję to poprzez ponowną instalację php i ponowne połączenie:

brew reinstall php@7.3
brew link --overwrite php
jamespsterling
źródło
Nie działał, stary.
Eric Chen
Niestety zaparzanie nie działa zgodnie z oczekiwaniami, w zależności od wersji.
jamespsterling
-1

na tej stronie znajdziesz szczegółowe instrukcje z gotowymi łatkami: https://profilingviewer.com/installing-xdebug-on-catalina.html

użytkownik24525
źródło
1
Odpowiedzi, które odnoszą się głównie do witryny zewnętrznej, powinny zawierać podsumowanie informacji, tak aby stała się ona podstawowym źródłem, a także odnośnikiem. Pomoże to odpowiedzi przetrwać próbę czasu.
Louis Charette
-2

Polecam użycie „brew” do zainstalowania PHP, a następnie skorzystanie z narzędzia „pecl”, które jest dostarczane z zainstalowaną wersją PHP brew do zainstalowania Xdebug.

Derick
źródło
Właśnie to zrobiłem. Kiedy próbuję zainstalować Xdebug z pecl, pojawia się błąd wspomniany powyżej
Guenter
1
Oznacza to, że wybiera niewłaściwe narzędzie do pecl - to zainstalowane na komputerze Mac. Musisz upewnić się, że używasz dostarczonego naparu.
Derick,
@Guenter, czy ta wskazówka rozwiązała problem? Mam te same problemy i tak było, brew install phpale wciąż pojawia się ten sam błąd.
Carter Pape,
Dzięki @Derick, to rozwiązało mój problem
Guenter
1
pecl install xdebugpracował dla mnie poniżej 10.15.3
Juanmi Sosso