PHP警告:POST内容 - n字节的长度超过了第0行中未知数的3145728字节的限制
问题描述:
在我的错误日志中找到上述错误令人惊讶,因为我认为我已经完成了必要的工作捕获错误在我的PHP脚本:PHP警告:POST内容 - n字节的长度超过了第0行中未知数的3145728字节的限制
if ($_FILES['image']['error'] == 0)
{
// go ahead to process the image file
}
else
{
// determine the error
switch($_FILES['image']['error'])
{
case "1":
$msg = "Uploaded file exceeds the upload_max_filesize directive in php.ini.";
break;
....
}
}
在我的php.ini脚本,相关设置:
memory_limit = 128M
post_max_size = 3M
upload_max_filesize = 500K
据我所知,3M相当于3145728个字节,这是什么,正在触发错误。如果文件大小大于500k但小于3M,则PHP脚本将能够按照正常运行,按照case 1
发出$msg
中的错误消息。
当帖子大小超过post_max_size
但仍然在内存限制内时,如何捕获此错误而不是让脚本突然终止并显示PHP警告?我看过类似的问题here,here和here,但找不到答案。
答
找到一个替代的解决方案,不与错误直接处理。下面的代码是由软件工程师安德鲁Curioso在他blog写:
if($_SERVER['REQUEST_METHOD'] == 'POST' && empty($_POST) &&
empty($_FILES) && $_SERVER['CONTENT_LENGTH'] > 0)
{
$displayMaxSize = ini_get('post_max_size');
switch(substr($displayMaxSize,-1))
{
case 'G':
$displayMaxSize = $displayMaxSize * 1024;
case 'M':
$displayMaxSize = $displayMaxSize * 1024;
case 'K':
$displayMaxSize = $displayMaxSize * 1024;
}
$error = 'Posted data is too large. '.
$_SERVER[CONTENT_LENGTH].
' bytes exceeds the maximum size of '.
$displayMaxSize.' bytes.';
}
正如在他的文章中,当投递大小超过post_max_size
的$_POST
和$_FILES
超全局数组将成为空解释。因此,通过测试这些错误并确认使用POST方法发送了一些内容,可以推断出发生了这样的错误。
实际上有一个类似的问题here,我以前找不到。
答
在上传甚至发生之前,您可以先用javascript对其进行检查吗?
// Assumed input for file in your HTML
<input type="file" id="myFile" />
//binds to onchange event of your input field
$('#myFile').bind('change', function() {
alert(this.files[0].size);
});
您也可以弹出一个尝试捕捉周围:
try
{
if (!move_uploaded_file('blah blah'))
{
throw new Exception('Too damn big.');
}
// Can do your other error checking here...
echo "Upload Complete!";
}
catch (Exception $e)
{
die ('File did not upload: ' . $e->getMessage());
}
为什么不将函数包装在'try..catch'块中? – inhan 2012-07-31 11:34:05
'error_reporting(E_ALL&〜E_WARNING);'关闭PHP警告。 – fdomig 2012-07-31 11:39:27
@fdomig这应该是绝对的最后的手段。 – 2012-07-31 11:48:17