tms*_*ont 22 php memory readfile
我已经看到很多关于如何有效地使用PHP下载文件而不是允许直接HTTP请求(保持文件安全,跟踪下载等)的问题.
答案几乎总是PHP readfile().
但是,虽然它在使用大文件进行测试时效果很好,但是当它在拥有数百个用户的实时网站上时,下载开始挂起并且PHP内存限制已经耗尽.
那么readfile()当流量高时,导致内存爆炸的工作原理是什么呢?我以为它应该通过直接写入输出缓冲区绕过大量使用PHP内存?
编辑:(澄清一下,我正在寻找"为什么",而不是"我能做什么".我认为Apache的mod_xsend文件是规避的最好方法)
Description
int readfile ( string $filename [, bool $use_include_path = false [, resource $context ]] )
Reads a file and writes it to the output buffer*.
Run Code Online (Sandbox Code Playgroud)
PHP必须读取文件并将其写入输出缓冲区.因此,对于300Mb文件,无论您编写的实现是什么(通过许多小段,或通过1个大块),PHP最终都必须读取300Mb的文件.
如果多个用户必须下载该文件,则会出现问题.(在一台服务器中,托管服务提供商将限制给予每个托管用户的内存.使用这种有限的内存,使用缓冲区不是一个好主意.)
我认为使用直接链接下载文件对于大文件来说是一种更好的方法.
| 归档时间: |
|
| 查看次数: |
13664 次 |
| 最近记录: |