08. januar 2005 - 23:10Der er
18 kommentarer og 1 løsning
Inkludering af 404 fejlside
Hej
Jeg har benyttet nedenstående kode til at få serveren til at vise den rigtige side: " if(isset($vis)){ include $vis.".php" or die(header("Location: index.php?vis=404")); } else { include "forside.php"; } "
Men det virker ikke efter hensigten. Hvis en person beder om en side, der ikke eksiterer, som f.eks. index.php?vis=jegvilhavedenne, så skulle scriptet sende personen til siden 404.php, men det gør det ikke... Det giver følgende fejl: " Warning: main(1): failed to open stream: No such file or directory in /hsphere/local/home/sagshow/sagshow.dk/design/index.php on line 163
Warning: main(): Failed opening '1' for inclusion (include_path='.:/usr/local/lib/php') in /hsphere/local/home/sagshow/sagshow.dk/design/index.php on line 163 "
Nogen der ved hvordan det kan fikses, sådan at personen bliver sendt til 404.php, hvis siden der skal inkluderes ikke findes?
I dette særtema ser vi på, hvordan cloud og AI bliver fundamentet for virksomhedernes digitale forretning, og hvordan de nye muligheder for automatisering og forretningsværdi kan udnyttes uden at miste overblik, sikkerhed og menneskelig kontrol.
Yes det virker. Anede ikke der fandtes en sådan funktion som file_exists.
Men... Nu kommer den bare med samme fejl som sidst, med at der allerede er sendt en header på linie 12 i index.php: " Warning: Cannot modify header information - headers already sent by (output started at /hsphere/local/home/sagshow/sagshow.dk/design/index.php:12) in /hsphere/local/home/sagshow/sagshow.dk/design/index.php on line 173 "
Hmmm... Ja sådan kunne man gøre, men den mulighed har jeg jo ikke, når jeg har en header("Location: ...") i det dokument jeg inkluderer, og der kommer den ofte med samme fejl.
Jeg forstår ikke problemet med header("Location: ") og noget der er skrevet ud før. Du kan altid starte med at teste om alt er i orden - hvis ikke, så redirecter du, men hvis det er viser du noget på siden. Der er aldrig nogen grund til at begynde at lave noget HTML før du ved at det faktisk skal vises til brugeren.
Ja men jeg vil helst undgå at bruge andet end php og html. Jeg kunne selvfølgelig tjekke med headers_sent og så lave en meta refresh, hvis de var sendt, men det ville jeg også helst undgå.
Et eksempel: index.php inkluderer siden logind.php. logind.php finder ud af at brugeren ikke har indtastet et password og eksekverer derfor en header("Location: index.php?side=fejl&fejl=password"), men dette kan index.php ikke lide, da denne side allerede har sendt headerinformation med <head>.
Hvordan kan jeg undgå at sådanne situationer opstår?
Det er fordi du blander logik og præsentation. Du skal måske dele op i flere include filer, eller på anden måde lave strukturen om, men det kan (selvfølgelig) altid lade sig gøre. Det grundlæggende problem med bl.a. PHP, er at man tænker i de filer man laver, og ikke i en arkitektur. Og til småting kan det selvfølgelig være ligemeget ;)
Efter at have læst lidt på funktionen er jeg kommet frem til den konklusion, at det ikke ville være videre klogt at benytte den. Men tak for forsøget :)
ob_start er dit mirakel, det er fuldt legalt at bruge ;) At man har brug for det er blot et tegn på at man måske hellere skulle lavet sin struktur om - hvis man har tiden til det.
Ok det er så en aftale ;) Hvis det ikke er for langt væk....
Synes godt om
Ny brugerNybegynder
Din løsning...
Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.