Fehlermeldung definieren (wenn include datei nicht gefunden)
Roman Thomas
- php
Hallo,
ich würde gerne eine eigene Fehlermeldung anzeigen, wenn PHP die Datei, die über include() eingebunden wird nicht findet (weil diese z.B. nicht mehr existiert)...
Ich will nur den Besuchern der Homepage ein "Warning:... failed open stream" ersparen.
Ist das möglich, und wenn ja, wie?
Hoffentlich kann man verstehen, was ich meine...
Noch mal kurz:
Ich will eine eigene Fehlermeldung anzeigen, wenn die Seite, die über den include() - Befehl aufgerufen wird nicht angezeigt werden kann.
Hallo.
Du prüftst einfach, ob die entsprechende Datei vorhanden ist oder nicht. Ist sie da, bindest du sie ein, ansonsten gibst du eine Fehlermeldung aus.
mfg
Hello,
Du prüftst einfach, ob die entsprechende Datei vorhanden ist oder nicht. Ist sie da, bindest du sie ein, ansonsten gibst du eine Fehlermeldung aus.
Das Vorhandensein der Datei gibt noch lange keine Auskunft darüber, ob sie hinzugeladen werden konnte. Man könnte nun zwar nach Deinem Vorschlag im Vorfeld alle Fehlermöglichkeiten abprüfen und ausschließen:
aber das hätte zeitkritisch betrachtet keinen wirklichen Aussagewert und wäre damit redundant, denn wenn das include() dann durchgeführt wird, kann immer noch ein Fehler auftreten.
Dann ist es einfacher und auch vollkommen legitim, nur den Erfolg der Operation zu erfragen. Entsprechende Stratgien habe ich beschrieben.
Liebe Grüße aus http://www.braunschweig.de
Tom
Ich habe gerade noch mal nachgelesen. Wenn man einfach das include in eine if packt, dann weiß man auch sofort, ob es erfolgreich war oder nicht.
CIAO Rhöner
Hello,
Ich habe gerade noch mal nachgelesen. Wenn man einfach das include in eine if packt, dann weiß man auch sofort, ob es erfolgreich war oder nicht.
CIAO Rhöner
Das hängt davon ab, welcher Rückgabewert in der include-Datei vereinbart worden ist. Wenn da z.B. "return false" oder "return 0" drinsteht, klappt das nicht. http://de2.php.net/manual/en/function.include.php
Der "normale" Rückgabewert von include() ist wohl auch absichtlich im aktuellen PHP-Manual nicht dediziert zugesagt. Ich kann jedenfalls keine verbindliche Aussage finden. Ältere Versionen haben zudem gar keinen Rückgabewert erzeugt.
Wenn es sichergestellt ist, dass include() und require() immer einen definerten Rückgabewert liefern, wäre das natürlich der einfachste Weg.
Liebe Grüße aus http://www.braunschweig.de
Tom
Hello,
das ist bei include() und include_once() nicht so ganz einfach, da beides keine Funktionen sind, sondern nur "Anweisungen" http://de2.php.net/manual/de/function.include-once.php. Sie haben daher keinen direkten Rückgabewert.
Die automatische Fehlerbehandlung lässt sich aber trotzdem mittels
@include_once($datei);
unterdrücken.
Wenn das Fehlertracking eingeschaltet ist
track_errors (siehe php.ini)
kann man anschließend in $php_errormsg nachschauen, ob eine Fehlermeldung eingetragen ist. Wenn jedoch strlen($php_errormsg) == 0 ist, kann man davon ausgehen, dass die include-Anweisung (oder auch require) funktioniert hat.
Außerdem empfiehlt es sich, jedem Modul einen eigenen Variablenbereich zuzuordnen. Die Variablen eines Moduls sammelt man am besten in einem Array, das den namen den Moduls trägt.
include("email.inc.php"); würde dann also im Script eine Array mit dem Namen $_email erzeugen. Die Existenz dieses Arrays kann man abfragen mittels isset($_email).
Man könnte dem Modul auch einen "Konstruktor" namens email() mitgeben. AUch die Existenz dieser Funktion ließe sich mittels function_exists() http://de2.php.net/manual/de/function.function-exists.php abfragen.
Konzepte gibt es also genug.
Eine einheitliche saubere Lösung bringt erst der Sprachstandard PHP 5 OOP.
Liebe Grüße aus http://www.braunschweig.de
Tom