PHP警告:POST内容长度为113字节超过了未知的-1988100096字节限制

时间:2011-06-11 10:24:36

标签: memory file-upload php

我在网站上传图片时遇到了很多问题。

他们最多可以上传6张图片

最初我不得不将php.ini中的值更改为:

upload_max_filesize = 2000M
post_max_size = 2000M
max_execution_time = 120
max_file_uploads = 7
memory_limit=128M

我不得不改变这种状态,因为会出现各种错误,例如内存不足,超出最大值等等。

在检查包含以下内容的错误日志之前,一切正常:

[11-Jun-2011 04:33:06] PHP Warning:  Unknown: POST Content-Length of 113 bytes exceeds the limit of -1988100096 bytes in Unknown on line 0
[11-Jun-2011 04:33:12] PHP Warning:  Unknown: POST Content-Length of 75 bytes exceeds the limit of -1988100096 bytes in Unknown on line 0
[11-Jun-2011 04:33:27] PHP Warning:  Unknown: POST Content-Length of 74 bytes exceeds the limit of -1988100096 bytes in Unknown on line 0
[11-Jun-2011 04:33:34] PHP Warning:  Unknown: POST Content-Length of 75 bytes exceeds the limit of -1988100096 bytes in Unknown on line 0
[11-Jun-2011 04:33:43] PHP Warning:  Unknown: POST Content-Length of 77 bytes exceeds the limit of -1988100096 bytes in Unknown on line 0
[11-Jun-2011 04:33:48] PHP Warning:  Unknown: POST Content-Length of 74 bytes exceeds the limit of -1988100096 bytes in Unknown on line 0
[11-Jun-2011 04:33:53] PHP Warning:  Unknown: POST Content-Length of 75 bytes exceeds the limit of -1988100096 bytes in Unknown on line 0
[11-Jun-2011 04:34:20] PHP Warning:  Unknown: POST Content-Length of 133 bytes exceeds the limit of -1988100096 bytes in Unknown on line 0
[11-Jun-2011 04:35:29] PHP Warning:  Unknown: POST Content-Length of 131 bytes exceeds the limit of -1988100096 bytes in Unknown on line 0
[11-Jun-2011 04:36:00] PHP Warning:  Unknown: POST Content-Length of 113 bytes exceeds the limit of -1988100096 bytes in Unknown on line 0
[11-Jun-2011 04:36:06] PHP Warning:  Unknown: POST Content-Length of 75 bytes exceeds the limit of -1988100096 bytes in Unknown on line 0
[11-Jun-2011 04:36:34] PHP Warning:  Unknown: POST Content-Length of 116 bytes exceeds the limit of -1988100096 bytes in Unknown on line 0

如果我将帖子最大值更改回前8M,我会得到如下信息:

PHP Warning:  POST Content-Length of 11933650 bytes exceeds the limit of 8388608 bytes in Unknown on line 0

我出错的任何想法?

2 个答案:

答案 0 :(得分:21)

在某些32位系统上,PHP将采用2000M2G等内存设置,并通过不执行边界检查将其转换为整数字节数。从2G2048M开始的数字将为-2147483648个字节。

某些PHP版本将其置于顶部,因此它不会进入负数(即32位有符号整数限制)。

如果要在此类系统上实现最大可能的字节数,请使用 2147483647 。这等于2千兆字减去一个字节。

或者,如果您需要处理大数据,请考虑使用64位系统。

此外,您应该考虑以下事项:

According to the PHP manualmemory_limit设置更为重要。如果它没有提供足够的内存,那么后期数据大小检查将会通过,但PHP没有足够的内存来实际处理后期数据。你会得到另一个错误,那就是内存超出了。因此,在配置PHP时,请注意post_max_size小于memory_limit

在您的示例中,memory_limit128M,因此无法处理大小超过128 MB的后期数据。

This blog post shows what can happen and how large memory settings on 32bit and 64bit systems behave

答案 1 :(得分:7)

看起来你的“2000M”超过了整数限制。来自manual

  

PHP允许比特值的快捷方式,包括K(千),M(兆)和G(千兆)。如果您使用其中任何一个,PHP将自动执行转换。注意不要超过32位有符号整数限制(如果你使用的是32位版本),因为它会导致你的脚本失败。

尝试较小的值,比如1000M。无论如何,可能不太可能有2千兆字节的传入数据。