目前,当用户上传照片时,该页面显示“警告: XXX 字节的POST内容长度超过了第0行未知中21000000字节的限制”。
我知道这意味着什么,我不是在寻找像增加max_upload值甚至memory_size_limit这样的解决方案......因为即使你明确告诉用户,用户可能会和用户 上传数TB的废话它们只有最多20MB的文件,只允许使用图像。
我正在寻找解决方案:
编辑:请仔细阅读! - 请理解当然我正在处理错误/警告之后(从第1行开始),问题是这发生在虚拟的“第0行”这就是我需要的原因隐藏错误或阻止错误 - 因为我无法在发生错误的地方放置任何代码。
EDIT2:经过长时间的研究和挖掘,我得到了一个想法 - 它有效 - 看看我自己的答案。
答案 0 :(得分:11)
因此,在搜索而不是今天工作之后,我终于知道如何解决这个问题,它有效,甚至没有造成太大的伤害。但在做之前,请先了解你在做什么。 :)正如我在其中一条评论中建议的那样,真的可以在.htacess中关闭PHP错误 - 只需关闭PHP启动警告。
请注意:将此代码插入.htaccess后,您将无法看到任何 启动错误
另请注意:“0”行的启动错误多于此行。
之前执行:在执行此操作之前,您应该以检查上传内容大小和向用户提供正确信息的方式准备脚本。警告没有显示不这一事实意味着您不应对此做任何事情。这意味着完全相反 - 你应该尽一切可能做出至少接近警告加注的东西 - 检查,仔细检查你是否可以,处理错误并提出你自己的错误信息。
<强> php_flag display_startup_errors off
强>
请注意,这会关闭启动错误 。
因此所有常规PHP错误/警告/通知都保持开启:)
php.ini
文件文字说:
; display_startup_errors
; Default Value: Off
; Development Value: On
; Production Value: Off
PS:“启动错误”似乎是错误之前 PHP脚本自身执行 - 这些错误通常会试图“说服”你他们在第0行。
感谢我的想法和答案:How to disable notice and warning in PHP within .htaccess file?
编辑:由于这是一个php_flag设置,如果您有PHP的自定义安装,您当然也可以在php.ini中默认设置它:)
答案 1 :(得分:4)
问题是
如何防止警告:POST内容长度
答案是,在不编辑任何配置值的情况下,将此代码放在将接收要处理的表单的文件的最开头:
<?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处理的文件的正确值。
所述答案 2 :(得分:1)
我遇到了类似的问题,并想知道你是否找到了满意的解决方案。目前,我的'PHP警告:POST Content-Length为21010354字节超过限制为8388608'在日志中,我认为我无能为力。
我在Zend框架内工作,当用户上传文件时,它基本上会杀死所有常见的POST数据解析,因此对getParams()的响应不包含任何常用的POST参数。这意味着用户收到验证错误,说其中一个字段丢失,这是误导性的。
在研究这个时,我发现了一些你可能想看的有趣的php_ini设置,特别是enable_post_data_reading和always_populate_raw_post_data。在我的情况下,我正在上传一个20M的文件,最大8M的帖子和10M的上传文件,并且php://输入的结果似乎是20M文件的完整,即使帖子数据现在是空的。
因此,我将手动检查原始数据是否超出限制,并假设一切都失败(如果它已经(并保释))。我建议您可以编写自己的代码来解析原始数据,以填充$ _POST数据。然后,您可以根据需要启动代码,并且只有在您准备好时,检查用户是否上传了超出限制的数据。这取决于你,然后在解析它之前返回一个错误,或者如果没关系,解析它。只要您将PHP帖子和上传限制设置为高于您的用户限制,就应该允许用户违反规则,允许您的代码检测后膛并抱怨它。
答案 3 :(得分: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 [&#39;文件&#39;] [&#39;错误&#39;]
请务必在PHP中检查上传的大小
答案 4 :(得分:0)
正如您已经发现的那样,在PHP中无法做到这一点,因为PHP只能从第1行开始捕获错误。
唯一的办法是挖掘PHP源代码,找到抛出错误的位置,并在编译服装php版本之前从PHP源中删除该部分。
但请注意,出于某种原因会抛出错误消息。
答案 5 :(得分:-3)
要防止发生此错误,您必须先检查上传文件的大小,如果它们很大,您必须取消上传!
如果你用你的PHP脚本编写
,我认为它就足够了error_reporting(0);
答案 6 :(得分:-5)
1.您可以在使用JavaScript上传之前检查文件大小,但这可能会被篡改!
2.在上传后<保存文件之前检查文件大小。
<?php
$size = filesize($uploaded_file);
if($size > $your_size_limit)
{
echo "Throw bunch of errors";
}
else
{
//save it
}
?>
3.不要试图隐藏错误来解决问题。