Я видел много вопросов о том, как эффективно использовать PHP для загрузки файлов, а не для прямого HTTP-запроса (чтобы защитить файлы, отслеживать загрузки и т.д.).
Ответ почти всегда PHP readfile().
- Загрузка больших файлов в PHP
- Как заставить загружать большие файлы, не используя слишком много памяти?
- Лучший способ прозрачного загрузки журналов?
НО, хотя он отлично работает во время тестирования с огромными файлами, когда он на живом сайте с сотнями пользователей, загрузки начинают зависать, а пределы памяти PHP исчерпаны.
Итак, как же работает readfile()
, что приводит к тому, что память настолько сильно взрывается, когда трафик высок? Я думал, что он должен обойти тяжелое использование памяти PHP, написав непосредственно в выходной буфер?
EDIT: (Чтобы уточнить, я ищу "почему", а не "что я могу сделать". Я думаю, что Apache mod_xsendfile - лучший способ обойти)