Vermeidung von PHP-Fehlermeldungen
Ein PHP-Programm kann längst nicht alles bewerkstelligen, werden vom Programmierer Bearbeitungsschritte ausgeführt, die das Programm nicht versteht, wird im Regelfall eine Fehlermeldung ausgegeben. Diese ist dazu da, dem Programmierer darauf hinzuweisen, dass sein Vorhaben so nicht möglich ist. Durch die Ausgabe der Fehlermeldung wird auch der Fehler (der falsche Bearbeitungsschritt) abgefangen.
![[Bildschirmfoto]
Vermeidung von PHP-Fehlermeldungen [Bildschirmfoto]
Vermeidung von PHP-Fehlermeldungen](img/fehlermeldungen.png)
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 auseinandersetzen muss und dabei die Programmiersprache erlernt
Die Fehlermeldung zeigt die Zeile an wo der Fehler auftrat, 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 Kenntnisse 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
oder bingen
, 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.
Read The Fine Manual

Auf dieser Seite finden Sie:
- Gründe für das entstehen von Fehlermeldungen
- Vermeidung von Fehlern
- Zeichenmaskierung - Einfache oder doppelte Anführungszeichen
- Fehlermeldungen ausschalten oder unterdrücken
- Fehlermeldungen anzeigen und analysieren
- PHP-Fehlermeldungen und Warnungen
- Weitere Fehlerquellen
- Fazit
Gründe für das entstehen von Fehlermeldungen
- Fehlerhafte PHP-Syntax (was sonst!).
- Falscher Programmablauf (Logik-Fehler).
- Schreibfehler bei Variablennamen.
- Falsche Variablen-Werte eingetragen.
- Semikolon (Strichpunkt) ; am Zeilenende vergessen.
- Vergessen eines Punktes . beim verbinden von Zeichenketten.
- Runde/Geschweifte Klammer ( )/{ } vergessen oder zu häufig gesetzt.
- 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 (im Handbuch nach schauen).
Vermeidung von Fehlern
Ich empfehle jeden Programmierer die Verwendung eines Programmeditors,
der über eine Texthervorhebung 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.

Durch farbiges Anzeigen der Sprachelemente vereinfacht Notepad++ das Schreiben von Programmen.
- 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.
Längere Variable-Namen können Sie mit dem Binnenmajuskel (camel case)
lesbarer schreiben
$fehlerMeldungSichern
. - Verwenden Sie keine Abkürzungen bei Variablen, die niemand kennt, Variablen dürfen Sie auch nicht durchnummerieren
($var1, $var2, $i, $a etc.) Auf keinen Fall Abkürzungen verwenden, die zweideutig sein können.
Verwenden Sie dagegen "sprechende" Variablen ($zaehler, $counter, $hits).
- 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. - Wenn das Programm zu schnell durchläuft oder Sie Zwischenergebnisse einer Variable benötigen, fügen Sie an markanten Stellen
var_dump($variable); und dann
exit; ein um den Vorgang abzubrechen.
- Viele Fehler können nur indirekt erkannt werden, da mit PHP erzeugte Fehler Teil der Browser-Ausgabe werden und somit den
Anzeigegegebenenheiten des Browsers unterliegen. Es ist dringend zu empfehlen,
zur Fehleranalyse immer den Browserquelltext heranzuziehen, da nur dort die Sichtbarkeit
aller zur Verfügung stehenden Informationen gewährleistet ist.
Es kann auch sein, das durch fehlerhafte HTML-Elemente oder Design, PHP-Fehlermeldungen nur dort (im Quelltext) sichtbar sind. » Quelltext mit Format
Zeichenmaskierung - Einfache oder doppelte Anführungszeichen
Verwenden Sie für die Ausgabe mit echo nur einfache Anführungszeichen (Zeile 5), ansonsten müssen Anführungszeichen innerhalb von Anführungszeichen maskiert werden.
Besonders beim Kontextwechsel (HTML-Attribute, mit PHP erzeugter JavaScript- oder CSS-Code) ist es wichtig die Anführungszeichen richtig zu maskieren.
1
2
3
4
5
6
7
8
9
10
<?php
$vorname = 'Reiner';
$nachname = "Zufall";
echo '<input type="text" name="Name" value="' . $vorname . ' ' . $nachname . '" style="width: 200px;">';
echo "<input type=\"text\" name=\"Name\" value=\"$vorname $nachname\" style=\"width: 200px;\">";
echo '<input type="button" value="Meldung" onclick="alert(\'Hallo Welt!\');">';
?>
Fehlermeldungen ausschalten oder unterdrücken
Fehlermeldungen ausschalten:
<?php error_reporting(0); ?>
Fehlermeldungen unterdrücken:
<?php echo @$variable; ?>
Das @-Zeichen (Fehler-Kontroll-Operator) dient zur Fehler-Unterdrückung. Zum Beispiel wenn eine Variable nicht deklariert wurde. Auch wenn dadurch der Fehler nicht mehr angezeigt wird, tritt dieser weiterhin auf. Falls weitere Probleme in diesem Ausdruck auftreten sollten, werden diese auch unterdrückt. So kann es zu schwerwiegenden Problemen kommen, ohne dass man einen Hinweis bekommt, wo diese liegen.
➤ Man sollte immer erst eine Alternative suchen bevor man das @-Zeichen verwendet, dieses Zeichen gilt allgemein als schlechter Programmierstil.
Grundsätzlich ist hierzu folgendes zu empfehlen:
Online sollten Fehlermeldungen nicht ausgegeben werden, da es die Besucher eher verwirrt, als dass es hilfreich wäre. Angreifer gewinnen durch diese Fehlermeldungen hilfreiche Tipps! Mehr dazu unter » PHP mit Sicherheit
Offline (auf dem lokalen Webserver) und zum testen sollten die Fehlermeldungen 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.
Der @ Operator unterdrückt in PHP 8 keine "Fatal Errors" mehr.
Das folgende PHP-Schnipsel zeigt Fehlermeldungen nur bei "localhost" an:
<?php error_reporting($_SERVER["SERVER_NAME"] == "localhost" ? E_ALL : 0); ?>
Fehlermeldungen anzeigen und analysieren
Manche Webserver sind so konfiguriert das Fehlermeldungen nicht ausgegeben werden. Um nun den erstellten PHP-Code zu verbessern lassen Sie alle Fehlermeldungen bei der Entwicklung anzeigen.
<?php 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.
E_ALL | - Zeigt alle Fehler, Warnungen und Benachrichtigungen an. |
E_ERROR | - Laufzeit-Fehler, die nicht behoben werden können. |
E_WARNING | - Laufzeit-Warnungen, das Skript wird nicht abgebrochen. |
E_PARSE | - Parser-Fehler (Syntax-Fehler). |
E_NOTICE | - Benachrichtigungen zur Laufzeit. |
E_STRICT | - Benachrichtigungen, ausgeführter Programmcode nicht mit zukünftigen PHP-Versionen kompatibel. |
Fehlermeldungen 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); // Alle aktuell definierten Variablen anzeigen var_dump(get_defined_vars());
Alle definierten PHP-Funktionen anzeigen
MySQL Fehlermeldungen anzeigen:
// mysqli()-Funktion - Beispiel 1 // Die SQL-Anweisung immer in eine Variable schreiben $sql = "SELECT * FRUM `gaestebuch`"; // SQL-Anweisung ausführen und etwaigen Fehler anzeigen $datensatz = mysqli_query($sql) or die(mysqli_error() . $sql); // mysqli()-Funktion - Beispiel 2 if (mysqli_query($sql)) { echo "OK"; } else { echo "Fehler: " . mysqli_error() . $sql; }
// PDO()-Funktion - Beispiel 1 if ($DB->query($sql)) { echo "OK"; } else { echo 'Fehler: '; print_r($DB->errorInfo()); } // PDO()-Funktion - Beispiel 2 try { $DB->query($sql); echo "OK"; } catch (PDOException $e) { echo $e->getMessage(); }
Dieses PHP-Programm gibt (von MySQL) etwa folgende Fehlermeldung (auf englisch) zurück:
"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 'FRUM `linkliste`'
at line 1 ..."
Der SQL-String für die Datenbankabfrage ist fehlerhaft. Lassen Sie sich den fertigen String der entsprechenden Query vor der Anfrage testweise ausgeben.
Eine lange PHP oder SQL-Anweisung sollte in mehrere Zeilen aufgeteilt werden, erstens macht es die Anweisung ü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` DESC LIMIT 0,20";
➤ Wichtig ist, sich einen sauberen Stil im schreiben von PHP/MySQL anzueignen, dann schleichen sich weniger Fehler ein und gemachte Fehler findet man schneller.
Zu einer klaren Programmstruktur gehören auch begleitende Kommentare, die den Sinn von Programmierschritten auch noch längere Zeit nach der Erstellung nachvollziehbar machen. Die Fehlersuche oder eine Programmergänzung lassen sich so einfacher bewerkstelligen.
PHP Fehlermeldungen
Die Fehlermeldungen des PHP-Interpreters sind allgemein einer der nachfolgenden Kategorien zugeordnet:
- Syntaxfehler (Parse Error)
- Warnung (Warning)
- Schwerwiegender Fehler (Fatal Error)
- Hinweis (Notice)
- Missbilligt (Deprecated)
- Strict Standards
➤ Mit Beginn von PHP 8 werden die Fehlermeldungen genauer, oft wird mitgeteilt welcher Fehler gemacht wurde.
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 (der Programmiersprache). Bei einem Syntaxfehler bricht der Interpreter die Verarbeitung des Programms ab.
Parse error: syntax error, unexpected ...
Das bedeutet meist das man ein Zeichen (z. B.: den Strichpunkt ;) vergessen hat.
Parse error: syntax error, unexpected T-STRING ...
Parse error: syntax error, unexpected T_CONSTANT_ENCAPSED_STRING ...
Bei solchen Fehlermeldungen sind meistens die Grenzen der Zeichenketten (Anführungszeichen) falsch oder nicht gesetzt.
Parse error: syntax error, unexpected $end in ...
Ein unerwartetes $end (steht für Ende des Programms), tritt beispielsweise auf, wenn eine (geschweifte) Klammer
zu viel oder zu wenig notiert wurde.
Ab PHP 8 lautet diese Fehlermeldung: Parse error: Unclosed '{' on line 3 in ...
Parse error: syntax error, unexpected T_IS_EQUAL, expecting ',' or ')' in ...
Ein Komma-Fehler oder ein Klammer-Fehler wurde gefunden.
Parse error: parser stack overflow in ...
Der Hauptspeicher des Servers ist verbraucht. Haben Sie eine Endlosschleife im Script?
Parse error: syntax error, unexpected T_DOUBLE_ARROW in ...
Verwende bei der Zuweisung eines Arrays =>
anstelle von >=
. Und
beim vergleichen von Werten <=
statt =<
oder >=
statt =>
.
Parse error: syntax error, unexpected 'use' (T_USE) in ...
Das use
-Schlüsselwort muss im äußersten Bereich einer Datei (des globalen Bereichs) oder innerhalb von Namespace-Deklarationen deklariert werden.
Dies liegt daran, dass der Import zur Kompilierungszeit und nicht zur Laufzeit erfolgt, sodass er nicht blockiert werden kann.
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 Ergebnissen kommen.
Warning: Wrong parameter ... for ...
Entweder werden zu viele Parameter oder falsche Parameter an eine Funktion übergeben.
Warning: Undefined variable: test in ...
Warnung tritt auf weil eine Variable ($test) nicht definiert ist.
Warning: Invalid argument supplied for foreach() in ...
Die foreach-Schleife erwartet ein Array.
Warning: Missing argument 2 for foo(), called in ...
Es fehlen ein oder mehrere Parameter bei der Funktionsausgabe.
Warning: date() expects at least 1 parameter, 0 given in ...
Es fehlen ein oder mehrere Parameter bei der Funktionsausgabe date()
.
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 ...
Aufrufe von header() (oder session_start(),
setCookie()) müssen vor allen anderen Ausgaben an den Client (Browser) erfolgen.
Es spielt keine Rolle, ob die Ausgabe durch einen HTML-Bereich vor dem Script oder durch
das PHP-Script selbst entsteht. Dabei reicht als "HTML-Bereich" z. B. bereits ein einziges
Leerzeichen vor dem öffnenden PHP-Tag aus.
Wenn die Datei als Zeichensatz UTF-8 verwendet, so muss im Editor „UTF-8 ohne BOM” ausgewählt werden.
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 (siehe vorherigen Absatz).
Warning: fopen("datei.txt","r+") - No such file or directory in ...
Warning: include(datei.php): failed to open stream: No such file or directory in ...
Die Datei, die das Script öffnen sollte, ist unter dem angegebenen Pfad 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
Warning: mail() has been disabled for security reasons in ...
Eine PHP-Funktion (mail()) wurde (vom Provider) aus Sicherheitsgründen deaktiviert.
Warning: Division by zero in ...
Diese Fehlermeldung ist eine Warnung die dann entsteht wenn PHP eine mathematische
Aufgabe ausführen soll die ungültig ist -> zum Beispiel eine Division durch 0.
Warning: Supplied argument is not a valid MySQL result resource in ...
Diese Fehlermeldung kann kommen wenn keine Verbindung zur Datenbank hergestellt werden konnte.
Warning: Unknown error ...
Ein "unbekannter Fehler", dieser Fehler konnte nicht genau bestimmt werden.
Warning: Illegal mix of collations (utf8_unicode_ci,IMPLICIT) and (utf8mb4_general_ci,COERCIBLE) for operation 'like' in ...
Die Suche mit LIKE (%foo%) kann nur mit einer einheitlichen Sortierung (entweder utf8_unicode_ci
oder utf8mb4_general_ci
) in den
Spalten der DB-Tabelle durchgeführt werden.
Schwerwiegender Fehler (Fatal Error)
Ein schwerwiegendes Problem wie etwa eine nicht deklarierte Funktion. Bei einem schwerwiegenden Fehler bricht der Interpreter die Verarbeitung des Programms ab.
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 (mehr) in der aktuellen PHP
Version vorhanden ist oder (in der php.ini-Datei) deaktiviert wurde.
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
(blockiert) und nicht wieder freigegeben.
Fatal error: Allowed memory size of **** bytes exhausted (tried to allocate **** bytes) in ...
Die Grenze des maximalen Speicherplatzverbrauch (im Arbeitsspeicher) eines PHP-Scripts wurde überschritten (haben Sie eine Endlosschleife im Programm?).
Fatal error: Cannot break from 1 loop(s) from nesting level 0
Wird eine Schleife in einer bereits mit include() eingeschlossenen PHP-Datei ausgeführt, so darf die Schleife nicht mit dem Befehl break; beendet werden.
Fatal error: Uncaught exception 'PDOException' with message 'SQLSTATE[HY000] [2002] ...
Die Verbindung zur Datenbank ist fehlgeschlagen. Überprüfen Sie, ob der Host, Benutzername und das Kennwort richtig eingegeben wurden.
Fatal error: Call to a member function prepare() on a non-object in ...
Der PDO-Funktion prepare()
wurde kein Objekt (Datenbank-Verbindung) zugewiesen.
Fatal error: Uncaught Error: Call to a member function rowCount() on boolean in ...
Fatal error: Uncaught Error: Call to a member function fetchAll() on boolean in ...
Tritt in Zusammenhang mit einer Datenbank-Tabellen Abfrage auf, die verwendete Anfrage (SQL) ist fehlerhaft!
Fatal error: Uncaught PDOException: SQLSTATE[42S22]: Column not found: 1054 Unknown column 'name' in 'field list' in ...
Diese Fehlermeldung ist eindeutig, MySQL enthält einen Fehler und gibt diesen an PHP (die PDOException) weiter.
Fatal error: Uncaught PDOException: SQLSTATE[42000]: Syntax error or access violation: 1064 You have an error in your SQL syntax; ...
Diese Fehlermeldung ist eindeutig, MySQL enthält einen Fehler und gibt diesen an PHP (die PDOException) weiter.
Fatal error: Uncaught PDOException: SQLSTATE[HY093]: Invalid parameter number: number of bound variables does not match number of tokens in ...
Diese Fehlermeldung tritt bei PDO - Prepare auf, wenn die Anzahl der übergebenen Variablen nicht passt oder fehlerhaft ist.
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.
Notice: Use of undefined constant ...
Eine unbekannte Konstante wurde aufgerufen. Tritt auch auf wenn in einer Variable die
Anführungszeichen vergessen wurden z. B.: $_POST[name] (Richtig wäre: $_POST["name"]).
Notice: Undefined offset: 2 in ...
Diese Meldung tritt meist im Zusammenhang mit der Verwendung von Arrays auf.
Wenn ein Index-basierter Zugriff auf ein Array mit einem Index erfolgt, der größer ist,
als die Anzahl der Elemente minus 1, dann erscheint diese Fehlermeldung.
Mit isset() können Sie zuvor überprüfen ob der Index-Wert existiert.
Notice: A non well formed numeric value encountered in ...
„Einen nicht wohlgeformten numerischen Wert angetroffen”
Der numerische Wert enthält irgendwelche zusätzlichen Zeichen (Zeilenumbruch, Tabulator, etc.).
Notice: A session had already been started - ignoring session_start() in ...
Eine Session wurde bereits gestartet.
Notice: Undefined index: 13 in ...
Der Index-Wert ist in dem Array nicht vorhanden (z. B.: mit isset($arrayName[13]) überprüfen).
Missbilligt (Deprecated)
Wenn eine PHP-Funktion als missbilligt (engl.: deprecated) gekennzeichnet ist, diese könnte bei der nächsten PHP Version heraus fliegen!
Deprecated: Required parameter $arr follows optional parameter $prio in ...
(PHP 8) Wenn Variablen in eine Funktion übergeben werden, mussen zuerst die erforderlichen Parameter übergeben werden und
dann die optionalen Parameter function ($vara, $varb, $varc=5)
.
Deprecated: Function ereg() is deprecated in ...
Die Funktion ereg() ist seit PHP 5.3.0 veraltet. Sich auf diese Funktion zu verlassen ist in keiner Weise empfehlenswert.
Der Ersatz für ereg() ist » preg_match - PHP Manual.
Deprecated: mysql_connect(): The mysql extension is deprecated and will be removed in the future: use mysqli or PDO instead in ...
Die PHP MySQL-Funktionen mysql_connect(), mysql_query(), etc. sind als
missbilligt eingestuft (seit PHP 5.5.3 und wurden in PHP 7 entfernt). Verwenden Sie PDO (PHP Data Objects) oder mysqli().
Strenge Standards (Strict Standards)
Strict Standards: date(): It is not safe to rely on the system's timezone settings. You are *required* to use the date.timezone
setting or the date_default_timezone_set() function. In case you used any of those methods and you are still getting this warning, you most
likely misspelled the timezone identifier. We selected 'Europe/Berlin' for 'CET/1.0/no DST' instead in ...
Ab PHP7 wird diese Meldung ausgeben:
Strict Standards: date(): We selected 'Europe/Berlin' for 'CEST/2.0/DST' instead in ...
Um die Zeitzone einzustellen verwenden Sie: date_default_timezone_set("Europe/Berlin");
» php.net/manual/de/timezones.europe.php
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 enteckt man viele Fehler und Schwachstellen erst wenn die Homepage vom Testserver in die freie Wildbahn (ins Web) umgezogen ist.
Fazit
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
Um PHP-Scripte sicherer zu machen, lesen Sie den Artikel » PHP mit Sicherheit
Richtig debuggen
- Man bemerkt, dass ein Skript nicht das tut, was es soll.
- Man schreibt an den Anfang des Scriptes die Zeile:
error_reporting(-1);
- Man verwendet
ini_set('display_errors', true);
damit die Fehler auch angezeigt werden. - Man versucht, die Stelle die daran Schuld sein kann, schon einmal einzugrenzen. Falls dies nicht geht, wird zunächst das komplette Skript als fehlerhaft angesehen.
- An markanten Stellen im Skript lässt man sich wichtige Variableninhalte ausgeben
print_r();
,var_dump()
und ggf. auch in bedingten Anweisungen eine kurze Ausgabe machen, um zu überprüfen, welche Bedingung ausgeführt wurde. - Schritt 5 wird so lange wiederholt, bis Unstimmigkeiten im Skript auffallen
- Damit hat man das Problem (die Unstimmigkeit) gefunden und kann versuchen diese zu beheben. Hierzu dienen dann die PHP-Dokumentation und andere Quellen als Ratgeber.
- Lässt sich das konkrete Problem trotzdem nicht beheben, kann man in Foren um Rat fragen.
- Das Programm läuft und man kann die Debug-Ausgaben wieder entfernen.