PHP警告:POST内容长度为113字节,超出了未知中-198810096字节的限制


PHP Warning: POST Content-Length of 113 bytes exceeds the limit of -1988100096 bytes in Unknown

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

他们最多可以上传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警告:未知:POST内容长度113字节超过了第0行未知中-198810096字节的限制〔11-Jun-2011 04:33:12〕PHP警告:未知:POST内容长度75字节超过了第0行未知中-198810096字节的限制〔11-Jun-2011 04:33:27〕PHP警告:未知:POST内容长度74字节超过了第0行未知中-198810096字节的限制〔11-Jun-2011 04:33:34〕PHP警告:未知:POST内容长度75字节超过了第0行未知中-198810096字节的限制〔11-Jun-2011 04:33:43〕PHP警告:未知:POST内容长度77字节超过了第0行未知中-198810096字节的限制〔11-Jun-2011 04:33:48〕PHP警告:未知:POST内容长度74字节超过了第0行未知中-198810096字节的限制〔11-Jun-2011 04:33:53〕PHP警告:未知:POST内容长度75字节超过了第0行未知中-198810096字节的限制[11-Jun-2011 04:34:20]PHP警告:未知:POST内容长度133字节超过了第0行未知中-198810096字节的限制〔11-Jun-2011 04:35:29〕PHP警告:未知:POST内容长度131字节超过了第0行未知中-198810096字节的限制〔11-Jun-2011 04:36:00〕PHP警告:未知:POST内容长度113字节超过了第0行未知中-198810096字节的限制〔11-Jun-2011 04:36:06〕PHP警告:未知:POST内容长度75字节超过了第0行未知中-198810096字节的限制〔11-Jun-2011 04:36:34〕PHP警告:未知:POST内容长度116字节超过了第0行未知中-198810096字节的限制

如果我把后最大值改回前8M,我会得到这样的消息:

PHP警告:POST内容长度11933650字节超过了第0行未知中8388608字节的限制

你知道我哪里错了吗?

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

一些PHP版本将其限制在顶部,这样它就不会变成负数(这是32位有符号整数的限制)。

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

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

此外,您应该考虑以下内容:

根据PHP手册,memory_limit设置是比较重要的一个。如果没有提供足够的内存,那么post数据大小检查就会通过,但PHP将没有足够的内存来实际处理post数据。您将得到另一个错误,超过内存。因此,当您配置PHP时,请注意post_max_size小于memory_limit

在您的示例中,memory_limit128M,因此它不能处理大小大于~128兆字节的后期数据。

(这篇博客文章展示了32位和64位系统上可能发生的情况以及大内存设置的表现)

您的"2000M"似乎超过了整数限制。来自手册:

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

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