2016-07-21 7 views
0

私はファイルアップロードの簡単な連絡フォームを持っています。次の警告が表示されますが、このファイルが上限よりも大きいというエラーメッセージをユーザーに表示したいと考えています。はい、私はerror_reportingをオフにすると "Warning:POST Content-Length ..."というメッセージを無効にできますが、ユーザーに警告します。連絡先フォームに記入して大きなファイルをアップロードしようとするともう1つの問題が発生しました。私はsubmitを押して、満たされたすべてのファイルが空になります。それはエラーメッセージを取得し、入力フィールドを失うことはありませんどのような方法ですか?PHP警告:POSTコンテンツの長さが上限を超えています

+0

「ajax」について聞いたことがありますか? 。あなたは 'ajax'を使うことができます。選択時にファイルサイズをチェックし、それをサーバーに提出しないようにしてください。また、ajaxで同じページに留まり、入力テキストを保持することができます。 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スクリプトを構築したことです。したがって、の前にユーザに警告することができます。より大きなファイルをアップロードします。アップロードが失敗するよりもずっと良い経験です。

先ず、ジャバスクリプト(例では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; 
} 

は、最大アップロードサイズは、これらの3つの値の 最小によって決定されます。 str_to_bytessmallest機能を書く

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')) 
    ); 
} 

は読者の課題として残されています。

+0

答えに感謝します! –

関連する問題