if (false !== ($len = readfile($filename)))
Das kann bei größeren Dateien problematisch werden. Eine sequentielle Verarbeitung wäre besser.
Darf ich fragen warum? Bin halt noch nicht so weit...
In Toms Funktion wird die Datei zunächst komplett in den Hauptspeicher geladen. Krasses Beispiel: Du stellst ein 2 Gigabyte Video der letzten Weihnachstfeier ins Netz. 2 Gigabyte RAM-Verbrauch für einen Prozess/Download sind ungünstig. Logisch, oder? Parallele Downloads würden die Problematik entsprechend vervielfachen. Womöglich könnte auch das PHP Memory-Limit betroffen sein. Letzteres dann pro Client und unter Vorbehalt! PHP ist nicht meine Welt.
Würde man die Datei sequentiell auslesen und ausgeben, hätte man dieses Problem nicht. Den Code dazu kann ich dir mangels PHP-Kenntnissen nicht sagen, sollte sich aber fix googlen lassen.
Womöglich ist das für dich auch nicht relevant, weil bei dir z.B. nur Dateien mit max. 300 KB in Frage kommen. Aber Tom bat ja um die grundsätzliche Bewertung seiner Funktion, daher mein Einwand.