Damit würde sich das Konstrukt reduzieren lassen auf:
while(false !== ($data = fread($file, 128)))
{
echo $data;
flush();
}
Das bringt leider auch nichts, der Download bricht immernoch ab aber nun bei um die 150 MB.
Hast Du mal in das Error-Log des Apachen geschaut, ob da was über den Abbruch drinsteht?
Im error_log steht leider nichts, damit schein aber was nicht zu stimmen was ich mal prüfen lassen muss.
Laufen denn andere Scripte auf dem Server unendlich, wenn Du set_time_limit(0) benutzt? das würde ich als erstes mal ausprobieren.
Habs mal so ausprobiert:
set_time_limit ( 0 );
$x = 1;
while ( $x > 0 )
{
echo $x++ . '<br>';
flush();
}
Ergbniss: Browserabsturz.....