Il comportamento del buffer dipende da diversi fattori, anche dal browser
http://php.net/manual/en/function.flush.php
Ad esempio, nella mia macchina per avere l'effetto che vuoi tu devo fare:
Codice PHP:
@ini_set('implicit_flush', 1);
$stringa = 'Ciao amici';
for($i=0; $i<10; $i++){
echo $stringa.$i."<br>";
ob_flush();
flush();
sleep(2); // messo giusto per enfatizzare lo "stream"
}
Questo funziona su chrome, ma su firefox no. Questo credo dipenda dal fatto che ff bufferizzi i dati in input prima di mostrarli.
Di fatti facendo:
Codice PHP:
@ini_set('implicit_flush', 1);
$stringa = 'Ciao amici';
// aumento i dati da inviare
for($i=0; $i<1024; $i++){
$stringa.='ii';
}
for($i=0; $i<10; $i++){
echo $stringa.$i."<br>";
ob_flush();
flush();
sleep(2);
}
anche firefox mostra i dati senza attendere la fine dello script.
Detto ciò credo che la soluzione cron + ajax magari appoggiandoti ad un db sia meglio. Insomma, uno script che dura 24h...
Quando fai partire lo script aggiungi una riga ad una tabella, poi aggiorna ogni tot.
A questo punto ti serve solo un secondo script che va a leggere sulla tabella e vede a che punto si trova