2009-12-14 17 views
6

Wie kann ich eine Umleitung mit PHP nach sagen, 10 Sekunden ...Redirect mit Timer in PHP?

Ich habe viel darüber gelesen, scheint es wäre besser mit Javascript. Aber PHP würde mir viel Code sparen.

Also wie kann ich eine Umleitung mit Timer in PHP machen?

Dank

+5

Es ist sehr selten, dass eine verzögerte Re direkt ist eine gute Idee. Der übliche Grund besteht darin, eine Nachricht an einen Benutzer anzuzeigen - aber wenn eine Nachricht überhaupt angezeigt werden soll, ist sie normalerweise so lange angezeigt, bis der Benutzer auf einen Link klickt (was bedeutet, dass er diese Seite tatsächlich mit der Nachricht angesehen hat und nicht Redirect, während sie auf einen anderen Tab gucken oder eine Tasse Tee machen). – Quentin

Antwort

30

Sie können Ihre PHP-Skript verursachen für 10 Sekunden, schlafen

sleep(10); 

aber dies dem Endbenutzer als nicht reagierende Server angezeigt. Die beste Option ist, entweder eine Meta-Refresh,

<meta http-equiv="refresh" content="10;url=http://google.com"> 

oder Javascript zu verwenden.

setTimeout(function(){ 
    window.location = "http://google.com"; 
}, 10000); 

in den Kommentaren von Daniel gefunden:

header('Refresh: 10; URL=http://yoursite.com/page.php'); 

würde für diese Situation ideal, da es kein Javascript oder HTML erfordert.

+2

Der Vollständigkeit halber sei erwähnt, dass Benutzeragenten die Informationen in einem Aktualisierungs-Tag ignorieren können ... und natürlich nicht alle Benutzeragenten JavaScript unterstützen (oder aktivieren). Das Refresh-Tag wird wahrscheinlich in mehr User-Agents funktionieren. Wenn Sie wirklich wirklich glauben, dass Sie eine Art verzögerte Weiterleitung benötigen, stimme ich dafür. –

+0

Vielen Dank für den Beitrag, Jan. Sehr geschätzt. – Sampson

+1

Verwenden Sie niemals sleep() für diese Art von Dingen !! – Strae

2

Sie wollen eine Client-Seite Umleitung tun:

<meta http-equiv="refresh" content="5;url=http://yourdomain.com"/> 

aber wenn Sie das Gefühl, wie es in PHP zu sein hat, könnten Sie so etwas wie:

<?php 

// wait 5 seconds and redirect :) 
echo "<meta http-equiv=\"refresh\" content=\"5;url=http://yourdomain.com\"/>"; 

?> 
+0

Oder in PHP 'header (" refresh: 5; URL = http: //example.com ");' statt 'echo' und ein Meta-Tag welches auch in einem Head-Tag enthalten sein sollte. – Edward

2

dass a schlechte Idee, PHP-Script zum Schlafen zu bringen. Eigentlich ist es ein Weg, um Ihren Server einfach zu bedienen;) PHP-Skript im Speicher verbraucht genug Ressourcen, besonders wenn es als CGI arbeitet.

+0

Nützliche Informationen, aber diese "Antwort" beantwortet die Frage nicht wirklich. Diese Art von Antwort sollte wirklich eine Anmerkung zu einer anderen Frage sein. – Edward

1

PHP ist die wahrscheinlich falsche Technologie dafür, da es serverseitig läuft und dem Benutzer während der Verzögerung keine nützliche Rückmeldung geben wird.

Dies ist nicht viel Codierung in Javascript. Eine sehr einfache Möglichkeit, dies auf Ihrer Seite zu implementieren, finden Sie unter this link.

0

Nachdem die Webseite geladen wurde, wird PHP nicht mehr ausgeführt. Dies bedeutet, dass Sie mit PHP nach dem Laden der Seite nichts anfangen können, es sei denn, Sie verwenden etwas wie AJAX (Javascript, das eine PHP-Seite aufruft), um Daten auf die Seite zu übertragen. Dies bietet Ihnen ein paar Methoden, um Ihre gewünschte 10-Sekunden-Wartezeit auf Redirect zu erreichen.

Zuerst können Sie Ihr Skript für 10 Sekunden in den Ruhezustand versetzen(). Dies bedeutet jedoch, wie Johnathan erwähnte, dass Sie so aussehen würden, als wäre Ihre Seite sehr langsam, nur um den Benutzer umzuleiten.

Sie können auch einfach ein META-Tag einfügen, das die Seite anweist, sich nach 10 Sekunden umzuleiten. Dies ist die bevorzugte Methode, da es fast keine andere Kodierung beinhaltet, da Sie einfach das META-Tag einfügen und Sie müssen sich überhaupt nicht mit Javascript beschäftigen.

<meta http-equiv="refresh" content="10;url=http://example.com"/> 

Dann könnten Sie auch Javascript-Problem eine location.href = "bleh"; Befehl nach 10 Sekunden warten.

0

Eine weitere erwähnenswerte Methode ist das Senden eines Location-HTTP-Headers mit PHP header(). Also, wenn Sie eine robuste Lösung wollen, die Javascript und Meta-Tags vermeidet, während Web-Anwendung reagiert, halten, das könnte ein iframe erschaffen (oder Rahmen) und Laden dort ein PHP-Skript, das die folgendes enthält:

sleep(10); 
header("Location: http://my.redirect.location.com"); 
+0

Verwenden von "Schlaf" ist nicht ideal. Zitat: "Das ist eine schlechte Idee, um PHP-Skript schlafen zu lassen. Eigentlich ist es eine Möglichkeit, Ihren Server einfach zu dozieren;) PHP-Skript im Speicher verbraucht genug Ressourcen, besonders wenn es als CGI arbeitet." Quelle: http://StackOverflow.com/a/1901815/3787376 – Edward

7

header ('Aktualisieren: 10; URL = http: //yoursite.com/page.php');

Platzieren Sie diesen PHP-Code im Header-Abschnitt der Seite, sonst würde es nicht funktionieren.

0

versuchen Sie dieses Skript und es wird funktionieren!

<?php 
$msg ="This Is Just Checking"; 
header('Refresh: 5; URL=http://www.google.com.pk'); 
?> 

<body> 
<?php echo $msg ?> 
</body> 
</html> 
1
<?php 

     header("refresh:10; url=https://example.com/index.php"); 

?> 

<!doctype html> 
<html lang="en"> 
<head> 
<meta charset="utf-8"> 
<title>Redirect with countdown</title> 

<style type="text/css"> 
.myClass { 
      font-family: verdana; 
      font-size: 16px; 
      font-weight: normal; 
      color: black; 
      line-height: 30px; 
     } 
</style> 
</head> 
<body> 
<script type="text/javascript"> 

(function() { 
    var timeLeft = 10, 
    cinterval; 

    var timeDec = function(){ 
    timeLeft--; 
    document.getElementById('countdown').innerHTML = timeLeft; 
    if(timeLeft === 0){ 
    clearInterval(cinterval); 
    } 
}; 

cinterval = setInterval(timeDec, 1000); 
})(); 

</script> 
Redirecting in <span id="countdown">10</span> seconds. 
<br><br> 
<span class="myClass">Thank you! Your submission has been received!</span> 
</body> 
</html> 
0

schaffte ich es mit einer einfachen Funktion auf PHP

function RedirectToURL($url, $waitmsg = 0.4) 
{ 
    header("Refresh:$waitmsg; URL= $url"); 
    exit; 
} 

und rufen Sie von Ihrem PHP vor Umleitung zu warten 2 Sekunden zu tun. Beachten Sie, dass $ waitmsg = 0.4 zum Definieren des Standardwerts verwendet wird.

RedirectToURL("http://website.php", 2); 

Wenn Sie nach einem Formular umleiten möchten senden, können Sie

if(isset($_POST['submitted'])) 
{ 
     echo '<div style="text-align:center; margin-left:auto; margin-right:auto"><br><br>Sucess. Thanks for contribution.</div>'; 
     RedirectToURL("http://thewebsiteilookforaftersubmit", 2); // I want to wait 2 seconds and not 0.4 as defined by default 
} 
0

Erstellen Sie eine Datei, zum Beispiel versuchen: "go.php", mit dem Code

<?php 
$site = $_GET['iam']; 
sleep(5); 
Header ("Location: ".$site.""); 
exit(); 
?> 

<a href="http://whatever.com/go.php?iam=http://google.com">Link</a> 

oder so, ohne "Schlaf"

<?php 
$site = $_GET['iam']; 
Header('HTTP/1.1 301 Moved Permanently'); 
Header("Refresh: 10; URL=".$site.""); 
exit(); 
?> 

<a href="http://whatever.com/go.php?iam=http://google.com">Link</a>