[php] redirect non funziona sotto internet explorer

luigi777

Utente Attivo
14 Feb 2008
1.086
1
38
42
Massa, Italy
Salve, ho questo codice che non funziona bene con internet explorer con firefox e altri funziona.
Per testarlo si deve fare redirect("pagina_da_dove_redirect.php",5);
che 5 sta per 5 secondi.

ecco il codice:
PHP:
<?php
function redirect($url,$tempo = FALSE ){
 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=" . $url . "\">";
  }
}?>

come mai?

mi potete risolvere questo problema?
grazie mille.
 
Ti consiglio di modificare la funzione così:
PHP:
<?php
function redirect($url, $timeout = 0)
{
	$timeout = (int)$timeout;
	die("<meta http-equiv=\"refresh\" content=\"{$timeout}; URL={$url}\" />");
}
?>
Vedi se in questo modo fa quello che dovrebbe.
 
niente, devo usare per forza questo che uso io,

perché mi serve che quando non c'è nessun output html, mi funziona header ed invece se c'è qualche output html mi funziona il meta.

Mi dici come risolvere?
PHP:
<?php
function redirect($url,$tempo = FALSE ){
 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=" . $url . "\">";
  }
}?>
 
Il tag meta funziona benissimo anche se non è stato inviato prima alcun output HTML. La funzione che avevi scritto eseguiva un controllo inutile, perché meta funzionerà sempre, sia che gli header siano stati inviati sia che non siano stati inviati...
 
Ho risolto:
ecco il codice:
PHP:
<?php
function redirect($url,$tempo = FALSE ){
 if($tempo == FALSE ){
  header('Location:' . $url);
 }else{
 
  echo "<meta http-equiv=\"refresh\" content=".$tempo.";url=".$url.">";
 }
}
?>
 
risolto anche questo problema non c'èra un tag nel refresh header:

PHP:
<?php
function redirect($url,$tempo = FALSE ){
 if(!headers_sent() && $tempo == FALSE ){
  header('Location:' . $url);
 }elseif(!headers_sent() && $tempo != FALSE ){
  header('Refresh:' . $tempo . ';url=' . $url);
 }else{
  if($tempo == FALSE ){
    $tempo = 0;
  }
  echo "<meta http-equiv=\"refresh\" content=".$tempo.";url=".$url.">";
  
 }
}
?>
 

Discussioni simili