2011-09-11 10 views
33

Entrambi sembrano fare la stessa cosa: restituire il contenuto del buffer di output e cancellarlo immediatamente.Differenza tra ob_get_clean e ob_get_flush

Quale dovrei usare?

+6

Ritirare il mio downvote perché anch'io sono confuso dalle descrizioni nel manuale (Non è perfettamente chiaro se "flush" significa "output", che credo faccia) –

+0

... quindi nessuno lo sa? – EEka

+9

Pazienza, giovane padawan! Sono passati solo 6 minuti e 10 pagine viste. – JJJ

risposta

-6

Per provare direttamente per rispondere alla tua domanda:

Se si desidera iniziare il buffering nuovo dopo il lavaggio del buffer, quindi utilizzare ob_get_clean come buffer di uscita sarà ancora pronto, senza dover riaccenderlo. (ricorda che può essere usato solo se non c'è testo, anche lo spazio bianco è echo per il browser). Quindi, per usi più generali, tutti i miei libri di programmazione errano verso ob_get_flush (come solo un buffer per la maggior parte degli script)

+3

'ob_get_clean' termina il buffering dell'output. Dovresti riaccenderlo di nuovo. –

+1

Non è la risposta corretta come indicato sopra. Controlla la risposta di arnaud576875 qui sotto. – jcisio

94

ob_get_clean() rimuove il buffer (senza stamparlo) e restituisce il suo contenuto.

ob_get_flush() stampa il buffer, lo rimuove e ne restituisce il contenuto.

+0

Anche se vecchio, ma mi ha salvato un sacco di grattarsi la testa. Si allontana !! –

+1

L'OP non è rientrata dall'11 settembre! – revo

17

ob_get_clean restituirà semplicemente il contenuto del buffer e lo assegnerà alla variabile che si desidera, ma non genererà alcun output.

ob_get_flush d'altra parte, fa tutto ciò che fa ob_get_clean, ma emette anche il contenuto.

7

Entrambe le funzioni cancellano il buffer di output, disattivano il buffer di output e restituiscono il valore del buffer precedente.

Tuttavia, ob_get_flush invia prima il buffer corrente al client, mentre ob_get_clean lo scarta.

+1

+1 per aver menzionato 'ob_get_flush' disattiva il buffering – NullUserException

+0

-1 per dire che ob_get_clean" non cambia le opzioni di buffering ". Questo non è corretto - entrambi disattivano effettivamente il buffering. Dalla pagina man di ob_get_clean "Restituisce il contenuto del buffer di output e il buffering dell'output finale". Inoltre non è molto chiaro dire che scarta il buffer. Non lo fa - lo restituisce come le altre risposte hanno detto. Gli scarti mi impongono di buttarli via completamente. – Adam

+0

@Adam Great catch, ha riscritto la risposta. Discard e flush sono termini a livello di rete, ma la nuova versione dovrebbe chiarirlo. – phihag