Temporizzare il redirect con PHP


Frequentando i forum dedicati a PHP mi capita spesso di visualizzare discussioni in cui gli utenti affermano di utilizzare redirect realizzati in Javascript perché la funzione header() non permette di definire la durata del caricamento di una pagina prima del redirect verso un’altra risorsa.

Ciò non è assolutamente vero, header() mette infatti a disposizione un attributo, denominato refresh, che permette di definire il tempo di attesa prima di un redirect espresso in numero di secondi; si osservi per esempio il seguente listato:

< ?
  header( "refresh:5;url=index.php" );
  echo "Se il tuo browser non supporta il redirect clicca < a href=\"index.php\">qui< /a>.";
?>
 
Nel caso proposto il redirect alla pagina “index.php” avverrà dopo 5 secondi di attesa; è possibile anche invertire le due righe d’istruzione mostrate evitando che l’invio di un output prima della funzione header() produca un errore da parte del browser, ciò sarà possibile utilizzando le funzioni ob_start() e ob_end_flush()
 
< ?
   ob_start();
   echo "Se il tuo browser non supporta il redirect clicca < a href=\"index.php\">qui< /a>.";
   header( "refresh:5;url=index.php" );
   ob_end_flush();
?>
 
In questo modo ob_start() devierà il flusso dei dati verso il buffer dedicato all’esecuzione dell’applicazione che verrà liberato al momento della chiamata a ob_end_flush().