it-swarm.com.de

PHP Seitenumleitung

Kann PHP nach dem Ausführen einer Funktion einen Umleitungsaufruf ausführen? Ich erstelle eine Funktion, bei deren Abschluss die Umleitung in eine Datei im selben Stammordner erfolgen soll. Kann dies durchgeführt werden?

 if {
      //i am using echo here
 }

 else if ($_SESSION['qnum'] > 10) { 
            session_destroy();
            echo "Some error occured.";
            //redirect to user.php
        }
140
amit

Ja, Sie würden die Funktion Header verwenden.

/* Redirect browser */
header("Location: http://www.yourwebsite.com/user.php"); 
exit();

Es wird empfohlen, exit() direkt danach aufzurufen, damit der darunterliegende Code nicht ausgeführt wird.

Auch aus der Dokumentation:

Denken Sie daran, dass header () aufgerufen werden muss, bevor eine tatsächliche Ausgabe gesendet wird, entweder durch normale HTML-Tags, leere Zeilen in einer Datei oder von PHP. Es ist ein sehr häufiger Fehler, Code mit include () - oder require () - Funktionen oder einer anderen Dateizugriffsfunktion zu lesen und Leerzeichen oder Leerzeilen auszugeben, bevor header () aufgerufen wird. Das gleiche Problem besteht bei der Verwendung einer einzelnen PHP/HTML-Datei.

Dies bedeutet, dass Sie nichts direkt vor der Funktion header() ausgeben sollten, da dies höchstwahrscheinlich einen Fehler auslösen wird. Außerdem müssen Sie sicherstellen, dass dieser Code auch vor jeder anderen Ausgabe ausgeführt wird.

264
bkildow

Durch die Verwendung von Javascript als Ausfallsicherheit wird sichergestellt, dass der Benutzer umgeleitet wird (auch wenn die Header bereits gesendet wurden). Bitte schön:

// $url should be an absolute url
function redirect($url){
    if (headers_sent()){
      die('<script type="text/javascript">window.location=\''.$url.'\';</script‌​>');
    }else{
      header('Location: ' . $url);
      die();
    }    
}

Wenn Sie mit relativen Pfaden richtig umgehen müssen, habe ich eine Funktion dafür geschrieben (aber das liegt außerhalb des Rahmens der Frage).

47
brianreavis

Einfacher Weg ist zu bedienen:

  echo '<script>window.location.href = "the-target-page.php";</script>';
15
CrownFord
   $url='the/url/you/want/to/go';
   echo '<META HTTP-EQUIV=REFRESH CONTENT="1; '.$url.'">';

das funktioniert bei mir prima.

11
header( "Location: http://www.domain.com/user.php" );

Sie können jedoch nicht zuerst ein Echo erstellen und dann umleiten.

7
code-zoop
<?php

    http_redirect("relpath", array("name" => "value"), true, HTTP_REDIRECT_PERM);

?>
2
user3164291

Sie können diesen Code verwenden, um in php umzuleiten

<?php
/* Redirect browser */
header("Location: http://example.com/");
/* Make sure that code below does not get executed when we redirect. */
exit;
?>
1

Wie von nixxx angegeben, verhindert das Hinzufügen von ob_start() vor dem Hinzufügen eines PHP-Codes, dass die bereits gesendeten Header Fehler enthalten.

Es hat bei mir funktioniert

Der folgende Code funktioniert auch. Aber es lädt zuerst die Seite und leitet dann um, wenn ich es benutze.

echo '<META HTTP-EQUIV=REFRESH CONTENT="1; '.$redirect_url.'">';
1
user2634873

Ja.

Im Wesentlichen können Sie, solange nichts ausgegeben wird, alles tun (Sitzung beenden, Benutzer-Cookies entfernen, Pi auf n Ziffern berechnen usw.), bevor Sie einen Standort-Header ausgeben.

0
John Parker

wenn Sie die Umleitung in Ihre PHP-Datei aufnehmen möchten, ohne sie unbedingt oben zu haben, können Sie die Ausgabepufferung oben aktivieren und dann die Umleitung von einer beliebigen Stelle auf der Seite aus aufrufen. Beispiel;

 <?php
 ob_start(); //first line
 ... do some work here
 ... do some more
 header("Location: http://www.yourwebsite.com/user.php"); 
 exit();
 ... do some work here
 ... do some more
0
nixxx

eigentlich habe ich das im code eines php-basierten cms gefunden.

umleiten ('? module = blog', 0);

also ist es möglich. In diesem Fall sind Sie auf der Admin-Ebene angemeldet, also kein Schaden kein Foul (nehme ich an). Der erste Teil ist die URL und der zweite? Ich kann keine Dokumentation für die Ganzzahl finden, aber ich denke, es ist entweder Zeit oder Daten, da es an ein Formular angehängt ist.

Auch ich wollte eine Seite nach einer Veranstaltung aktualisieren, und die Platzierung an einer besseren Stelle hat gut funktioniert.

0
llothcat

Die Funktion header() in PHP) erledigt dies, aber stellen Sie sicher, dass Sie sie aufrufen, bevor andere Dateiinhalte an den Browser gesendet werden, da sonst eine Fehlermeldung angezeigt wird.

JavaScript ist eine Alternative, wenn Sie den Dateiinhalt bereits gesendet haben.

0
ServAce85

Ich würde die Nachricht wahrscheinlich als Sitzungsvariable festlegen, den Benutzer auf eine andere Seite umleiten, die die Nachricht anzeigt, und die Sitzung zerstören.

0
Leprosy