2010-01-21 13 views
117

Kann PHP nach Ausführung einer Funktion einen Redirect-Aufruf ausführen? Ich erstelle eine Funktion, deren Fertigstellung ich in eine Datei im selben Stammordner umleiten möchte. Kann es gemacht werden?PHP-Seitenumleitung

if { 
     //i am using echo here 
} 

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

ich darüber serach und ich finde diese Antwort in Zusammenhang http://stackoverflow.com/questions/13539752/redirect-function/13539808 – user1972007

Antwort

216

Ja, Sie würden die header Funktion verwenden.

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

Es ist eine gute Praxis exit() Recht Nachwort zu nennen, so dass folgende Code nicht ausgeführt wird erhalten.

Auch aus der Dokumentation:

Denken Sie daran, dass die header() aufgerufen werden muss, bevor eine 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 zu haben, die ausgegeben werden, bevor header() aufgerufen wird. Das gleiche Problem tritt auf, wenn eine einzelne PHP/HTML-Datei verwendet wird.

Das heißt, Sie nicht alles direkt vor der header() Funktion Echo sollte, da so mehr als wahrscheinlich einen Fehler werfen zu tun. Außerdem müssen Sie sicherstellen, dass dieser Code auch vor anderen Ausgaben ausgeführt wird.

+0

Sie sollten den HTTP-Status auch auf 302 setzen. –

+7

"Der zweite Spezialfall ist der Header" Location: ". Er sendet nicht nur diesen Header zurück an den Browser, sondern gibt auch einen REDIRECT (302) Statuscode an den Browser, es sei denn, der Statuscode 201 oder 3xx wurde bereits festgelegt. " – colithium

+2

Ich bin gestört von "Afterwords". –

-1

Die header() Funktion tut dies:

 
header("Location: user.php"); 
+0

Bitte verwenden Sie absolute URLs entsprechend der HTTP-Spezifikation. – Gumbo

+0

Richtig, aber stellen Sie sicher, dass Sie das Echo zuerst entfernen, oder Sie könnten einen "Header bereits senden";) – fijter

0

Ja.

Im Wesentlichen, solange nichts ausgegeben wird, können Sie tun, was auch immer Sie wollen (eine Sitzung beenden, entfernen Sie Benutzer-Cookies, berechnen Pi auf 'n' Ziffern, etc.) vor der Ausgabe einer Standort-Header.

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

Aber Sie können nicht zuerst ein Echo tun, und dann umleiten.

+0

finden Sie in der Bearbeitung. – amit

44

Mit einem Javascript als Failsafe wird sichergestellt, dass der Benutzer umgeleitet wird (auch wenn die Header bereits gesendet wurden). Hier gehen Sie:

// $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 benötigen, um richtig relative Pfade zu umgehen, habe ich eine Funktion für das geschrieben habe (aber das ist nicht in den Anwendungsbereich der Frage).

+1

das funktioniert nicht wirklich. – amit

+7

wie beschreibend. – brianreavis

+7

Ändern Sie diese Zeile in diese und es wird ... 'sterben ('');' – Gabe

0

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

0

Die header()-Funktion in PHP tut dies, aber stellen Sie sicher, dass Sie es aufrufen, bevor andere Dateiinhalte an den Browser gesendet werden, sonst erhalten Sie einen Fehler.

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

8
$url='the/url/you/want/to/go'; 
    echo '<META HTTP-EQUIV=REFRESH CONTENT="1; '.$url.'">'; 

diese gut für mich funktioniert.

+1

das funktioniert auch für mich. Danke – Kyrie

+0

Arbeitete auch für mich –

+0

Ja, das war ein Lebensretter für mich; Ich beziehe Seitentitel und Body-IDs dynamisch aus einem Header-Include, also egal was, ich habe immer Header gesendet. Und für mich ist das nur eine Webform-Bot-Antwort. Netter, danke. – SteveCinq

0

eigentlich fand ich dies im Code eines PHP-basierten cms.

Weiterleitung ('? Module = blog', 0);

so 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 dafür finden, wofür die ganze Zahl ist, aber ich denke, es ist entweder Zeit oder Daten, da sie an ein Formular angehängt sind.

Ich wollte auch eine Seite nach einem Ereignis aktualisieren, und das an einem besseren Ort platziert hat gut funktioniert.

0

können Sie diesen Code verwenden in php

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

einfache Art und Weise die Umleitung zu benutzen ist:

echo '<script>window.location.href = "the-target-page.php";</script>'; 
+0

dies wurde bereits in einer anderen Antwort erwähnt. Alles neue zum Thema hinzuzufügen? –

3
<?php 

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

?> 
0

, wenn Sie die Umleitung in Ihre PHP-Datei enthalten sein sollen, ohne notwendigerweise Oben können Sie die Ausgabepufferung oben aktivieren und dann die Umleitung von überall auf der Seite 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

Als metioned von Nixxx Hinzufügen ob_start(), bevor sie eine PHP-Code hinzugefügt werden die Header bereits gesendet Fehler vermeiden.

Es funktionierte für mich

Den folgenden Code über auch funktioniert. Aber es lädt zuerst die Seite und leitet dann um, wenn ich es benutze.

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