tl; dr
Apple hat beschlossen, die Header-Datei /usr/include
und das macOS_SDK_headers_for_macOS_10.14.pkg
Paket zu entfernen . Um Xdebug zu installieren, müssen Sie Xdebug manuell mit der richtigen Referenz in phpize
und kompilieren make
.
Für weitere Details habe ich einen Blog-Artikel über das Problem und die Lösung geschrieben
Kurz gesagt, Apple entschied sich für /usr/include
MacOS Catalina, das in UNIX-Systemen für immer der Standardspeicherort für C-Header-Dateien war. Beim Versuch, über PEAR / PECL zu installieren, wird ein Fehler zurückgegeben, da der Compiler nach der erforderlichen Header-Datei sucht /usr/include
. Die Lösung besteht also darin, Xdebug manuell zu kompilieren und den tatsächlichen Speicherort der Header-Dateien, die noch von Xcode bereitgestellt werden, manuell an einem anderen Speicherort anzugeben.
Stellen Sie zunächst sicher, dass Xcode installiert ist, einschließlich der Befehlszeilentools. Der folgende Befehl zeigt den Speicherort des Standard-SDK an:
$ xcrun --show-sdk-path
/Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX.sdk
Der gewünschte Header ( php.h
) befindet sich dann in /Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX.sdk/usr/include/php/main
.
Quelle abrufen
Lassen Sie uns 2.7.2 kompilieren und den Quellcode von git abrufen . Alternativ können Sie die Quelle von der Xdebug-Site herunterladen .
git clone https://github.com/xdebug/xdebug.git
cd xdebug
git checkout tags/2.7.2
phpize
Als nächstes müssen wir eine Kopie erstellen, phpize
damit wir den Include-Pfad bearbeiten können:
cp /usr/bin/phpize .
nano ./phpize
Finden Sie diese Zeile:
includedir="`eval echo ${prefix}/include`/php"
... und ersetzen Sie es durch diese Zeile:
includedir="/Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX.sdk/usr/include/php"
Ausführen phpize
:
./phpize
Sie sollten jetzt so etwas sehen:
Configuring for:
PHP Api Version: 20180731
Zend Module Api No: 20180731
Zend Extension Api No: 320180731
Konfigurieren und erstellen
Wir können jetzt konfigurieren:
./configure --enable-xdebug
... und führen Sie make mit unserem benutzerdefinierten SDK-Speicherort aus, der als Compiler-Flags definiert ist:
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'
Könnte eine Warnung sehen, ignorieren Sie sie vorerst. Schließlich müssen wir laufen:
make install
Auch dieser Befehl schlägt fehl, da die Erweiterung nicht an die richtige Stelle verschoben werden kann. SIP wird es verhindern. Aber keine Sorge, wir kümmern uns im nächsten Schritt manuell darum. make install ist weiterhin erforderlich, da die * .so-Datei signiert wird.
Unterstützung in PHP aktiviert
Als nächstes verschieben wir die ausführbare Datei an einen sicheren Ort. Ich benutze /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
Dann bearbeiten wir die PHP-Konfiguration, um Xdebug zu aktivieren. Einfach bearbeiten php.ini
:
sudo nano /etc/php.ini
Und wir fügen unten Folgendes hinzu:
[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
Starten Sie den eingebauten Server neu, um sicherzugehen:
sudo apachectl restart
Und schließlich testete alles gut:
php -i | grep "xdebug support"
Wenn der obige Befehl nichts zurückgibt, ist Xdebug bei Ihrer Installation nicht verfügbar. Gehen Sie die Schritte zurück, um herauszufinden, was fehlt.
BEARBEITEN
Eine vollständigere Lösung wäre, das Ergebnis von zu bearbeiten php-config --include-dir
, das zurückgegeben wird /usr/include/php
. Dadurch würde jede Installation die erforderlichen Header-Dateien finden, ohne Dateien oder Compiler-Flags manuell bearbeiten zu müssen.