certo

invece di

while (!feof($fp)) {
$str[] = fread($fp, 4096);
}
fclose($fp);
$ISO = implode('',$str);
print $ISO;

fai

while (!feof($fp)) {
// VANNO PARSATI GLI HEADERS \\
echo fread($fp, 8192);
}
fclose($fp);

---

Ovviamente facendo questo c'è un grosso problema, ovvero gli headers!
Devi fare una cosa particolare ... metti i vari chunk in un'array, come facevi prima, e ogni chunk, prima di metterlo, lo parsi alla ricerca di un doppio invio (solo \n\n) e se lo trovi tagli il chunk al punto che ti serve, li analizzi e acquisisci informazioni come la dimensione del file e simili dopo di che invii le informazioni che servono. Una volta fatta questa fase puoi inviare in blocco il resto senza problemi

Se vuoi aumentare ancora il buffer puoi farlo ma su windows non puoi ricevere più di 8192 byte per blocco