2009-12-14 16 views
6

Come posso effettuare un reindirizzamento con PHP dopo dire 10 secondi ...Reindirizza con il timer in PHP?

Ho letto molto, sembra che sarebbe meglio con javascript. Ma PHP mi farebbe risparmiare parecchio codice.

Quindi, come posso eseguire un reindirizzamento con il timer in PHP?

Grazie

+5

È molto raro che sia in ritardo diretto è una buona idea. La solita ragione è di mostrare un messaggio a un utente - ma se un messaggio vale la pena di essere visualizzato, allora di solito vale la pena di essere visualizzato finché l'utente non fa clic su un link (indicando che effettivamente hanno guardato quella pagina con il messaggio piuttosto che averlo reindirizzare mentre stavano guardando un'altra scheda o preparare una tazza di tè). – Quentin

risposta

30

Si può causare il vostro script PHP a dormire per 10 secondi,

sleep(10); 

ma questo sembra l'utente finale come un server non risponde. L'opzione migliore è utilizzare una meta refresh,

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

o javascript.

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

Trovato nei commenti da Daniel:

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

sarebbe l'ideale per questa situazione, in quanto non richiede Javascript o HTML.

+2

Per motivi di completezza, è probabilmente opportuno menzionare che i programmi utente sono liberi di ignorare le informazioni in un tag di aggiornamento ... e, naturalmente, non tutti gli agenti degli utenti supportano (o abilitano) JavaScript. Il tag di aggiornamento probabilmente funzionerà con più agenti utente, quindi se davvero, davvero pensi di aver bisogno di un qualche tipo di reindirizzamento ritardato, voterò a favore. –

+0

Grazie per il contributo, Jan. Molto apprezzato. – Sampson

+1

non usare mai sleep() per questo genere di cose !! – Strae

2

Avrai voglia di fare un redirect lato client:

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

, ma se vi piace di più deve essere in PHP, si potrebbe fare qualcosa di simile:

<?php 

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

?> 
+0

Oppure in PHP 'header (" refresh: 5; url = http: //example.com ");' invece di 'echo' e un meta tag che dovrebbe essere contenuto anche in un tag head. – Edward

2

Questo è un cattiva idea di far dormire PHP script. In realtà è un modo per fare il tuo server facilmente;) Lo script PHP in memoria sta consumando abbastanza risorse, specialmente se funziona come CGI.

+0

Informazioni utili, ma questa "risposta" in realtà non risponde alla domanda. Questo tipo di risposta dovrebbe essere un commento su un'altra domanda davvero. – Edward

1

PHP è la tecnologia probabilmente errata per questo poiché viene eseguita lato server e non fornirà un feedback utile all'utente durante il ritardo.

Questo non è un sacco di codice in Javascript. Vedere this link per un modo molto semplice per implementare questo nella tua pagina

0

Dopo il caricamento della pagina Web, PHP non viene più eseguito. Ciò significa che non puoi fare nulla con PHP dopo il caricamento della pagina a meno che non usi qualcosa come AJAX (Javascript che chiama una pagina PHP) per trasferire i dati alla pagina. Questo ti offre alcuni metodi per ottenere l'attesa desiderata di 10 secondi sul reindirizzamento.

In primo luogo, è possibile dire allo script di dormire() per 10 secondi. Tuttavia, come menzionato da Johnathan, significa che la tua pagina sarebbe molto lenta, solo per reindirizzare l'utente.

sleep(10); 

Si potrebbe anche semplicemente cadere in un tag META che racconta la pagina per reindirizzare se stesso dopo 10 secondi. Questo è il metodo preferito, in quanto non coinvolge quasi nessun'altra codifica, semplicemente trascinando il tag META e non si ha affatto a che fare con javascript.

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

Quindi, potresti anche avere un problema di Javascript a location.href = "bleh"; comando dopo aver atteso per 10 secondi.

0

Un altro metodo degno di nota è l'invio di un'intestazione dell'ubicazione HTTP con la funzione PHP header(). Quindi, se si desidera una soluzione robusta che javascript e meta tag evita, mantenendo applicazione web reattivo, che potrebbe essere la creazione di un iframe (o un frame) e carico c'è uno script PHP che contiene quanto segue:

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

L'uso di 'sleep' non è l'ideale. Citazione: "È una cattiva idea rendere dormiente lo script PHP. In realtà è un modo per eseguire facilmente il server,;) Lo script PHP in memoria sta consumando abbastanza risorse, specialmente se funziona come CGI." Fonte: http://stackoverflow.com/a/1901815/3787376 – Edward

7

intestazione ('Aggiorna: 10; URL = http: //yoursite.com/page.php');

Inserire questo codice PHP nella sezione di intestazione della pagina, altrimenti non funzionerebbe.

0

prova questo script e funzionerà!

<?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

sono riuscito a farlo con una semplice funzione su PHP

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

e chiamare dal tuo PHP per l'attesa di 2 secondi prima di reindirizzamento. Si noti che $ waitmsg = 0.4 viene utilizzato per definire il valore predefinito.

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

Se si desidera reindirizzare dopo un modulo di invio, si può provare

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

Creare un file, ad esempio: "go.php", con il codice di

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

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

o in questo modo, senza "sleep"

<?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>