header e meta non più funzionanti

borgo italia

Super Moderatore
Membro dello Staff
SUPER MOD
MOD
4 Feb 2008
16.044
150
63
PR
www.borgo-italia.it
ciao
era tanto che non facevo una domanda su php.
fino a poco tempo fa funzionava, sia in locale che remoto.
ora non più ne questo
PHP:
<?php
ob_start();
//........alcuni output html
if($errore !=""){
	echo "si è verificato un errore";
	header( "Refresh:3;url=".$_SERVER['PHP_SELF']." "); 
}else{
	//....a phpmailler
}
//........form
ob_end_flush();
?>
ne questo
PHP:
<?php
//........alcuni output html
if($errore !=""){
	echo "si è verificato un errore";
	echo "<meta http-equiv='Refresh' content='3; URL=".htmlspecialchars($_SERVER['PHP_SELF'])."'>"; 
}else{
	//....a phpmailler
}
//........form
?>
qualcuno sa dirmi perchè?

p.s.
non ho modificato gli script
 
ciao
non fa più il refresh dopo 3 secondi
non so se dipenda dal mio bw (uso prevalentemente firefox 37.0.2), ma se provi sul mio sito andando su contatti e provi a fare un errore es mettendo pinco#pallo,it ti dice indirizzo errato, ma il messaggio non si cancella.
cvome deteeo fino a qulche giorno fa il tutto funzionava
 
ciao
in locale di sicuro no (5.2.3) in remoto non so se il provider l'ha cambiata, verificherò
comunque in locale ho sempre usato la stessa versione e quindi non capisco
 
ciao
ho risolto in questo modo con un piccolo js
PHP:
<?php
//..........
		if(!messaggio->Send()){
			//errore invio
			echo "<h4 class=\"err\">errore di trasmissione, riprova più tardi</h4>";
		}else{ //invio avvenuto
  			//invio avvenuto
			echo "<h4 class=\"err\">messaggio inviato</h4>";
		}
?>
<script language="JavaScript" type="text/javascript">
<!--  
window.setTimeout ("location.href=('invia_email.php')", 3000);
 -->
</script>		
<?php
}//fine invia
?>
<!-- ............. -->
 
PHP:
<?php
ob_start();
//........alcuni output html
if($errore !=""){
	echo "si è verificato un errore";
	header( "Refresh:3;url=".$_SERVER['PHP_SELF']." "); 
}else{
	//....a phpmailler
}
//........form
ob_end_flush();
?>

Gli header vanno inviati al browser prima di un qualsiasi output, è per questo che non funziona: dovresti fare la procedura che riempie la variabile $errore prima di ogni output html così puoi fare il controllo e in caso spedire l'header per primo.

Se prima funzionava comunque era più un comportamento anomalo del browser che può essere poi facilmente stato corretto con qualche aggiornamento.
 
ciao flam
il problema non è che non funzionassero, ma che hanno smesso di funzionare senza che abbia modificato il codice, la mia pagina "contatti" è circa 3 anni che è in linea e ha sempre funzionato (sia in remoto che in locale), ad un certo punto ha smesso di fare il riinvio (è questo il mistero).
poi come vedi avendo output html prima dell'header ho usato ob_start()....ob_end_flush().
da considerare che anche il tag meta ha smesso di funzionare
spero che il piccolo js non subisca la stessa sorte
 

Discussioni simili