PHP readfile () und große Dateien

Bei Verwendung von readfile () - mit PHP unter Apache - wird die Datei sofort in den Ausgabepuffer von Apache eingelesen und die Ausführung des PHP-Skripts abgeschlossen, oder wartet die Ausführung des PHP-Skripts, bis der Client den Download der Datei abgeschlossen hat (oder der Server das Timeout erreicht hat, was auch immer zuerst passiert)?

Die längere Hintergrundgeschichte:

Ich habe eine Website mit vielen großen MP3-Dateien (Predigten für eine lokale Kirche). Da nicht alle Dateien im Audioarchiv heruntergeladen werden dürfen, wird der Pfad /sermon/{filename}.mp3 so umgeschrieben, dass /sermon.php?filename={filename} wirklich ausgeführt wird. Wenn die Datei heruntergeladen werden darf, wird der Pfad umgeschrieben Der Inhaltstyp ist auf "Audio / MPEG" eingestellt und die Datei wird mit readfile () gestreamt. Ich habe Beschwerden erhalten (fast ausschließlich von iPhone-Nutzern, die die Downloads über 3G streamen), dass die Dateien nicht vollständig heruntergeladen wurden oder nach etwa 10 oder 15 Minuten abgeschnitten wurden. Als ich vom Streaming der Datei mit readfile () zum einfachen Umleiten zum Dateiheader ("Location: $ file_url") gewechselt bin; - Alle Beschwerden gingen verloren (ich habe sogar mit einigen Benutzern gesprochen, die das Problem zuvor auf Anforderung zuverlässig reproduzieren konnten).

Dies lässt mich vermuten, dass bei Verwendung von readfile () die PHP-Skript-Engine verwendet wird, bis die Datei vollständig heruntergeladen ist. Ich kann jedoch keine Referenzen finden, die diese Theorie bestätigen oder verweigern. Ich gebe zu, dass ich in der ASP.NET-Welt mehr zu Hause bin und das dotNet-Äquivalent von readfile () die gesamte Datei sofort in den IIS-Ausgabepuffer schiebt, sodass die ASP.NET-Ausführungspipeline unabhängig von der Übermittlung der Datei abgeschlossen werden kann an den Endkunden ... gibt es ein Äquivalent zu diesem Verhalten mit PHP + Apache?

Antworten auf die Frage(7)

Ihre Antwort auf die Frage