webentwicklung-frage-antwort-db.com.de

Xdebug auf macOS 10.13 mit PHP 7

MacOS High Sierra 10.13 wird jetzt mit PHP 7.1 geliefert. Beim Konfigurieren von Apache habe ich auch einen neuen /etc/php.ini aus der /etc/php.ini.default-Datei erstellt. Stellen Sie sicher, dass nach dem Neustart von Apache überprüft wird, dass PHP geladen wird. Die mit macOS 10.13 gelieferte Version der Xdebug-Erweiterung scheint jedoch nicht zu laden oder beim Aufruf von phpinfo(); auftauchen

Meine php.ini wird definitiv geladen:

$ php -i | grep php.ini
Configuration File (php.ini) Path => /etc
Loaded Configuration File => /etc/php.ini

So sieht meine /etc/php.ini aus, wo ich Xdebug konfiguriere:

[xdebug]    
zend_extension = "/usr/lib/php/extensions/no-debug-non-zts-20160303/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

[Update, der Tippfehler wurde behoben ...]

Xdebug lädt jedoch nicht und überprüft php -i keine Ergebnisse:

$php -i | grep xdebug
PHP Warning:  Method xdebug_start_function_monitor() cannot be a NULL 
    function in Unknown on line 0
    PHP Warning:  xdebug: Unable to register functions, unable to load in Unknown on line 0
    Segmentation fault: 11

Und ja, der Pfad zur Datei ist korrekt:

$ ls /usr/lib/php/extensions/no-debug-non-zts-20160303/xdebug.so
/usr/lib/php/extensions/no-debug-non-zts-20160303/xdebug.so*

Früher funktionierte es mit PHP 5, daher hoffe ich, dass mir jemand und alle anderen Personen helfen können, die in Zukunft mit diesem Problem zu kämpfen haben.

Wenn ich mein Apache-Protokoll überprüfe, erhalte ich die folgende Fehlermeldung:

Failed loading /usr/lib/php/extensions/no-debug-non-zts-20160303/xdebug.so:  dlopen(/usr/lib/php/extensions/no-debug-non-zts-20160303/xdebug.so, 9): Symbol not found: _xdebug_monitored_function_dtor
  Referenced from: /usr/lib/php/extensions/no-debug-non-zts-20160303/xdebug.so
  Expected in: flat namespace
 in /usr/lib/php/extensions/no-debug-non-zts-20160303/xdebug.so

Ich mache keine Fortschritte, um herauszufinden, wie ich diesen Fehler beheben kann:

Symbol not found: _xdebug_monitored_function_dtor
7
Gerard de Jong

Ok, also habe ich es endlich selbst laufen lassen, es funktioniert perfekt! Ich gehe davon aus, dass die xdebug-Binärdatei, die mit macOS High Sierra (unter /usr/lib/php/extensions/no-debug-non-zts-20160303/xdebug.so) geliefert wird, nicht mit der neuen Zend-Engine von PHP7 kompatibel ist.

Also habe ich die neueste Quelle von der xdebug-Website heruntergeladen und Folgendes getan:

  1. Installierte Autokonfiguration mit Brühen;
  2. Führen Sie phpize aus, um den Build für die neue Zend-Engine zu konfigurieren.
  3. ./configure ausführen
  4. make ausführen

Die neue Binärdatei befindet sich jetzt unter modules/xdebug.so

MacOS System Integrity Protection (SIP) verhindert jedoch, dass Sie den xdebug.so unter /usr/lib/php/extensions/ überschreiben. Ich wollte das nicht deaktivieren, also legte ich unter /usr/local/lib/php/extensions/ einen neuen Verzeichnispfad an und kopierte die neue Binärdatei an diesen Ort. Ich bin nicht sicher, ob dieses Verzeichnis der beste Ort ist, um es zu platzieren, oder ob dies eine schlechte Praxis ist, aber es hat für mich funktioniert.

Schließlich habe ich meine php.ini für die Verwendung der neuen Binärdatei neu konfiguriert und alles hat perfekt funktioniert!

15
Gerard de Jong

Um es zu installieren, müssen Sie Xcode-Kommandozeilen-Tools haben.

Also musst du laufen:

xcode-select --install

Dann müssen Sie autoconf installieren:

brew install autoconf

Dann müssen Sie den Code von hier herunterladen. Danach müssen Sie im Ordner des Quellcodes laufen:

  1. phpize
  2. ./configure
  3. make
  4. Sudo cp modules/xdebug.so /usr/local/php/extensions (wenn das Verzeichnis nicht existiert, gehe zum Erstellen)

Und schließlich in php.ini hinzufügen

zend_extension=/usr/local/php/extensions/xdebug.so

Danach können Sie xdebug in php.ini aktivieren und Apache neu starten

Sudo apachectl restart

sie haben einen Tippfehler in "zend_extention" gemacht. Dies sollte zend_extension ..__ sein und ich denke, der vollständige Pfad ist nicht erforderlich zend_extension = xdebug.so sollte ausreichen

3
user24525

Für alle, die zu spät auf diese Party kommen, scheint der erste Versuch in der Frage in macOS 10.13.6 gut zu funktionieren

0
Fuzzy76

Hallo an alle, die beim Installieren von xDebug auf einem Mac Fehler haben.

fehler: unbekannter Typname 'uint64_t'

In Ihrem lokalen Verzeichnis/bin/include befinden sich Dateien, die diesen Fehler verursachen. Wenn Sie sie entfernen, wird der Fehler beseitigt. Möglicherweise müssen Sie das Brauen erneut durchführen.

https://github.com/cython/cython/issues/2009

0
jenel