【问题标题】:PHP Warning: POST Content-Length of 113 bytes exceeds the limit of -1988100096 bytes in UnknownPHP 警告:113 字节的 POST 内容长度超出未知中 -1988100096 字节的限制
【发布时间】:2011-09-13 00:12:14
【问题描述】:

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

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

如果我将帖子最大值更改回顶部 8M,我会收到这样的消息:

PHP 警告:11933650 字节的 POST 内容长度超过了 Unknown on line 0 中 8388608 字节的限制

任何想法我哪里出错了?

【问题讨论】:

  • 为什么有理智的人会尝试通过网络表单上传 2GB 大的文件?
  • @ThiefMaster:嗯,这可能与要上传的文件的大小有关 :)。
  • 有更好的方法来上传大文件 - 例如 FTP。
  • @ThiefMaster:可能是现有的基于网络的媒体内容系统。我认为以最少的努力让事情顺利进行并没有什么错。有什么害处?为什么 FTP “更好”?即使 FTP 更好,也不会使 HTTP “错误”。

标签: memory file-upload php


【解决方案1】:

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

一些 PHP 版本在顶部对此进行了限制,因此它不会变成负数(即 32 位有符号整数限制)。

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

或者,如果您需要处理大数据,请考虑使用 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)

【讨论】:

  • 那么你认为我应该将内存限制更改为什么,然后我应该增加内存或更改帖子大小?
  • daza166:您要上传的文件有多大?一次应该上传多少个文件?
  • 一次可以上传 6 张图片,大小取决于照片,大多数人上传的图片可能刚刚超过 1MB。前几天引起问题的照片是 jpeg 982.6 KB(1006188 字节)
  • 好的,然后计算每张图片2M,六张图片,这是12M的设置,然后图片可以大一点。这也与128Mmemory_limit 设置兼容。
  • 那么在这种情况下我是否需要更改任何内容是 memory=128 和 2000M 的 post-size 和 upload-size 足以阻止这个问题? 1000M 用于 post 和 uplaod 是不够的,因为 1006188 字节更多。那么我应该将它们的所有内容保留为 2000M 并将内存保留为 128M
【解决方案2】:

您的“2000M”似乎超出了整数限制。来自manual

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

尝试较小的值,例如1000M。无论如何,2 GB 的传入数据可能不太可能。

【讨论】:

猜你喜欢
  • 2013-03-24
  • 2013-05-16
  • 2016-12-22
  • 2012-07-28
相关资源
最近更新 更多