2016-07-21 3 views
0

У меня есть простая форма контакта с загрузкой файла. Я получил следующее предупреждение, но я хотел бы сделать сообщение об ошибке для пользователей, что этот файл больше предела. Да, я знаю, что могу отключить сообщение «Warning: POST Content-Length ...», если я отключу error_reporting, но я бы предупредил пользователей. Еще одна проблема возникла, когда я заполняю контактную форму и пытаюсь загрузить файл большего размера, я нажимаю submit, и все мои заполненные поля будут пустыми. Это какой-то способ получить сообщение об ошибке и не потерять заполненные поля?PHP Предупреждение: POST Content-Length превышает лимит

+0

Когда-либо слышал о 'ajax'? , вы можете использовать 'ajax', просто проверьте размер файла при выборе и не отправляйте его на сервер, а также с помощью ajax вы останетесь на одной странице и сможете сохранить входные тексты, прочитать о ajax здесь: http: // api.jquery.com/jquery.ajax/ –

ответ

1

Вы можете сделать это в 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> 
+0

благодарит за ответ! –

-1

Что я сделал, построил сценарий 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 функций остается в качестве упражнения для читателя.

+0

спасибо за ответ! –