Debugging von PHP-Code: Techniken und Werkzeuge für Profis

Online Python-Trainer für Anfänger

Lernen Sie Python einfach ohne theoretische Überlastung. Lösen Sie praktische Aufgaben mit automatischer Überprüfung und schreiben Sie Code direkt im Browser.

Kurs starten

Einleitung: Warum Debugging die Superkraft eines Entwicklers ist

\n\n

Haben Sie schon einmal nachts vor dem Monitor gesessen und nicht verstanden, warum Ihre PHP-Website eine weiße Todesseite anzeigt? Oder, noch schlimmer, falsche Zahlen in einem Bericht? Herzlichen Glückwunsch, Sie sind auf das Debugging gestoßen. Viele Anfänger haben Angst vor diesem Wort und denken, dass das Debugging von PHP-Code nur etwas für auserwählte Gurus ist. In Wirklichkeit ist es nur eine Fähigkeit, die man trainieren kann und sollte.

\n\n

In diesem Artikel werden wir nicht einfach Funktionen auflisten. Wir werden reale Szenarien durchgehen: von einfachem var_dump() bis zur Konfiguration von Xdebug in der IDE. Sie werden lernen, wie Sie den Prozess der Fehlersuche in eine strukturierte Routine verwandeln und nicht in Kaffeesatzleserei. Los geht's!

\n\n

1. Der Klassiker: var_dump und print_r

\n\n

Der einfachste Weg des PHP-Debuggings ist es, var_dump($variable) an eine verdächtige Stelle einzufügen. Aber es gibt einen Haken: Nicht jeder macht es richtig.

\n\n

Richtiges var_dump

\n

Viele schreiben so:

\n
var_dump($user);
\n

Und erhalten ein Durcheinander auf dem Bildschirm. Besser ist es, die Ausgabe zu formatieren:

\n
echo '<pre>';\nvar_dump($user);\necho '</pre>';\ndie(); // Ausführung stoppen, damit die restliche Ausgabe nicht stört
\n\n

Und für Arrays und Objekte ist print_r() mit dem Flag true praktischer, um das Ergebnis in einem String zu speichern:

\n
$data = print_r($users, true);\nfile_put_contents('debug.log', $data, FILE_APPEND);
\n\n

Tipp: Lassen Sie var_dump niemals im Produktivbetrieb. Verwenden Sie bedingtes Debugging:

\n
if (defined('DEBUG_MODE') && DEBUG_MODE) {\n    var_dump($variable);\n}
\n\n

2. Logging: Ihr bester Freund im Produktivbetrieb

\n\n

Wenn die Website bereits auf dem Server ist, können Sie einen Fehler nicht einfach auf dem Bildschirm ausgeben. Hier kommt das PHP-Logging zur Hilfe. Die eingebaute Funktion error_log() ist die Basis.

\n\n

Wie man error_log konfiguriert

\n

Geben Sie in der Datei php.ini Folgendes an:

\n
error_reporting = E_ALL\ndisplay_errors = Off\nlog_errors = On\nerror_log = /var/log/php_errors.log
\n\n

Jetzt werden alle Fehler, einschließlich Warnungen, in die Datei geschrieben. Im Code können Sie so vorgehen:

\n
if ($result === false) {\n    error_log("Datenbankabfragefehler: " . $db->error, 3, '/var/log/myapp.log');\n    // 3 bedeutet Schreiben in eine Datei, nicht in syslog\n}
\n\n

Moderner Ansatz: Monolog

\n

Für ernsthafte Projekte verwenden Sie die Bibliothek Monolog. Sie kann in Dateien, in Slack, in die Datenbank und sogar in Telegram schreiben. Beispiel für die Einbindung:

\n
use Monolog\\Logger;\nuse Monolog\\Handler\\StreamHandler;\n\n$log = new Logger('my_app');\n$log->pushHandler(new StreamHandler(__DIR__ . '/app.log', Logger::WARNING));\n$log->warning('Benutzer versuchte sich ohne Rechte anzumelden', ['user_id' => 123]);
\n\n

3. Xdebug: Der Raketenantrieb fürs Debugging

\n\n

Wenn Sie Xdebug noch nicht installiert haben, verschwenden Sie Zeit. Es ist nicht nur ein Werkzeug – es ist ein Raketenrucksack für Entwickler. Es ermöglicht das Setzen von Haltepunkten (Breakpoints), das Anzeigen von Variablenwerten in Echtzeit und sogar das Profiling von Code.

\n\n

Installation und Konfiguration

\n

Installieren Sie es über den Paketmanager:

\n
pecl install xdebug\n# oder für Ubuntu:\nsudo apt install php-xdebug
\n\n

Fügen Sie in der php.ini hinzu:

\n
zend_extension=xdebug.so\nxdebug.mode=debug\nxdebug.start_with_request=yes\nxdebug.client_host=127.0.0.1\nxdebug.client_port=9003
\n\n

Konfigurieren Sie nun Ihre IDE. In PhpStorm geht das mit zwei Klicks: Konfigurieren Sie den PHP-Interpreter und klicken Sie auf "Start Listening for PHP Debug Connections".

\n\n

Wie es im echten Leben funktioniert

\n

Setzen Sie einen Haltepunkt (roter Kreis) in die Zeile mit dem verdächtigen Code. Starten Sie das Skript im Browser mit dem Parameter ?XDEBUG_SESSION_START=1.

Blogs

Buchempfehlungen