gpt4 book ai didi

php - 为什么 readfile() 会耗尽 PHP 内存?

转载 作者:IT王子 更新时间:2023-10-28 23:29:27 26 4
gpt4 key购买 nike

我已经看到很多关于如何有效地使用 PHP 下载文件而不是允许直接 HTTP 请求(以保证文件安全、跟踪下载等)的问题。

答案几乎总是PHP readfile() .

但是,尽管它在使用大文件进行测试时效果很好,但当它在拥有数百名用户的实时站点上时,下载开始挂起并且 PHP 内存限制已用尽。

那么 readfile() 的工作原理是什么导致内存在流量高时爆炸得如此糟糕?我认为它应该通过直接写入输出缓冲区来绕过大量使用 PHP 内存?

编辑:(澄清一下,我正在寻找“为什么”,而不是“我能做什么”。我认为 Apache 的 mod_xsendfile 是最好的规避方法)

最佳答案

Description
int readfile ( string $filename [, bool $use_include_path = false [, resource $context ]] )
Reads a file and writes it to the output buffer*.

PHP 必须读取文件并将其写入输出缓冲区。因此,对于 300Mb 的文件,无论您编写什么实现(通过许多小段或 1 个大块)PHP 最终都必须读取 300Mb 的文件。

如果需要多个用户下载文件,就会出现问题。(在一台服务器中,托管服务提供商将限制分配给每个托管用户的内存。由于内存有限,使用缓冲区并不是一个好主意。)

我认为使用直接链接下载文件对于大文件来说是一种更好的方法。

关于php - 为什么 readfile() 会耗尽 PHP 内存?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6627952/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com