PHP警告:POST内容长度超出限制
PHP Warning: POST Content-Length exceeds the limit
我有一个带文件上传功能的简单联系表。我收到以下警告,但我想向用户发出一条错误消息,指出该文件大于限制。是的,我知道如果我关闭 error_reporting,我可以禁用 "Warning: POST Content-Length..." 消息,但我会警告用户。当我填写联系表格并尝试上传更大的文件时,又出现了一个问题,我按下提交,所有填写的文件都为空。有什么方法可以获取错误消息并且不会丢失填写的字段?
我所做的是构建一个 ajax 脚本来检查最大文件大小。因此我们可以在用户上传大文件之前警告他们。比上传失败好多了。
首先,javascript(示例使用jQuery,但这绝不是必需的):
var max_size = // Insert ajax code to fetch max size *in bytes* from server here.
$('form input[type="file"]').each(function() {
if ((typeof this.files != 'undefined') && this.files.length) {
total_size += this.files[0].size;
}
});
if (max_size < total_size) {
var warning = 'Maximum file size is ' + max_size + ' bytes';
return;
}
在服务器端,最大上传大小由这三个值中最小的决定:
function max_size() {
return Size::smallest(
Size::str_to_bytes(ini_get('post_max_size')),
Size::str_to_bytes(ini_get('memory_limit')),
Size::str_to_bytes(ini_get('upload_max_filesize'))
);
}
编写 str_to_bytes
和 smallest
函数留作 reader 的练习。
您可以先在 Javascript 中执行此操作,这样即使在文件到达服务器之前,Javascript 也会 alert/inform 用户认为文件大小超过允许的最大值尺寸。下面是一个示例,您可以先 here.
测试 fiddle
<html>
<head></head>
<body>
<input type="file" id="file_upload_1" name='file_upload_1' class="file_upload"/>
<!-- AND THEN, OTHER INPUT FORM FIELDS FOLLOW -->
<script type="text/javascript" src="jquery.js"></script>
<script type="text/javascript">
(function($) {
$(document).ready(function(){
var fileInput = $("#file_upload_1");
var MaxAllowedSize = 2000; // 2KB
var sizeKMGB = "2KB";
fileInput.on("change", function(evt){
var objFile = $(this);
var fileSize = document.getElementById("file_upload_1").files[0].size;
console.log(fileSize);
if(fileSize > MaxAllowedSize){
// RESET THE UPLOAD TO NOTHING... SO USER CAN UPLOAD AGAIN...
var fSize = parseFloat(fileSize/1000).toFixed(2);
var sUnit = fSize + "KB";
if(fSize >= 100){
fSize = parseFloat( fileSize/(1000*1000)).toFixed(2);
sUnit = fSize + "MB";
}
objFile.val(null);
alert("Upload File-size Must not exceed " + sizeKMGB + ". \nYou tried to upload a File with about " + sUnit + ".")
}
});
});
})(jQuery);
</script>
</body>
</html>
我有一个带文件上传功能的简单联系表。我收到以下警告,但我想向用户发出一条错误消息,指出该文件大于限制。是的,我知道如果我关闭 error_reporting,我可以禁用 "Warning: POST Content-Length..." 消息,但我会警告用户。当我填写联系表格并尝试上传更大的文件时,又出现了一个问题,我按下提交,所有填写的文件都为空。有什么方法可以获取错误消息并且不会丢失填写的字段?
我所做的是构建一个 ajax 脚本来检查最大文件大小。因此我们可以在用户上传大文件之前警告他们。比上传失败好多了。
首先,javascript(示例使用jQuery,但这绝不是必需的):
var max_size = // Insert ajax code to fetch max size *in bytes* from server here.
$('form input[type="file"]').each(function() {
if ((typeof this.files != 'undefined') && this.files.length) {
total_size += this.files[0].size;
}
});
if (max_size < total_size) {
var warning = 'Maximum file size is ' + max_size + ' bytes';
return;
}
在服务器端,最大上传大小由这三个值中最小的决定:
function max_size() {
return Size::smallest(
Size::str_to_bytes(ini_get('post_max_size')),
Size::str_to_bytes(ini_get('memory_limit')),
Size::str_to_bytes(ini_get('upload_max_filesize'))
);
}
编写 str_to_bytes
和 smallest
函数留作 reader 的练习。
您可以先在 Javascript 中执行此操作,这样即使在文件到达服务器之前,Javascript 也会 alert/inform 用户认为文件大小超过允许的最大值尺寸。下面是一个示例,您可以先 here.
测试 fiddle <html>
<head></head>
<body>
<input type="file" id="file_upload_1" name='file_upload_1' class="file_upload"/>
<!-- AND THEN, OTHER INPUT FORM FIELDS FOLLOW -->
<script type="text/javascript" src="jquery.js"></script>
<script type="text/javascript">
(function($) {
$(document).ready(function(){
var fileInput = $("#file_upload_1");
var MaxAllowedSize = 2000; // 2KB
var sizeKMGB = "2KB";
fileInput.on("change", function(evt){
var objFile = $(this);
var fileSize = document.getElementById("file_upload_1").files[0].size;
console.log(fileSize);
if(fileSize > MaxAllowedSize){
// RESET THE UPLOAD TO NOTHING... SO USER CAN UPLOAD AGAIN...
var fSize = parseFloat(fileSize/1000).toFixed(2);
var sUnit = fSize + "KB";
if(fSize >= 100){
fSize = parseFloat( fileSize/(1000*1000)).toFixed(2);
sUnit = fSize + "MB";
}
objFile.val(null);
alert("Upload File-size Must not exceed " + sizeKMGB + ". \nYou tried to upload a File with about " + sUnit + ".")
}
});
});
})(jQuery);
</script>
</body>
</html>