ho provato questo codice qui (una versione ancora più semplice della tua):
Codice PHP:
<?php

echo 'INIZIO<br>';
for (
$i 0$i 10$i++) {
    echo 
$i '<br>';
    
flush();
    
ob_flush();
    
sleep(1);
}
echo 
'FINE';
su firefox, chromium e qupzilla su linux, funziona alla perfezione.
se invece levo flush() o ob_flush() (basta uno dei due) non funziona, e l'output si vede tutto alla fine.

se domani riesco provo su chrome e edge su windows 10.