Einleitung: Warum Debugging die Superkraft eines Entwicklers ist
\n\nHaben 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\nIn 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!
1. Der Klassiker: var_dump und print_r
\n\nDer 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.
Richtiges var_dump
\nViele schreiben so:
\nvar_dump($user);\nUnd erhalten ein Durcheinander auf dem Bildschirm. Besser ist es, die Ausgabe zu formatieren:
\necho '<pre>';\nvar_dump($user);\necho '</pre>';\ndie(); // Ausführung stoppen, damit die restliche Ausgabe nicht stört\n\nUnd für Arrays und Objekte ist print_r() mit dem Flag true praktischer, um das Ergebnis in einem String zu speichern:
$data = print_r($users, true);\nfile_put_contents('debug.log', $data, FILE_APPEND);\n\nTipp: Lassen Sie var_dump niemals im Produktivbetrieb. Verwenden Sie bedingtes Debugging:
if (defined('DEBUG_MODE') && DEBUG_MODE) {\n var_dump($variable);\n}\n\n2. Logging: Ihr bester Freund im Produktivbetrieb
\n\nWenn 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.
Wie man error_log konfiguriert
\nGeben Sie in der Datei php.ini Folgendes an:
error_reporting = E_ALL\ndisplay_errors = Off\nlog_errors = On\nerror_log = /var/log/php_errors.log\n\nJetzt werden alle Fehler, einschließlich Warnungen, in die Datei geschrieben. Im Code können Sie so vorgehen:
\nif ($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\nModerner Ansatz: Monolog
\nFü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:
\nuse 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\n3. Xdebug: Der Raketenantrieb fürs Debugging
\n\nWenn 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\nInstallation und Konfiguration
\nInstallieren Sie es über den Paketmanager:
\npecl install xdebug\n# oder für Ubuntu:\nsudo apt install php-xdebug\n\nFügen Sie in der php.ini hinzu:
zend_extension=xdebug.so\nxdebug.mode=debug\nxdebug.start_with_request=yes\nxdebug.client_host=127.0.0.1\nxdebug.client_port=9003\n\nKonfigurieren 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\nWie es im echten Leben funktioniert
\nSetzen 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.