2009-09-01 14 views
10

Ho uno script php che collega 10 server diversi per ottenere i dati. Voglio che stampi i risultati della prima connessione prima che inizi il secondo.Stampa immediata dei risultati (php)

+0

Si prega di elaborare e dare un esempio del codice che si sta utilizzando –

risposta

23

Utilizzando flush e/o ob_flush, si dovrebbe ottenere ciò che si desidera.

ecco un breve dimostrazione:

for ($i=0 ; $i<10 ; $i++) { 
    echo "$i<br />"; 
    ob_flush(); 
    flush(); 
    sleep(1); 
} 

Ogni secondo, un numero verrà inviato al browser, senza attendere il ciclo/script alla fine.
(Senza sia a filo e ob_flush, aspetta fino alla fine dello script per inviare l'output)


Spiegazione sul perché avete bisogno di entrambi, citando dalla pagina a filo del manuale:

Svuota i buffer di scrittura di PHP e qualunque sia il backend utilizzato da PHP (CGI, un server Web , ecc.). Questo tentativo di spinge l'output corrente fino al browser con alcune avvertenze.

flush() potrebbe non essere in grado di ignorare lo schema di buffer del server web e non ha alcun effetto su qualsiasi buffer lato client nel browser. Inoltre, non influisce sul meccanismo di buffer di output dello spazio utente di PHP. Ciò significa che dovrete chiamare sia ob_flush() sia flush() per svuotare i buffer di uscita se si stanno utilizzando quelli.


Se questo non funziona per voi, dare un'occhiata ai commenti sulle due pagine del manuale può dare un paio di indicazioni su "il motivo per cui potrebbe fallire"

+0

@sshow: ho sentito questa domanda posta un paio di volte dai colleghi, al lavoro, in realtà - e l'ho usata io stesso una o due volte - che aiuta ^^ –

+0

Grazie, ottima risposta! Aiutato molto –

2

ob_end_flush http://us.php.net/ob_end_flush

Questa funzione svuota il buffer di uscita e disabilita il buffer di uscita. Tutto ciò che segue questa funzione viene inviato immediatamente al browser.

0

Sì, ob_flush dovrebbe farlo. Lo faccio sempre con una pagina LOOONG, quando voglio vedere i progressi dell'operazione.