Vermeidung von PHP-Fehlermeldungen.
Jeder der schon einmal mit PHP zu tun hatte kennt diese Fehlermeldungen vom PHP-
Interpreter*.
Diese Fehlermeldungen haben den Vorteil dass sich der Programmierer genauer mit dem PHP-Code auseinander setzen muß und dabei die Programmiersprache erlernt ;)
Der PHP-Interpreter zeigt die Zeile an wo der Fehler auftritt (Nicht unbedingt in welcher Zeile dieser gemacht wurde!)
Sowie den Namen der Datei die den Fehler produziert hat und einen Hinweis zur möglichen Ursache.
Einfache Kentnisse in der englischen Sprache reichen zumeist aus um die Fehlermeldungen zu verstehen (ein Wörterbuch hilft!). Sie können aber auch nach
der Fehlermeldung "googeln", in zahlreichen Foren haben andere ähnliche
Probleme und vielleicht auch Lösungsvorschläge.
Bevor Sie jedoch jemanden aus einem Forum mit Ihrem Problem belästigen, suchen Sie selbst nach dem Fehler.
- • Auf dieser Seite finden Sie:
- • Gründe für das entstehen von Fehlermeldungen.
- • Fehlervermeidung mit Hilfe eines Editors der über eine Syntax-Highlighting-Funktion verfügt.
- • Die häufigsten PHP-Fehlermeldungen in der Übersicht.
- • Fehlermeldungen ausschalten oder unterdrücken.
- • Alle Fehlermeldungen anzeigen und analysieren.
- • Fehlermeldungen bei MySQL anzeigen
- • Weitere Fehlerquellen
Gründe für das entstehen von Fehlermeldungen: (TOP 13 der Fehlermeldungen)
- Fehlerhafte PHP-Syntax.
- Schreibfehler bei Variablennamen.
- Falsche Variablen-Werte eingetragen.
- Semikolon (Strichpunkt) ; am Zeilenende vergessen.
- Vergessen eines Punktes . beim verbinden von Zeichenketten.
- Geschweifte Klammer { } vergessen oder zu häufig gesetzt.
- Runde Klammer ( ) vergessen oder zu häufig gesetzt.
- Anführungszeichen " vergessen oder an falscher Stelle.
- Einfaches Anführungszeichen ' vergessen oder an falscher Stelle.
- Codesequenzen nach dem "Kopieren und Einfügen" nicht angepasst.
- Falsche Groß.- und Kleinschreibung.
- Gleiche Variablennamen sind mehrmals vergeben.
- Falsche Anwendung einer PHP-Funktion.
• Ein gutes PHP-Script verwendet sehr individuelle Variable-Namen, am besten mit einem festen Vorzeichen. Nur so kann erreicht werden, dass sich verschiedene Scripte nicht ins Gehege kommen.
• Verwenden Sie keine Abkürzungen bei Variablen, die niemand kennt, Variablen dürfen Sie auch nicht durchnummerieren ("$var1", "$var2", etc.) Auf keinen Fall Abkürzungen verwenden, die zweideutig sein können.
• Beim Programmieren ist das Prüfen das
A und O.
Sie müssen stets prüfen, ob das was
Sie gedacht haben auch tatsächlich ausgeführt wurde. Und zwar nicht nur indem Sie die Seite anschauen
sondern vor allem auch mit Kontrollausgaben die Ergebnisse der einzelnen Teilschritte.
Hilfreich ist es meist, sich Variablen und Ergebnisse von Ausdrücken anzeigen zu lassen, zum Beispiel mit
echo oder mit
print_r() /
var_dump(), und mit den erwarteten Werten zu vergleichen.
Manchmal findet sich ein Hinweis auf einen Fehler im
Quelltext* der ausgegebenen HTML-Seite. Es kann auch sein, das durch fehlerhafte HTML-Tags, PHP/MySQL-Fehlermeldungen nur dort (im Quelltext) sichtbar sind.
Fehlervermeidung
Ich empfehle jeden Webmaster die Verwendung eines Programmeditors,
der über eine
Syntaxhervorhebung für HTML, CSS, PHP und JavaScript verfügt.
Gute Editoren zeigen alle PHP-nativen* Funktionen in einer anderen Farbe an.
Durch die Farbhervorhebung findet man auf diese Art sehr einfach vergessene Abschluss-
Tags, ausgeklammerten Code und auch über die Anzeige von Zeilennummern die Position,
an der ein Fehler aufgetreten ist.
*
Beispiel: Notepad++ (Bildschirmfoto) -
notepad-plus.sourceforge.net
Tipp
Nützliche und kostenlose Editoren für Webmaster - Hier finden Sie die besten Editoren mit einer kurzen Beschreibung dazu.
•
Die häufigsten PHP-Fehlermeldungen und Warnungen:
• Parse error: syntax error, unexpected ...
Das bedeutet meist das man ein Zeichen (z.B.: Strichpunkt ";") vergessen hat.
• Parse error syntax error, unexpected T-STRING ...
Bei solchen Fehlermeldungen sind meistens die Grenzen der Zeichenketten falsch oder garnicht gesetzt.
• Parse error: syntax error, unexpected $end in ...
Das bedeutet meist das man eine Klammer "}" vergessen hat.
• Parse error: parser stack overflow in (script)
Der Hauptspeicher des Servers ist verbraucht. Haben Sie eine Endlosschleife im Script?
• Warning: Wrong parameter ... for ...
Entweder werden zuviele Parameter oder falsche Parameter an eine Funktion übergeben.
• Warning: Undefined variable
Warnung tritt auf weil eine Variable nicht definiert ist.
Kann beim Umstieg von PHP4 auf PHP5 Versionen passieren.
• Warning: Invalid argument supplied for foreach() in ...
Die
foreach-Schleife erwartet ein Array.
• Warning: Failed opening 'file.php' for inclusion
Tritt bei
include() oder
require() auf (einbinden einer Datei).
Entweder existiert die Datei nicht, oder die Pfadangabe ("
../ordner/file.php") wurde falsch geschrieben (Siehe dazu: »
10 Regeln zu Dateinamen).
• Warning: Cannot add header information - header was already sent in file.php on line ...
Wenn man einen Text ausgibt und die
header() Funktion aufruft erhält man diese Fehlermeldung, da für den Text, der ausgegeben wurde bereits ein HTTP-Header gesendet wurde.
• Warning: Cannot send session cookie - headers already sent
Tritt bei Sessions auf.
Meist liegt es daran das die Session nicht sofort in der ersten Zeile gesendet wurde.
• Warning: fopen("datei.txt","r+") - No such file or directory
Die Datei, die das Script öffnen sollte, ist nicht vorhanden.
• Warning: ... failed to create stream(~failed to open stream) : Permission denied in ....
Die Datei oder das Verzeichnis besitzt keine Schreib.- und/oder Leserechte
(Siehe dazu: »
Chmod - Schreib- und Zugriffsrechte).
• Fatal error: Call to unsupported/undefined function ... on line ...
Entweder hat man eine selbst-definierte Funktion falsch geschrieben oder man verwendet eine Funktion die nicht in der PHP Version vorhanden ist.
• Fatal error: Maximum execution time exceeded
Gibt an das eine MAX Lauf-Zeit verstrichen ist. Das Script benötigt mehr CPU-Zeit, als ihm von der Serverkonfiguration her erlaubt wird.
Ursachen: Datei zu groß, von einem anderen Prozess belegt oder schlicht gelocked und nicht wieder freigegeben.
• Fatal error: Call to unsupported/undefined function ... in (script) on line ...
Sie haben eine Fuktion angesprochen, die nicht existiert. Prüfen Sie in der angegebenen Zeile nach allen Ausdrücken mit runden Klammern.
• Notice: Use of undefined constant ...
Eine unbekannte Konstante wurde aufgerufen.
Auf der Website
www.php-fehlermeldungen.de
finden Sie zahlreiche Fehlermeldungen und Ihre Ursachen dazu aufgelistet.
Die Fehlermeldungen des PHP-Interpreters sind allgemein einer der nachfolgenden Kategorien zuordbar:
- Syntaxfehler (Parse Error): Während der syntaktischen Analyse des Skriptes (englisch parsing) wurde ein Fehler im Skript gefunden wie etwa ein fehlendes Semikolon am Ende einer Anweisung oder eine falsch gesetzte Klammer. Der Quellcode entspricht also nicht der erlaubten Grammatik. Bei einem Syntaxfehler bricht der Interpreter die Verarbeitung des Programms ab.
- Schwerwiegender Fehler (Fatal Error): Ein schwerwiegendes Problem wie etwa eine nicht deklarierte Funktion. Bei einem schwerwiegenden Fehler bricht der Interpreter die Verarbeitung des Programms ebenfalls ab.
- Warnung (Warning): Ein warnender Hinweis des Interpreters, dass er auf etwas Zweifelhaftes gestoßen ist. Dies kann beispielsweise ein Funktionsaufruf mit zu wenigen oder zu vielen Parametern sein. Bei Warnungen wird die Verarbeitung nicht unterbrochen; es kann aber zu falschen Ergebnisses kommen.
- Hinweis (Notice): Ein Hinweis oder Ratschlag des Interpreters, der meistens auf einen schlechten Programmierstil hinweist. So etwa wenn Variablen ausgegeben werden ohne ihnen vorher einen Wert zuzuweisen. Oder wenn ein PHP-Befehl als missbilligt (deprecated) gekennzeichnet ist.
•
Fehlermeldungen ausschalten
error_reporting(0);
Grundsätzlich ist hierzu folgendes zu empfehlen:
Online sollten Warnungen nicht ausgegeben werden, da es die Besucher eher verwirrt, als dass es hilfreich wäre.

Angreifer gewinnen durch diese Fehlermeldungen hilfreiche Tipps!
Offline und zum testen sollten die Warnungen allerdings auf jeden Fall angezeigt werden, weil oft nur so Fehler entdeckt werden,
die von PHP nicht ausgebügelt werden können und somit unbemerkt zu Fehlfunktionen führen.
Das folgende PHP-Schnipsel zeigt Fehlermeldungen nur bei "
localhost" an:
<?php
error_reporting($_SERVER["SERVER_NAME"] == "localhost" ? E_ALL : 0);
?>
•
Fehlermeldungen unterdrücken
echo @$variable;
Das
@-Zeichen (Fehler-Kontroll-Operator) dient zur Fehlerunterdrückung.
Zum Beispiel wenn eine Variable nicht deklariert wurde.
Man sollte immer erst eine PHP-Alternative suchen bevor man das
@-Zeichen verwendet,
dieses Zeichen gilt allgemein als schlechter Programmierstiel.
•
Alle Fehlermeldungen anzeigen
Um den erstellten PHP-Code zu verbessern lassen Sie alle Fehlermeldungen anzeigen.
error_reporting(E_ALL);
ini_set( 'display_errors', 'On' ); // Optional
es werden Fehlermeldungen vom Typ: E_ERROR, E_WARNING, E_PARSE und E_NOTICE angezeigt.
•
Weitere Möglichkeiten um Fehler zu analysieren:
// Array anzeigen
print_r($array);
var_dump($array);
// Gesendete POST-Variablen anzeigen
print_r($_POST);
// Gesendete GET-Variablen anzeigen
print_r($_GET);
// Eingebundene Dateien eines PHP-Scriptes anzeigen
$IncludeDateien = get_included_files();
print_r($IncludeDateien);
// Geladene Erweiterungen anzeigen
$GeladeneErweiterungen = get_loaded_extensions();
print_r($GeladeneErweiterungen);
Fehlermeldungen bei MySQL anzeigen:
// SQL-Befehl immer in eine Variable schreiben
$sql = "SELECT * FROM2 `linkliste`";
// SQL-Befehl ausführen und etwaigen Fehler anzeigen
$datensatz = mysql_query($sql) or die(mysql_error() . $sql);
// Oder:
if (mysql_query($sql)) {
echo "OK";
}
else {
echo "Fehler: " . mysql_error() . $sql;
}
Dieses PHP-Programm erzeugt etwa folgende Fehlermeldung (auf englisch):
"You have an error in your SQL syntax. Check the manual that corresponds
to your MySQL server
version for the right syntax to use near 'FROM2 `linkliste`' at line 1"
Danach wird der SQL-Befehl ausgegeben:
SELECT * FROM2 `linkliste`
Ein langer SQL-Befehl sollte in mehrere Zeilen aufgeteilt werden, erstens macht es den Befehl übersichtlicher und zweitens wird bei einer Fehlermeldung die betreffende Zeile mit ausgegeben.
$sql = "SELECT
`vorname`,
`name`,
`strasse`,
`hausnummer`,
`plz`,
`ort`,
`vorwahl`,
`telefon`
FROM
`kunden`
WHERE
`ort` = 'Berlin'
ORDER BY
`name`
LIMIT
0,20";
Wichtig ist, sich einen sauberen Stil im Schreiben von PHP/MySQL anzugewöhnen. Dann schleichen sich weniger Fehler ein und gemachte Fehler findet man schneller.
• MySQL-Fehlermeldungen in einer Datei speichern
MySQL-Fehlermeldungen können in einer Datei gespeichert werden, diese Datei kann man dann auswerten und entsprechende Gegenmaßnahmen ergreifen.
if (mysql_query($sql)) {
...
}
else {
error_log(mysql_error(), 3, "fehlerdatei.log");
}
• Weitere Fehlerquellen:
• Falsche Anwendung einer PHP-Funktion —
Schauen Sie beim deutschen »
PHP-Manual vorbei.
• Eine bestimmte Browser-Funktionalität wurde abgeschaltet (z.B.: keine
Speicherung von Cookies!)
• Umzug auf einen anderen Webserver — Manche PHP-Programme funktionieren
dann einfach nicht mehr.
• Umstellung auf eine neuere PHP-Version oder Änderungen in der Datei "
php.ini".
• Bestimmte PHP-Bibliotheken sind nicht vorhanden. Zum Beispiel die
GD-Grafikbibliothek mit der man Grafiken erzeugen kann.
• Manche PHP-Programme sind auch abhängig von Daten die auf anderen
Webservern liegen (Datenquelle vorhanden?, Ladezeit beachten, Datenformat
wurde geändert, ...).
Leider endeckt man viele Fehler und Schwachstellen erst wenn die Homepage vom Testserver in die freie Wildbahn (ins Web) umgezogen ist.

Der Entwicklungsprozess ist mit der Fertigstellung von PHP-Programmen längst nicht beendet.
So führen Änderungen am Programmcode – sei es nun zu Erweiterungszwecken oder im Zuge einer
"Optimierungsmaßnahme" – immer wieder dazu, dass Funktionen oder Methoden, die zuvor ausgetestet
wurden und fehlerfrei funktionierten, plötzlich nicht mehr korrekt arbeiten. Auch kommt es vor, dass sich
Änderungen, die bei der Beseitigung von Programmfehlern getätigt werden, auf andere Programmteile
auswirken und somit an anderen Stellen im Code zu Fehlfunktionen führen.
„Es gibt nur 3 natürliche Feinde des Programmierers: Tageslicht, frische Luft und das unerträgliche Gebrüll der Vögel.” — Fehlermeldungen gehören also nicht dazu ;)
• Weiter führende Links:
Quelltext mit Format - Es gibt gute Gründe einen Quelltext zu formatieren