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();
}
Server dedicato

Condividi questo post


Commenti