PHP: eseguire l'output di una stringa durante l'esecuzione di uno script con ob_start(), ob_flush(), flush()
ATTENZIONE!
Il post ha più di 2 anni e le informazioni contenute
potrebbero essere obsolete (ad esempio a causa di un
aggiornamento di versione rispetto agli elementi descritti
o links modificati da siti esterni).
Durante l'esecuzione di uno script PHP server side potrebbe essere necessario informare l'utente sull'andamento dell'operazione in corso, specialmente nel caso in cui il tempo di esecuzione sia particolarmente lungo. Per questa operazione è possibile utilizzare le funzioni ob_start(), ob_flush() e flush() per la gestione dell'output. Di seguito un esempio di codice per testare il funzionamento ricavato da un articolo del blog joeyrivera.com :
//inizializzazione del buffer per l'output
if (ob_get_level() == 0) ob_start();
//ciclo di esempio
for($i=0;$i<=30;$i++){
echo 'step: '.$i.'<br />';
//per Chrome e Safari si deve aggiungere questa istruzione
print str_pad('',4096)."\n";
//invia il contenuto stampato al buffer
ob_flush();
flush();
//imposta un'attesa di 1 secondo prima
//della prossima esecuzione del ciclo
sleep(1);
//aumenta il limite per il tempo di esecuzione dello script
set_time_limit(30);
}
La riga:
print str_pad('',4096)."\n";
deve essere aggiunta per eseguire l'output correttamente su Chrome e Safari. Per riassumere tutto in un'unica funzione:
function echo_flush($txt){
//inizializzazione del buffer per l'output
if (ob_get_level() == 0) ob_start();
echo $txt;
//per Chrome e Safari si deve aggiungere questa istruzione
print str_pad('',4096)."\n";
//invia il contenuto al buffer
ob_flush();
flush();
}

Commenti