PHP readfile () i duże pliki

Gdy używasz readfile () - używając PHP na Apache - czy plik jest natychmiast odczytywany do bufora wyjściowego Apache i wykonanie skryptu PHP jest zakończone, czy też wykonanie skryptu PHP czeka, aż klient zakończy pobieranie pliku (lub serwer wygaśnie, cokolwiek nastąpi wcześniej)?

Dłuższa historyjka:

Mam stronę internetową z dużą ilością dużych plików mp3 (kazania do lokalnego kościoła). Nie wszystkie pliki w archiwum audio mogą być pobierane, więc ścieżka /sermon/{filename}.mp3 jest przepisywana, aby naprawdę wykonać /sermon.php?filename={filename} i jeśli plik może zostać pobrany, to typ zawartości jest ustawiony na „audio / mpeg”, a plik przesyłany strumieniowo za pomocą readfile (). Otrzymuję skargi (prawie wyłącznie od użytkowników iPhone'a, którzy przesyłają strumieniowo pliki do pobrania przez 3G), których pliki nie są w pełni pobierane lub które odcinają się po około 10 lub 15 minutach. Kiedy przełączałem się z przesyłania strumieniowego pliku z readfile () do prostego przekierowania do pliku - nagłówek („Location: $ file_url”); - wszystkie skargi odeszły (sprawdziłem nawet kilku użytkowników, którzy mogli wcześniej niezawodnie odtworzyć problem).

To prowadzi mnie do podejrzeń, że podczas używania readfile () silnik skryptów PHP jest w użyciu, dopóki plik nie zostanie w pełni pobrany, ale nie mogę znaleźć żadnych referencji potwierdzających lub zaprzeczających tej teorii. Przyznaję, że jestem bardziej w świecie ASP.NET, a odpowiednik dotNet dla readfile () natychmiast wypycha cały plik do bufora wyjściowego IIS, aby potok wykonawczy ASP.NET mógł się zakończyć niezależnie od dostarczenia pliku do klienta końcowego ... czy istnieje odpowiednik tego zachowania w PHP + Apache?

questionAnswers(7)

yourAnswerToTheQuestion