2010-09-22 14 views
8

Sono comparso per il test php, mi è stata fatta una domanda per la quale non sono riuscito a trovare la risposta.Domanda intervista: possiamo avere un'eco prima dell'intestazione?

La domanda è così.

echo "MESSI is injured!!"; 
header("Location:somepage.php"); 

Intervistatore vuole sia intestazione e eco essere scritti sulla stessa pagina.

mi chiedo come è tutto possible.It dovrebbe dare qualche errore come

headers already sent by (output iniziato a .....

è davvero possibile scrivere eco e intestazione sulla stessa pagina !!!

+0

Cosa prova php è quello? Cosa serve? Mi dispiace essere ficcanaso. –

risposta

29

È possibile utilizzare Output Buffering come

ob_start(); 
echo "MESSI is injured!!"; 
header("Location:somepage.php"); 
ob_end_flush(); 

Il problema è che non possiamo inviare l'intestazione dopo aver iniziato a inviare l'output. Per risolvere questo bufferizziamo l'output. La funzione ob_start attiva il buffer di uscita. Mentre il buffering dell'output è attivo, nessun output viene inviato dallo script (diverso dalle intestazioni), invece l'output è memorizzato in un buffer interno. Quindi l'output echo verrà memorizzato nel buffer. Quindi inviamo l'header senza alcun problema visto che non abbiamo ancora sputato alcun output. Infine, chiamiamo ob_end_flush per svuotare il contenuto del buffer interno e arrestare il buffering dell'output.

+1

Assolutamente a destra –

+0

In realtà se è attivo il buffering dell'output, * nulla * verrà inviato prima di essere scaricato. Nemmeno intestazioni. (iirc) –

3

Si può fare finchè tutte le chiamate di intestazione arrivano prima che venga inviata qualsiasi uscita non di intestazione (questo include cose fastidiose come newlines/spazio bianco). Così

<?php 
header("Location:somepage.php"); 
echo "MESSI is injured!!"; 
?> 

dovrebbe fare il trucco

+4

Non rispondo alla domanda: scrivi echo "" ** e poi ** header() – codaddict

+0

Esattamente. Il buffering dell'output dovrebbe risolvere il problema, comunque. – matsolof

Problemi correlati