用户在我的网站上传图片时,我遇到了很多问题。
他们最多可以上传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将采用2000M
或2G
等内存设置,并通过不执行边界检查将其转换为整数字节。则从2G
或2048M
开始的数字将是-2147483648
字节。
一些PHP版本将其限制在顶部,这样它就不会变成负数(这是32位有符号整数的限制)。
如果要在这样的系统上实现最大可能的字节数,请使用2147483647
。这等于2GB减去一个字节。
或者,如果您需要处理大数据,可以考虑使用64位系统。
此外,您应该考虑以下内容:
根据PHP手册,memory_limit
设置是比较重要的一个。如果没有提供足够的内存,那么post数据大小检查就会通过,但PHP将没有足够的内存来实际处理post数据。您将得到另一个错误,超过内存。因此,当您配置PHP时,请注意post_max_size
小于memory_limit
。
在您的示例中,memory_limit
是128M
,因此它不能处理大小大于~128兆字节的后期数据。
(这篇博客文章展示了32位和64位系统上可能发生的情况以及大内存设置的表现)
您的"2000M"似乎超过了整数限制。来自手册:
PHP允许位值的快捷方式,包括K(千)、M(兆)和G(千兆)。如果您使用其中任何一个,PHP都会自动进行转换。注意不要超过32位带符号整数的限制(如果您使用的是32位版本),因为这会导致脚本失败。
尝试一个较小的值,比如1000M
。2千兆字节的传入数据可能无论如何都不太可能。