11

目前,当用户上传照片时,页面显示“警告:XXX字节的 POST 内容长度超过第 0 行未知中 21000000 字节的限制”。

我知道这意味着什么,我不是在寻找诸如增加 max_upload 值甚至 memory_size_limit 之类的解决方案......因为即使您明确告诉他们只允许最大 20MB 文件并且只允许图像,用户也可能上传 TB 的废话.

我正在寻找解决方案:

  • 如何防止此警告甚至发生?
    或者至少:
  • 如何防止显示此警告?

编辑:请阅读!- 请理解,我当然在处理错误/警告(从第 1 行开始),问题是这发生在虚拟“第 0 行”上,这就是为什么我需要隐藏错误或防止它引发 - 因为我不能放发生错误的地方之前的任何代码。

EDIT2:经过长时间的研究和挖掘,我终于有了一个想法——它奏效了——看看我自己的答案。

4

7 回答 7

11

因此,经过搜索而不是今天的工作,我终于知道如何解决这个问题,它奏效了,甚至没有造成太大的损害。但请先了解你在做什么,然后再做。:) 正如我在其中一条评论中所建议的那样,确实可以关闭 .htacess 中的 PHP 错误 - 只需关闭 PHP 启动警告即可。

在应用解决方案之前:

请注意:将此代码插入 .htaccess 后,您将看不到任何 启动错误

另请注意: “0”行上的启动错误比这一行要多。

做之前:在你这样做之前,你应该准备你的脚本,它应该检查上传的内容大小并给用户一个适当的信息消息。警告未显示的事实并不意味着您不应该对此采取任何措施。这意味着完全相反-您应该尽一切可能使某些事情至少接近警告引发-检查,如果可以,请仔细检查,处理错误并引发您自己的错误消息。

将此添加到您的 .htaccess 中:

php_flag display_startup_errors off

它并不像看起来那么邪恶:

请注意,这只会关闭启动错误。
所以所有常规的 PHP 错误/警告/通知都保持打开 :)

甚至 XAMPP 的 PHP“本身”也推荐它用于生产:

php.ini文件字面意思是:

; display_startup_errors
;   Default Value: Off
;   Development Value: On
;   Production Value: Off

PS: “启动错误”似乎是PHP 脚本本身执行之前的那些错误 - 这些错误通常试图“说服”你它们在第 0 行

感谢我的想法和这个答案:如何在 .htaccess 文件中禁用 PHP 中的通知和警告?

编辑:由于这是一个 php_flag 设置,如果您有自定义安装 PHP,您当然也可以在 php.ini 中默认设置它 :)

于 2014-02-11T23:48:00.303 回答
9

问题是

如何防止警告:POST Content-Length

答案是,无需编辑任何配置值,将此代码放在将接收要处理的表单的文件的开头:

 <?php // here start your php file
 ob_get_contents();
 ob_end_clean();

那是。没有更多警告,以及您不想在页面上输出的任何其他内容。之后,按照其他地方的建议,您可以决定如何处理:

if($_SERVER['REQUEST_METHOD'] == 'POST' && empty($_POST) && empty($_FILES) && $_SERVER['CONTENT_LENGTH'] > 0){ echo"WoW your file is too big!"; }

如果以另一种方式传递有关要由 Php 处理的文件的正确值,也可以将文件分块。

如此处所述警告:POST Content-Lenght ...

于 2016-11-06T21:26:16.300 回答
1

我遇到了类似的问题,想知道您是否找到了满意的解决方案。目前,我的“PHP 警告:21010354 字节的 POST 内容长度超过了 8388608 的限制”在日志中,我认为对此我无能为力。

我在 Zend 框架中工作,当用户上传上述文件时,它基本上会终止所有常见的 POST 数据解析,因此对 getParams() 的响应不包含任何常见的 POST 参数。这意味着用户收到验证错误,说其中一个字段丢失,这是一种误导。

在研究这一点时,我发现了一些您可能想要查看的有趣 php_ini 设置,特别是 enable_post_data_reading 和 always_populate_raw_post_data。就我而言,我正在上传一个 20M 的文件,最大 8M 的帖子和最大 10M 的上传文件,来自 php://input 的结果似乎是一个完整的 20M 文件,即使帖子数据现在是空的.

所以我将手动检查原始数据是否超过限制,并假设一切都失败了(并保释)。我建议您可以编写自己的代码来解析原始数据,以填充 $_POST 数据。然后,您可以根据需要启动代码,并且只有在您准备好后,才检查用户上传的数据是否超过限制。这取决于你,然后在解析它之前返回一个错误,或者如果它没问题,解析它。只要您将 PHP 发布和上传限制设置为高于您的用户限制,它就应该允许用户违反规则,允许您的代码检测到后膛并抱怨它。

于 2015-06-08T16:14:47.627 回答
1

这是正确防止此错误的真正解决方案。

在 php.ini 中设置此参数:

enable_post_data_reading = On
upload_max_size=0
post_max_size=0

警告:请务必在您的表单中包含此行

<input type="hidden" name="MAX_FILE_SIZE" value="2048576" />

最重要的是:

  • 一定要检查 $_FILES['file']['error'] 的代码错误

  • 一定要检查你在 PHP 中上传的大小

于 2016-11-20T11:35:30.917 回答
0

正如您已经发现的那样,在 PHP 中是不可能的,因为 PHP 只能从第 1 行开始捕获错误。

唯一的解决方法是在 PHP 源代码中挖掘,找到引发错误的位置并在编译你的服装 php 版本之前从 PHP 源中删除该部分。

但请注意,抛出错误消息是有原因的。

于 2014-02-11T18:16:07.883 回答
-3

为了防止发生此错误,您必须在之前检查上传文件的大小,如果它们太大,您必须取消上传!

为了不向他们展示我认为如果你写在你的 php 脚本中就足够了

error_reporting(0);
于 2014-02-11T14:47:16.113 回答
-5

1.上传前可以用JavaScript检查文件大小,但是这可以被篡改!

2.上传后保存文件前检查文件大小。

<?php

$size = filesize($uploaded_file);
if($size > $your_size_limit)
{
    echo "Throw bunch of errors";
}
else
{
    //save it
}
?>

3.不要试图隐藏错误来解决问题。

于 2014-02-11T14:59:16.260 回答