【发布时间】:2013-07-22 13:59:34
【问题描述】:
当使用 fopen("php://input") 上传一个 120MB 的文件时,我们会收到来自 php 的“内存耗尽”警告。 php memory_limit 设置为 256MB,我们有足够的可用内存。
我们删除了除 fopen("php://input") 之外的所有代码,但仍然失败,所以错误一定在里面。
我们尝试了不同的内存限制,在大约 500MB 时错误消失了。尽管如此,我们确实不应该使用 500MB,所以问题仍然存在:为什么在大小为 115-120MB 的文件上使用 fopen 会出现内存耗尽错误。
我们的 php 测试文件:
<?php
$inputHandler = fopen('php://input', "r");
?>
还有错误:
262144000 bytes exhausted (tried to allocate 120829495 bytes)
我希望有人可以帮助我们。这让我们发疯了!
提前致谢!
【问题讨论】:
-
只有从 $inputHandler 读取时,您才应该在 fopen() 上收到该错误
-
您的 fopen 处理程序并不是唯一使用您的 PHP 内存的东西。在尝试将大文件加载到内存之前,请使用
memory_get_usage()查看已使用的内存量。 -
@MarkBaker 这也是我们的想法,但这是唯一的代码行,它正在崩溃。当我们观察 httpd 进程时,我们可以看到上传文件时内存在增加,但从未超过 130MB。
-
@aynber 每个执行的 php 脚本都会得到 memory_limit 的解决。所以我使用的脚本应该有 256MB 可以使用
-
@MarkVisser 我有这个问题。你能解决这个问题吗?
标签: php memory input upload limit