Webdesign Würzburg

Scriptfehler finden - Das Debugging

PHP ist unter anderem so erfolgreich, weil es relativ leicht zu debuggen ist. Jeder PHP Anfänger oder auch ambitionierter Webdesigner sollte sich relativ schnell damit ausseinander setzen und lernen PHP besser zu verstehen. Der PHP Parser ist in der Lage sehr gute Fehlerbeschreibungen auszugeben. Je nach Einstellung Ihres Servers gibt PHP unterschiedliche Fehlermeldungen oder Warnungen (Warnings) aus. Diese Einstellung kann in der php.ini Datei oder zur Laufzeit vogenommen werden. Für ein neues Projekt ist es sehr ratsam immer alle Fehler und Warnungen auszugeben. Dies geschieht ganz einfach indem man folgenden Code in das zu debuggende Script schreibt:

<?php

 error_reporting(E_ALL); // statt E_ALL kann man auch -1 schreiben
 
ini_set("display_errors", 1); // diese Zeile ist optional

// ab hier dann weiter mit dem Script

?>

Nun gibt uns PHP also alle Syntax Fehler aus die auftreten können. Schauen wir uns eine solche Fehlermeldung mal an:

Zeile 1: <?php
Zeile 2: $array = array("Gelb", "Grün", array("Rot", "Blau"));
Zeile 3: echo "<pre>";
Zeile 4: print_r($array)
Zeile 5: echo "</pre>";
Zeile 6: ?>

Dieses Script bringt uns die Fehlermeldung:

Parse error: syntax error, unexpected T_ECHO in C:\xampp\htdocs\temp.php on line 5

Eigentlich passiert der Fehler aber nicht in der Zeile 5, sondern in Zeile 4. Hier wurde das Semikolon (;) vergessen, ein typischer Anfängerfehler. Der Parser merkt dies aber erst wenn ein neuer Befehl ausgeführt werden soll. Warum das so ist? PHP Code kann auch auf mehreren Zeilen verteilt geschrieben werden und der Parser reagiert erst an der Stelle wo klar ist das hier was nicht stimmen kann.

Schon genauer ist die Fehlermeldung wenn wir folgenden Fehler verursacht haben:

<?php
$array = array("Gelb", "Grün", array("Rot", "Blau"));
echo "<pre>";
printr($array);
echo "</pre>";
?>

Statt dem print_r haben wir den "underscore" (_) weggelassen, dafür bekommen wir sofort die Quittung:

Fatal error: Call to undefined function printr() in C:\xampp\htdocs\temp_wg_calc.php on line 4

Mit dieser Fehlermeldung bekommen wir gesagt, dass in der Zeile 4 eine Funktion aufgerufen werden soll die nicht definiert ist.

Was auch sehr häufig passiert, man vergisst ein double quote ab Beginn oder Ende des echo Befehls:

<?php
$array = array("Gelb", "Grün", array("Rot", "Blau"));
echo <pre>";
print_r($array);
echo "</pre>";
?>

Bekommen wir diese Meldung:


Parse error: syntax error, unexpected '<' in C:\xampp\htdocs\temp_wg_calc.php on line 3

Er sagt uns, dass wir in Zeile 3 einen unerwarteten Fehler haben. und haben nach dem echo das double quote vergessen. Ist dieser Fehler korrigiert kann das Script wie gewünscht arbeiten.

Hinweis: abhängig vom verwendeten Editor können Sie in der Regel die Tastenkombination [Strg+G] verwenden um zu der Zeile zu springen die den Fehler verursacht. So erübrigt sich lästiges Suchen nach dem Fehler. Sollten Sie den Windows eigenen Editor verwenden und die Tastenkombination funktioniert nicht - gehen Sie im Menü auf "Format" und klicken auf Zeilenumbruch. Danach können Sie Strg+G einsetzen.