Hallo
Und was ist mit Laufzeitfehlern?
Beispiel? ich weiß nicht, worauf du hinaus willst.
Ok, wich will mal versuchen, Dich da ins Bild zu setzen:
$fh = fopen($dateiname, 'rb+');
Sollte keinerlei Meldungen auslösen, wen die Datei vorhanden ist, für den Scriptuser lesbar und schreibbar ist, und nicht gerad durch einen anderen Prozess durch dio_Funktionen geöffnet und gesperrt ist.
Du siehst also aus dem obigen Satz, dass eine Reihe von Laufzeitbedingungen vorhanden ist:
- Datei existiert im Zeitpunkt des Zugriffes (ein vorheriges file_exists() taugt nichts)
- Datei ist nicht gesperrt durch einen Prozess, der DIO benutzt
- Datei ist lesbar für den anfordernden Prozess
- Datei ist beschreibbar für den anforderden Prozess
Dies sind vier Fehlermöglichkeiten, die mir spontan einfallen. dazu gibt es in Netzen auch noch weitere Fehler, wie z.B.
- fehlende Netzwerkverbindung
- fehlende rechte im Netzwerk
Das Manual zu fopen sagt: "Scheitert das Öffnen der Datei, gibt die Funktion FALSE zurück.". Also prüfe ich darauf.
Dein obiger Code gibt mir die erwartete Warnung aus. Mit der nachfolgenden Prüfung (s.u.) bleibt die Warnung da, da der Fehler ja vor der Prüfung auftritt.
if ($fh===false) {
echo "<p>Konnte Datei nicht öffnen.</p>";
} else {
echo "<p>Datei wurde geöffnet.</p>";
}
Aber genau das ist doch ein Paradebeispiel dafür, dass man sich während der Entwicklung sämtliche Fehler ausgeben lassen soll, um sie auszumerzen, und im Produktiveinsatz derartige Fehler in ein für den Anwender nicht zugängliches Log gehören. Dabei ist es völlig egal, warum der Fehler auftritt. Deine ersten víer Punkte liegen unmittelbar in der Verantwortung des Entwicklers bzw. Administrators der Anwendung. Das sollte auch für den Punkt 6 (fehlende Rechte im Netzwerk) gelten. Einzig die fehlende Netzwerkverbindung kann (ohne Manipulationen[1]) zur Laufzeit auftreten.
Wenn nun Fehlermeldungen in der Ausgabe unterbunden sind (mMn vorzugsweise skriptweit und nicht befehlsgebunden) und stattdessen in ein Log geschrieben werden sowie eine angemessene Meldung an den Anwender geht (z.B. "Ihre Anfrage konnte nicht ausgeführt werden, eine Meldung an den Betreiber ...") ist die Aufgabe "Fehler abfangen" nach meiner Meinung erfüllt. Im Log steht dann ja der Grund für den Fehler.
[1] Mit Manipulationen meine ich z.B. einen Angriff auf den Server mit Löschung der zu lesenden Datei.
Tschö, Auge