我见过很多关于如何高效地使用PHP下载文件而不是直接HTTP请求(保持文件安全,跟踪下载等)的问题。为什么readfile()会耗尽PHP内存?
答案几乎总是PHP readfile()。
- Downloading large files reliably in PHP
- How to force download of big files without using too much memory?
- Best way to transparently log downloads?
,但尽管它与大文件测试,当它的上线的站点有几百个用户中的伟大工程,下载开始悬挂和PHP内存限制已经耗尽。
那么readfile()
的工作原理是什么,导致内存在流量很高时爆炸如此糟糕?我认为它应该通过直接写入输出缓冲区来避免大量使用PHP内存?
编辑:(为了澄清,我正在寻找一个“为什么”,而不是“我能做些什么”我认为Apache的mod_xsendfile是规避最好的办法)
你有PHP输出缓冲(通过'ob_start()')吗?如果是这样,PHP将捕获文件内容并导致内存问题。 – ceejayoz
在链接的PHP文档中使用示例,我没有 - 我有ob_clean();冲洗(); ReadFile的($文件); – tmsimont