L'articolo che stai leggendo è stato scritto 836 giorni orsono.
Le informazioni presenti potrebbero non essere aggiornate!
E' da un po' che non scrivevo nel blog
. Dai che ho pure tante storielle da raccontarvi. Tassisti abusivi con il vezzo di guidare sul marciapiede, fornitori folli con stravaganti idee del descrivere il proprio lavoro. Ma tutto questo lo leggerete prossimamente, perchè ora il blog mi serve da segnalibro
.
Ho perfezionato una semplice funzioncina di redirect, utilizzabile in qualsiasi applicazione PHP. Il problema principale che si ha in questi casi è stare attenti al che la pagina che reindirizza, non abbia ricevuto altri header. Ovverto altre intestazioni, altro conenuto...
Questo perchè il redirect in PHP è fatto tramite una funzione molto semplice, che permette di inviare un'intestazione particolare, che reindirizza ad altra pagina.
La funzione di redirect in PHP è di base molto semplice. Quando decidiamo di inviare il browser ad altra destinazione eseguiamo il comando:
header( "Location: http://www.sitodiarrivo.it" );
//Per reindirizzare ad una pagina diversa dello stesso sito
//Ed in questo esempio, contenuta nella stessa directory
header( "Location: pagina.php" );
Tutto ciò funzionerà se al momento dell'esecuzione del comando, la pagina non ha ricevuto altri header. In caso contrario ci verrà restituito il noioso errore: "Cannot modify header information - headers already sent by...", seguito dal nome del file e dal numero di riga in cui è stato inviato il precedente input di header.
Per controllare se altri header sono stati inviati, ci viene in soccorso lo stesso PHP, con la funzione headers_sent(). Questa restituisce un booleano con valore TRUE se gli header sono stati inviati, FALSE in caso contrario.
Ma c'è anche un'altra cosa da tenere in considerazione. Con la funzione header( "Location: $url" ) sopra vista, il redirect è immediato. Spesso invece si vuole reindirizzare dopo un tot di secondi, di modo tale che l'utente visualizzi ed abbia il tempo di leggere un avviso di redirezionamento.
Per fare il tutto e scegliere se ridirezionare direttamente o dopo qualche secondo, senza preoccuparsi che altri header siano stati inviati, basta una piccola funzioncina 
if(!headers_sent() && $tempo == FALSE ){
header('Location:' . $url);
}elseif(!headers_sent() && $tempo != FALSE ){
header('Refresh:' . $tempo . ';' . $url);
}else{
if($tempo == FALSE ){
$tempo = 0;
}
echo "<meta http-equiv=\"refresh\" content=\"" . $tempo . ";" . $url . "\">";
}
}
Commentiamola un po'!
Ho una funzione con due parametri: l'url a cui ridirezionare che è parametro necessario, e il tempo di attesa prima del redirect che può essere anche omesso (ovvero essere FALSE ).
Se non sono stati inviati altri header e se voglio un redirect diretto, allora uso la funzione più semplice ed immediata
: header associata al parametrio "Location".
Se non sono stati inviati altri header e voglio qualche secondo di attesa prima del redirect, allora userò sempre la funzione header, ma associata al parametro "Refresh", a cui posso dare un tempo di attesa prima dell'esecuzione.
Se sono stati mandati altri header, allora userò il redirect in HTML, facendo attenzione ad una cosa. Il comando HTML vuole il parametro tempo definito, per cui se io non l'ho stabilito, questo si setterà automaticamente a 0.
Utilizzare la funzione è molto semplice: basta richiamarla con un:
Laddove vogliamo che avvenga il tutto!










