【问题标题】:PHP Warning: POST Content-Length exceeds the limitPHP 警告:POST 内容长度超出限制
【发布时间】:2016-11-25 04:13:46
【问题描述】:

我有一个简单的文件上传联系表。我收到以下警告,但我想向用户发出此文件大于限制的错误消息。是的,我知道如果我关闭 error_reporting,我可以禁用“警告:POST Content-Length ...”消息,但我会警告用户。当我填写联系表格并尝试上传更大的文件时,又出现了一个问题,我按下提交,我所有填写的文件都将为空。有什么方法可以获取错误消息并且不会丢失填写的字段吗?

【问题讨论】:

  • 听说过ajax 吗? .您可以使用ajax,只需在选择时检查文件大小并避免将其提交到服务器,并且使用ajax,您将留在同一页面上并且能够保留输入文本,请在此处阅读有关ajax 的信息:api.jquery.com/jquery.ajax

标签: php content-length


【解决方案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_bytessmallest 函数留给读者作为练习。

【讨论】:

    【解决方案2】:

    您可以先在 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>
    

    【讨论】:

      猜你喜欢
      • 2013-02-15
      • 2020-10-15
      • 2011-09-13
      • 2019-10-15
      • 2016-07-15
      • 2012-11-17
      • 2013-09-08
      • 2013-03-24
      • 2013-05-16
      相关资源
      最近更新 更多