Bei "include" Fehler eigene Errorseite
dave
- php
Guten Abend!
Ich bin am Rumbasteln an einer neuen Page und da sieht meine index.php so aus:
<?php
include header.inc.php
include config.inc.php
...
include $location.".php";
...
include footer.inc.php
?>
(bisschen vereinfacht)
Die $location wechselt von Seite zu Seite (Bsp. einmal $location = guestbook etc. ) .
In der Config-Datei ist ausserdem noch:
...
if (!isset($location)) {
$location = "news/index";
}
...
Damit das ganze beim ersten aufruf auf die News kommt.
Wenn ich jetzt aber eine nicht existierende Seite wie z.B.
http:localhost/test/index.php?location=seitegibtsnicht (Teste noch alles Lokal)
in der Browserzeile eingebe (was bisschen PHP - "gewandtere" User wohl öfters mal Probieren... XD) bekomme ich -wie erwartet- einen include-Fehler:
Warning: main(seitegibtsnicht.php): failed to open stream: No such file or directory in C:...\index.php on line 10
Warning: main(): Failed opening 'seitegibtsnicht.php' for inclusion (include_path='.;C:...\php\pear') in C:...\index.php on line 10
Wie kann ichs machen, dass wenn
include $location.".php"
$location zu keinem Ziel führt, anstelle des Fehlers eine Eigene Fehlerseite angezeigt bekomme? (Seite existiert nicht oder ähnlich)
Und wie mach ich das, damit wenn nach index.php?location= nichts mehr steht automatisch $location = "news/index" ausgegeben wird?
Gruss
switch ($_REQUEST['style']) {
case '':
include ('styles/standard.txt');
break;
case 'red':
include ('styles/red.txt');
break;
case 'green':
include ('styles/green.txt');
break;
case 'blue':
include ('styles/blue.txt');
break;
}
so hab ich es ;)
mfg
Guten Abend!
Ich bin am Rumbasteln an einer neuen Page und da sieht meine index.php so aus:
<?php
include header.inc.php
include config.inc.php...
include $location.".php";
...
include footer.inc.php
?>(bisschen vereinfacht)
Die $location wechselt von Seite zu Seite (Bsp. einmal $location = guestbook etc. ) .
In der Config-Datei ist ausserdem noch:
...
if (!isset($location)) {
$location = "news/index";
}...
Damit das ganze beim ersten aufruf auf die News kommt.
Wenn ich jetzt aber eine nicht existierende Seite wie z.B.
http:localhost/test/index.php?location=seitegibtsnicht (Teste noch alles Lokal)
in der Browserzeile eingebe (was bisschen PHP - "gewandtere" User wohl öfters mal Probieren... XD) bekomme ich -wie erwartet- einen include-Fehler:
Warning: main(seitegibtsnicht.php): failed to open stream: No such file or directory in C:...\index.php on line 10
Warning: main(): Failed opening 'seitegibtsnicht.php' for inclusion (include_path='.;C:...\php\pear') in C:...\index.php on line 10
Wie kann ichs machen, dass wenn
include $location.".php"
$location zu keinem Ziel führt, anstelle des Fehlers eine Eigene Fehlerseite angezeigt bekomme? (Seite existiert nicht oder ähnlich)
Und wie mach ich das, damit wenn nach index.php?location= nichts mehr steht automatisch $location = "news/index" ausgegeben wird?Gruss
switch ($_REQUEST['style']) {
case '':
include ('styles/standard.txt');
break;
case 'red':
include ('styles/red.txt');
break;
case 'green':
include ('styles/green.txt');
break;
case 'blue':
include ('styles/blue.txt');
break;
}so hab ich es ;)
mfg
ok, habs jetzt mal soweit geändert:
switch ($location) {
case '':
$location = "news/index";
break;
}
also, jetzt gehts (auch wenn nichts angegeben ist) am Anfang immer gleich zu news/index.php . (problem gelöst9
aber was ist wenn jetzt eben jemand für $location ein nicht existierenden Pfad angibt? Dann gibts wieder einen PHP Error... :(
mfg
ok, habs jetzt mal soweit geändert:
switch ($location) {
case '':
$location = "news/index";
break;
}also, jetzt gehts (auch wenn nichts angegeben ist) am Anfang immer gleich zu news/index.php . (problem gelöst9
aber was ist wenn jetzt eben jemand für $location ein nicht existierenden Pfad angibt? Dann gibts wieder einen PHP Error... :(
mfg
http://at.php.net/manual/de/control-structures.switch.php
switch ($_REQUEST['style']) {
case '':
include ('styles/standard.txt');
break;
case 'red':
include ('styles/red.txt');
break;
case 'green':
include ('styles/green.txt');
break;
case 'blue':
include ('styles/blue.txt');
break;
default:
include ('styles/standard.txt');
}
ok, dass heisst jetzt aber ja leider, dass ich jede Datei unter
case'xyz'
Eintragen muss oder? Wass ist wenn ich aber jetzt mal eine selbst generierte Datei habe? (z.B. User-Upload oder Foren-Thema, oder was weiss ich... ;) )
Ausserdem denke ich, ist es sehr mühsam, alle Dateien die Aufrufbar sein sollen, da aufzuliesten. (schon jetzt am anfang sind es 30) Geht das nicht irgendwie anders? Es soll ja nur ein Error (von mir ;D) kommen, wenn die Zieldate nicht existiert!
mfg und danke :)
ok, dass heisst jetzt aber ja leider, dass ich jede Datei unter
case'xyz'
Eintragen muss oder? Wass ist wenn ich aber jetzt mal eine selbst generierte Datei habe? (z.B. User-Upload oder Foren-Thema, oder was weiss ich... ;) )
Ausserdem denke ich, ist es sehr mühsam, alle Dateien die Aufrufbar sein sollen, da aufzuliesten. (schon jetzt am anfang sind es 30) Geht das nicht irgendwie anders? Es soll ja nur ein Error (von mir ;D) kommen, wenn die Zieldate nicht existiert!
mfg und danke :)
hm, verstehe...
da müsstest du den ordner einlesen, alle files listen, und prüfen, ob der string der übergeben wurde, mit einem eintrag in der filelist übereinstimmt...
hm, also eigene 404 seite?
das konfiguriert man am webserver, dass beim fehler 404 deine html datei angezeigt werden soll
hmmm... ne, nicht ganz wenn:
...
include $location.".php"
...
mir doch keine Datei Includet (bez. n Fehler ausspuckt), soll eine Fehlerseite angezeigt werden (oder nur Text).
Also: wenn $location kein gültiger Pfad ist => Errorpage
also ich denke, bleibt mir wohl nichts anderes übrig, als fortlaufend immer die neuen Dateien in Case einzutragen...
danke für deine Hilfe! ;)
mfg
Hi
du könntest auch alle dateien in einem Array speichern und dann aufrufen, müsste dir einige zeilen code gegenüber einem switch speichern.
Gruss
Carl
Hello,
hm, also eigene 404 seite?
das konfiguriert man am webserver, dass beim fehler 404 deine html datei angezeigt werden soll
Da aber die index.php gelesen werden konnte für den Request, gibt es keinen 404. Den müsstest Du dann per Funktion erzeugen. http://de.php.net/manual/de/function.user-error.php
Allerdings darf die index.php dann noch nicht selber etwas ausgegeben haben. Die Header sind dann ja schon weg.
Harzliche Grüße aus http://www.annerschbarrich.de
Tom
Hi,
du könntest ja zumindest überprüfen, ob die zu includende Datei überhaupt auf DEINEM Server existiert.
Gruß
Alkes
hallo,
Wie kann ichs machen, dass wenn
include $location.".php"
$location zu keinem Ziel führt, anstelle des Fehlers eine Eigene Fehlerseite angezeigt bekomme? (Seite existiert nicht oder ähnlich)
ich würde mit dirname() den pfad aus dem parameter extrahieren, diesen mit is_dir() testen. gleiches mit basename() und is_file (in dem verzeichnis natürlich). wenn das nicht der fall ist, machst du ein header('Location:...'); auf deine eigene fehlerseite.
viele grüsse,
andreas
Hello,
ich würde mit dirname() den pfad aus dem parameter extrahieren, diesen mit is_dir() testen. gleiches mit basename() und is_file (in dem verzeichnis natürlich). wenn das nicht der fall ist, machst du ein header('Location:...'); auf deine eigene fehlerseite.
einen Redirect kann er nicht mehr senden, wenn er den Aufbau der Index-Datei so lässt.
Er muss dann etwas mehr Strukturarbeit leisten oder die Krücke mit ob_start() einbauen.
Harzliche Grüße aus http://www.annerschbarrich.de
Tom