Предупреждение PHP: длина содержимого POST превышает лимит

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


person Zsolt Janes    schedule 21.07.2016    source источник
comment
Вы когда-нибудь слышали о ajax ? . вы можете использовать ajax, просто проверьте размер файла при выборе и избегайте отправки его на сервер, а также с помощью ajax вы останетесь на той же странице и сможете сохранить вводимые тексты, читайте об ajax здесь: api.jquery.com/jquery.ajax   -  person Arsh Singh    schedule 21.07.2016


Ответы (2)


Вы можете сначала сделать это в Javascript, чтобы еще до того, как файл попал на сервер, Javascript предупредил/сообщил пользователю, что размер файла превышает максимально допустимый размер. Ниже приведен пример, который вы можете протестировать и сначала поработать здесь.

    <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>
person Poiz    schedule 21.07.2016

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

person TRiG    schedule 21.07.2016