2009-04-10 26 views
11

Come faccio a sospendere una pagina per un certo numero di secondi prima di reindirizzare l'utente ad un'altra pagina HTML/PHP utilizzando PHP?PHP Redirect Pausa

+0

ho mai capito perché devo aspettare x numero di secondi in modo che mi può reindirizzare a un'altra pagina perché dovrei farlo ? – Thomaschaaf

+0

Diventa un browser - o le impostazioni del browser - non lascerai che il reindirizzamento ... e mostri una pagina intermedia sia chiaramente per l'utente che la pagina di caricamento multiplo senza capire cosa sta succedendo .. gli X (in genere 5) secondi sono lì per l'utente legge il messaggio;) – Strae

+0

@Thomaschaaf: Ci sono alcuni motivi possibili, a) perché non si rendono conto che non c'è bisogno, b) pubblicità, mentre l'utente 'aspetta' potrebbe vedere un add e fare clic, c conformità, tutti fanno così tutti si aspettano una pagina intermittente (cioè il mio capo mi ha fatto implementare uno, anche se il nostro sito non genera entrate pubblicitarie solo perché era abituato a vederlo e pensava anche ai nostri utenti.) – Louis

risposta

1

Aggiornamento: questo funziona, ma potrebbe non essere la soluzione più appropriata per questa situazione. Vedi i commenti.

Potrebbe questo essere quello che stai cercando?

<?php 
sleep(5); 
header("Location: http://www.example.com/"); 
exit(); 
?> 
+1

funziona davvero? Ho pensato che con la funzione sleep il browser non tenga la pagina per (nel tuo esempio) 5 secondi .. ma senza buttare fuori l'output – Strae

+0

@DaNieL Non l'ho provato, quindi potresti essere corretto funziona o non funziona in base alle impostazioni del server o all'ora/luogo in cui viene chiamato questo codice. – Daan

+0

Ho appena testato, funziona, ma previene anche tutti gli altri output .. afaik sleep sleep() funcion mantiene in pausa l'intero render di php, quindi imho non dovrebbe essere usato per questo tipo di problemi – Strae

3

Le altre 2 opzioni sono un reindirizzamento Javascript utilizzando setTimeout() o un tag di aggiornamento meta con un timeout.

15

soluzione bassa tecnologia che non richiede Javascript o anche PHP:

<html> 
<head> 
    <title>Redirecting...</title> 
    <meta http-equiv="refresh" 
content="10;URL=http://www.newsite.com"> 
</head> 
<body> 
    You are being automatically redirected to a new location.<br /> 
    If your browser does not redirect you in 10 seconds, or you do 
    not wish to wait, <a href="http://www.newsite.com">click here</a>. 
</body> 
</html> 

Il vantaggio di questa soluzione rispetto all'uso della "Location:" intestazione è che non c'è bisogno di mettere in pausa l'esecuzione dello script, che sarà appare all'utente come se il server fosse occupato o la loro connessione si fosse bloccata.

Questa soluzione offre inoltre all'utente la possibilità di procedere immediatamente alla nuova pagina invece di dover attendere x numero di secondi mentre il browser non visualizza alcuna informazione.

Edit: Credo che sia anche la pena notare che se si decide di utilizzare il metodo l'intestazione(), è necessario assicurarsi che il proprio sonno() durata non è troppo lunga. Penso che la maggior parte dei browser generano una connessione scaduta dopo non aver ricevuto dati dal server per 1 minuto.

+0

Stai attento: alcuni browser (come Chrome e Opera) non funzionano correttamente in questo modo – Strae

+0

Davvero? Non lo sapevo. Bene, almeno hanno il link per fare clic su allora. – Calvin

+0

Sì, non ricordo esattamente se il browser che non lo gestisce correttamente è safari, opera o cromo .. me lo ricordo come 2 di loro .... ma forse hanno risolto il problema nel tempo – Strae

33

questo funziona dovrebbe:

<?php 
header('Refresh: 5; URL=http://yoursite.com/page.php'); 
//other code 
?> 

e permetterà l'utente per vedere qualsiasi tipo di output desiderato (Verrai reindirizzato a X secondi, fare clic su yere se Dont, ecc ..)

+2

In realtà questa soluzione mi piace molto di più di quella che ho pubblicato. +1 – Calvin

+0

Questo non funziona con tutti i browser. – Gumbo

+1

davvero? ho provato su chrome, ff, ie, opera e safari, tutto su ambiente Windows, e tutto funziona allo stesso modo. Su quale sistema operativo l'hai provato? Non potrebbe esserci alcun tipo di impostazione del browser? – Strae

8

mai usare il sonno in questo modo. Anche con un carico leggero, il server esaurirà le connessioni http. Peggio se il firewall si esaurisce.

Il parametro di ritardo nell'intestazione reindirizzamento è fatto per esattamente lo stesso motivo.

0

Prova:

<?php 
$url=base_url().'page_you_want_to_go_to' 
header('Refresh: X; URL=$url'); 
?> 

Questo vi darà una maggiore flessibilità quando si scambiano tra il server localhost e remoto.

0

mettere questo nell'intestazione.

<meta http-equiv="refresh" content="0.01;makensucces.html" /> 

sul posto 0.01 è necessario mettere i secondi, ho utilizzato un numero decimale.

e sul luogo di makensucces.html è necessario mettere il nome fuori il file che desiderate.

3

Se si vuole aspettare e poi tornare alla pagina precedente ecco come

$referrer = $_SERVER['HTTP_REFERER']; 

header ("Refresh: 2;URL='$referrer'");