У меня есть простая форма контакта с загрузкой файла. Я получил следующее предупреждение, но я хотел бы сделать сообщение об ошибке для пользователей, что этот файл больше предела. Да, я знаю, что могу отключить сообщение «Warning: POST Content-Length ...», если я отключу error_reporting, но я бы предупредил пользователей. Еще одна проблема возникла, когда я заполняю контактную форму и пытаюсь загрузить файл большего размера, я нажимаю submit, и все мои заполненные поля будут пустыми. Это какой-то способ получить сообщение об ошибке и не потерять заполненные поля?PHP Предупреждение: POST Content-Length превышает лимит
ответ
Вы можете сделать это в Javascript сначала, чтобы еще до того, как файл мог попасть на сервер, Javascript предупредил/сообщил пользователю, что размер файла больше максимального разрешенного размера. Ниже приведен пример, который вы можете проверить и начать с первого here.
<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>
благодарит за ответ! –
Что я сделал, построил сценарий 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
функций остается в качестве упражнения для читателя.
спасибо за ответ! –
Когда-либо слышал о 'ajax'? , вы можете использовать 'ajax', просто проверьте размер файла при выборе и не отправляйте его на сервер, а также с помощью ajax вы останетесь на одной странице и сможете сохранить входные тексты, прочитать о ajax здесь: http: // api.jquery.com/jquery.ajax/ –