Auf URL weiterleiten

radarin

Angesehenes Mitglied
Hab da ein kleines Problem:

Die Seite 'index.php' includet z.b. 'loginform.php'. Letztere Seite includet 'checkview.inc'. Diese Enthällt diesen Code

CODE
<?php

if (isset ($view))
{
 if ($view == "index")
 {
   $view = $view;
 }  
}
else
{
 header ("Location: http://www.domain.ch/admin/index.php");
 exit;
}

?>


Die Seite 'index.php' führt vor dem ersten include '$view = "index";' aus. Alle Seiten sollen immer über 'index.php' geladen werden, diese enthällt das Ganze Drumherum, über eine URL-Variable wird dann die jeweilige Seite geladen. Ich will mit der ganzen Prozedur nun verhindern, dass der User 'www.domain.ch/loginform.php' aufrufen kann, dies soll nur mit ''www.domain.ch/index?page=loginform.php' möglich sein. Nun bekomme ich allerdings eine Fehlermeldung. Gibt es noch eine Andere Möglichkeit in PHP weiterzuleiten..?

Warning: Cannot modify header information - headers already sent by (output started at /home/xxx/xxx/admin/loginform.php:16) in /home/xxx/xxx/admin/checkview.inc on line 12
 
Hello,
Wenn PHP schon was ausgegeben hat ist 'header' nicht möglich - auf die rauhe Art geht's
blink.gif
wenn nötig mit

CODE echo '<meta http-equiv="refresh" content="0;URL=http://www.domain.ch/admin/index.php">';

Besser wäre es in jedem Fall die Includes so zu legen, dass PHP bis zum allfälligen 'Geheader' nichts ausprinten kann, also 1. an erster Stelle in einer PHP-Datei, 2. sofort auf den 'header' zu steuern...allfälliges Printoutput in Variablen schreiben und erst nach dem 'header'-IF ausspucken.

 
Eine Andere Möglichkeit weiterzuleiten wurde ja schon dargelegt, es gibt aber auch noch weitere Möglichkeiten dein Problem zu lösen.

Du kannst den header() nur benutzten, wenn PHP noch keine Outputs abgeschickt hat (eg echo, print etc). Du kannst dies einfach verhindern indem du die Outputs bufferst. Mit ob_start() am anfang deines Scripts werden alle Ausgaben bis zum Ende bzw bis zum nächsten ob_flush() gebuffert, was dir einfache header()s ermöglicht.
Die gleiche Funktion erfüllen Templates, die den Output einfach in Variablen speichen (eg $tmpl->Output .= "asdf") und dann erst am Ende ausgeben. Das hat auch den Vorteil, dass man den Output rückwirkend noch bearbeiten kann.
 
interessanter ansatz, alain. ich habe das problem vorerst mal mit dem meta-refresh gelöst, so funktioniert es auch wunderbar.

thanks
 
Zurück
Oben