2013-07-23 45 views
4

当使用fopen(“php:// input”)上传一个120MB文件时,我们得到了来自php的“内存耗尽”警告。 php memory_limit被设置为256MB,我们有足够的内存可用。内存耗尽使用php://输入

我们删除了除fopen(“php:// input”)以外的所有代码,但它仍然失败,所以错误必须存在。

我们尝试了不同的内存限制,在大约500MB时,错误消失。不过,我们真的不应该使用500MB,所以问题仍然存在:为什么我们在115-120MB大小的文件上使用fopen来获得内存耗尽错误。

我们的PHP的测试文件:

<?php 
    $inputHandler = fopen('php://input', "r"); 
?> 

和错误:

262144000 bytes exhausted (tried to allocate 120829495 bytes) 

我希望有人能帮助我们。这让我们生气了!

在此先感谢!

+0

你不应该只在从$ inputHandler读取时在fopen()上得到这个错误 –

+0

你的fopen处理程序不是唯一使用你的PHP内存的东西。在尝试将大文件加载到内存之前,使用'memory_get_usage()'来查看已经使用了多少内存。 – aynber

+0

@MarkBaker这就是我们也想到的,但这是唯一的代码行,它崩溃了。当我们观察httpd进程时,我们可以看到文件上传时内存在上升,但从未超过130MB。 –

回答

0

尝试配置到无限的内存使用情况:

ini_set('memory_limit', '-1'); 
+0

这是没有选择。我们不应该使用超过256MB –

0

这可能是因为PHP是试图自动解析POST数据。 要禁用此功能,请在php版本5.4+中将enable_post_data_reading设置为0.(我为此使用了.htaccess) 但实际上,在php 5.4+中,最好使用$ _FILES上传...