Файл чтения PHP ()и большие файлы

При использовании readfile()--использование PHP на Apache --файл немедленно считывается в выходной буфер Apache и выполнение сценария PHP завершается, или выполнение сценария PHP ожидает завершения загрузки файла клиентом (или истечения времени ожидания сервера, в зависимости от того, что произойдет раньше )?

Более длинная история -:

У меня есть веб-сайт с большим количеством больших mp3-файлов (проповедей для поместной церкви ). Не все файлы в аудиоархиве разрешено скачивать, поэтому путь /sermon/{filename}.mp3 переписан так, чтобы действительно исполнялся /sermon.php?filename={filename} и если файлу разрешено скачивание, то Тип содержимого установлен на «audio/mpeg», а файл передается с помощью readfile (). Я получаю жалобы (почти исключительно от пользователей iPhone, которые осуществляют потоковую загрузку через 3G ), что файлы загружаются не полностью или обрываются примерно через 10–15 минут. Когда я переключился с потоковой передачи файла с файлом чтения ()на простое перенаправление на заголовок файла --(«Местоположение :$file _url» ); --все жалобы исчезли (Я даже проверил несколько пользователей, которые ранее могли надежно воспроизвести проблему по запросу ).

Это заставляет меня подозревать, что при использовании readfile ()скриптовый движок PHP используется до тех пор, пока файл не будет полностью загружен, но я не могу найти никаких ссылок, подтверждающих или опровергающих эту теорию. Я признаю, что чувствую себя как дома в мире ASP.NET, и эквивалент dotNet readfile ()немедленно помещает весь файл в выходной буфер IIS, поэтому конвейер выполнения ASP.NET может завершиться независимо от доставки файла. файл конечному клиенту...есть ли эквивалент этому поведению с PHP+Apache?

11
задан Revent 20 December 2018 в 04:40
поделиться