Archiv für Server

PHP Remote Debugging mit XDebug

PHP Remote Debugging mit XDebug

Serverseitige Konfiguration

Schritt 1: XDebug installieren

apt-get install php5-xdebug

Schritt 2: php.ini / xdebug.ini editieren
zend_extension      = /usr/lib/php5/20090626/xdebug.so
xdebug.remote_enable = On
xdebug.remote_port   = 9000
xdebug.remote_log    = <Pfad zur log-Datei auf dem Server>
xdebug.remote_host   = <IP auf dem die IDE laufen soll>

Den richtigen Pfad zur zend_extension kann der erzeugten xdebug.ini aus /etc/php5/conf.d/ entnommen werden. Diese Datei lässt sich nun auch mit den oben beschriebenen Einträgen erweitern.

Werden die php.ini’s durch Froxlor pro Seite verwaltet, können die Einstellungen natürlich auch dort vorgenommen werden. Aber denk dran: Froxlor übernimmt die Einstellungen per Cronjob. Ein Server Neustart bringt an der Stelle also nichts, um mal eben schnell die Einstellungen zu testen.

Soll das Remote Debugging nicht nur für einen einzelnen Benutzer zugänglich sein (remote_host), sondern auch für mehrere, benötigt ihr noch folgenden Eintrag in der .ini:

xdebug.remote_connect_back = On

Der remote_host wird dann ignoriert und es werden alle Hosts zugelassen (Achtung: Sicherheit!)

Schritt 3: Port-Freigabe am Router

Etwas das ich sehr gerne vergesse und erst viel zu spät dran denke: Den verdammten Port (hier: 9000/tcp) beim Router freigeben und auf den Rechner mit der IDE weiterzuleiten.

Debugging

Im Browser

Um das Debugging im Browser zu aktivieren, empfiehlt sich ein Plugin/Addon für den jeweilig benutzten Browser zu installieren. Für Firefox z.B. das  Addon “The easiest Xdebug“. Um nun eine Debug-Session zu ermöglichen, muss der kleine grüne Käfer des Addons in der Toolbar angeklickt werden.

In der IDE

In der Toolbar von beispielsweise PhpStorm, befindet sich ein kleiner Telefonhörer, wenn dieser aktiviert wird, oder der längere Weg über Run -> Start Listening for PHP Debug Connections gewählt wird, horcht die IDE auf den eingestellen Port (Standard wieder 9000) und hält an den Breakpoints an, wenn diese über den Browser getriggert werden.

Hilfreiche Quellen

* http://xdebug.org/docs/remote
* http://mimi.kaktusteam.de/blog-posts/2012/01/remote-debugging-mit-phpstorm-und-xdebug/

https://www.youtube.com/watch?v=LUTolQw8K9A

500 Internal Server Error / IO Fehler / http Fehler

Wer solche unschönen Meldungen bei einem Uploadversuch von Bildern/Dateien von WordPress bzw. seinem Browser erhält, der hat evtl. das selbe Problem wie ich hatte. Dateien die größer als ca. 100kB waren, konnten über WordPress nicht hochgeladen werden.

Die meisten Lösungen die ich per Google gefunden habe zielen darauf ab in der .htaccess Datei etwas zu ändern um den Server dazu zu zwingen die Scripte als php5 auszuführen. Auch Änderungen der PHP Einstellungen fand ich häufiger. So z.B. die Anhebung der max. Dateigröße oder der Ausführungszeit.

Leider hat dies bei mir alles nicht geholfen. Zur Lösung brachte mich eigentlich die Anlaufstelle Nummer Eins. Das Log-File des Apache Servers. Warum ich da nicht sofort reingeschaut habe? Habe ich, nur ins Falsche, aber seis drum.

PHP läuft bei mir als  FastCGI  Modul, welches als Default-Wert nur 128kB Anfragen zulässt. Dabei spielt es dann keine Rolle welcher Wert in der PHP.ini zugelassen ist. Beim überschreiten des Wertes kommt es dann zum besagten “500 Internal Server Error”

Die Lösung des Problem ist nun das simple Hinzufügen der folgenden Zeile in die fcgid.conf:

FcgidMaxRequestLen 16777216

Hierbei wird die maximale Anfragenlänge auf 16MB gesetzt.