2015-11-03 45 views
-2

我不想限制用戶上傳大文件。用戶可以上傳任何文件大小。當我嘗試了22 MB的文件大小,它工作。但是當我嘗試200MB文件時,它似乎並沒有進入if塊,並且在世界上的所有時間都上傳文件後,將else塊的輸出返回給我。 我的工作如下。我錯過了什麼嗎?超大文件上傳無法使用PHP/HTML

HTML:

<form method="post" enctype="multipart/form-data" class="form-horizontal" role="form"> 
<label for="document">Upload your Document</label> 
<input type="file" id="document" name="document"> 
<label for="doc_cat">Document Category:</label> 
<select name="doc_cat" id="doc_cat" class="form-control" required> 
<option value="">--Select a Category--</option> 
<option value="1">Sales</option> 
<option value="2">Technical</option> 
<option value="3">Pricing</option> 
<option value="4">Policies</option> 
<option value="5">Other</option> 
</select> 
<button type="button" class="btn btn-primary" id="upload" name="upload">Upload</button> 
</form> 

JQUERY/AJAX:

<script type="text/javascript"> 
    $(document).ready(function() { 
     $('#upload').click(function() { 
      var formData = new FormData($('form')[0]); 
      var that = this; 
      $.ajax({ 
       url: 'upload-document-proccess.php', //Server script to process data 
       type: 'POST', 
       data: formData, 
       async: false, 
       beforeSend: function() { 
         $("#loading-image").show(); 
       }, 
       success: function (msg) { 
        $("#loading-image").hide(); 
        $("#display-return-msg").html(msg); 
        $("#display-return-msg").fadeIn("slow").delay(5000).fadeOut("slow"); 
       }, 
       cache: false, 
       contentType: false, 
       processData: false 
      }); 
     $('form')[0].reset(); 
     return false; 
    }); 
}); 
</script> 

上傳文檔-proccess.php:

if(isset($_POST) && $_FILES['document']['size'] > 0) 
{ 
    $category_id = $_POST['doc_cat']; 
    $doc_desc = htmlspecialchars($_POST['doc_desc'],ENT_QUOTES); 
    switch ($category_id) { 
     case 1: 
      $category="Sales"; 
      break; 
     case 2: 
      $category="Technical"; 
      break; 
     case 3: 
      $category="Pricing"; 
      break; 
     case 4: 
      $category="Policies"; 
      break; 
     case 5: 
      $category="Other"; 
      break; 
     default: 
      # code... 
      break; 
    } 

    $target_dir = "uploads/"; 
    $target_file = $target_dir . basename($_FILES["document"]["name"]); 

    $fileName = $_FILES['document']['name']; 
    $tmpName = $_FILES['document']['tmp_name']; 
    $fileSize = $_FILES['document']['size']; 
    $fileType = $_FILES['document']['type']; 

    $fp  = fopen($tmpName, 'r'); 
    $content = fread($fp, filesize($tmpName)); 
    $content = addslashes($content); 
    if (move_uploaded_file($_FILES["document"]["tmp_name"], $target_file)) { 
     $msg = "The file ". basename($_FILES["document"]["name"]). " has been uploaded to ".$category." Category"; 
    } else { 
     echo "Sorry, there was an error uploading your file."; 
    } 
    fclose($fp); 

    if(!get_magic_quotes_gpc()) 
    { 
     $fileName = addslashes($fileName); 
    } 

    try { 
     $sql = "INSERT INTO document (doc_name, doc_type, doc_size, user_id, doc_category_id, doc_date, doc_desc) 
     VALUES ('$fileName', '$fileType', '$fileSize', '$user_id', '$category_id', now(), '$doc_desc')"; 
     // use exec() because no results are returned 
     $conn->exec($sql); 
     ?><script type="text/javascript"> 
     var msg = '<?php echo $msg; ?>'; 
      $(document).ready(function(){ 
       $("#display-return-msg").html(msg); 
       $("#display-return-msg").fadeIn("slow").delay(5000).fadeOut("slow"); 
      }); 
     </script> 
     <?php 
     } 
    catch(PDOException $e) 
     { 
     echo $sql . "<br>" . $e->getMessage(); 
     } 
    //echo "<br>File $fileName uploaded<br>"; 
}else{ 
    echo "Please select File to upload."; 
} 
?> 

在 '#顯示返回味精' 身份證,當我上傳200MB文件時,它給了我「請選擇要上傳的文件」。當我上傳22 MB文件時,我得到了'msg'變量的值,這是正確的。請給我建議我該怎麼辦?

+1

在php.ini中檢查'upload_max_filesize'和'post_max_size'的值是多少,然後增加限制,然後檢查? – AnkiiG

+0

我嘗試上傳66MB文件,它給我「允許的內存大小134217728字節耗盡」。這意味着post_max_size是128 MB。但是,如果仔細閱讀它,當我上傳200MB文件時,它會將我引向其他循環。 –

回答

-1

你需要增加上傳限制在php.ini文件

編輯:你應該問的主機,讓你owerwrite PHP的ini配置上傳限制,如果他們這樣做了,你就可以,如果做到這一點,他們不能或不希望你不能這樣做。

後,他們啓用此,您可以:

1.create local copy of php.ini in folder where is script which performs upload 
2.you can do it in code, example for turning of erro reporting: 
error_reporting(-1); 
3.you can set this in cpanel for this account if is possible/enabled. 
+0

這是不可能的,因爲網站正在生產。不是本地主機。 –

+0

好的,我編輯我的答案。 – fico7489

1

有很多的,可以限制上傳的文件大小設置。這裏是基於Windows上安裝XAMPP的示例。但在linux上它應該非常相似。
發現在http://mewbies.com/how_to_install_setup_apache_xampp.htm

TO更改文件的尺寸允許上傳:

爲了讓大文件上傳,你必須改變你的PHP & Apache的conf文件中的設置,我們將使用 600MB的文件大小爲例,將其更改爲您自己的需要:
編輯此文件:D:\ xampp \ php \ php。INI

搜索:upload_max_filesize的
更改 到:
的upload_max_filesize = 600M

搜索:post_max_size要
有這樣的:
的post_max_size = 8M
更改爲(必須大於upload_max_filesize) :
post_max_size = 700M

搜索爲:memory_limit的
有這樣的:memory_limit的= 128M
更改爲,如果你不希望任何限制:
memory_limit的= -1
或改變(必須比post_max_size要大):
memory_limit的= 800M

搜索:的max_execution_time
有這樣的:的max_execution_time = 30
更改爲例如:
的max_execution_time = 9600

搜索(正下方的max_execution_time):max_input_time設置= 60
有這樣的:max_input_time設置= 60
更改爲:max_input_time設置= 3600

完成,保存更改。

編輯這個文件:d:\ XAMPP \ apache的\的conf \額外\的httpd-default.conf
搜索:LimitRequestBody
如果你的conf沒有這條線;它添加
有這樣的:LimitRequestBody 102400
更改爲:
LimitRequestBody 6億

將其設置爲0,這意味着無限高達2147483647個字節(2GB)

重新啓動您的Web服務器。

+0

它在生產不是本地主機,所以我不認爲我有權訪問php.ini文件或conf文件。這是可能的編程? –

+0

@KetanJoshi取決於你在服務器上獲得的特權。如果你有權限,你也可以用[ini_set()](http://php.net/manual/en/function.ini-set.php)覆蓋'php.ini'設置。 –

0

你可以在第一行使用測試這樣的線

echo phpinfo();exit; 

,找到並選中「max_file_uploads」如果它確實有比你的需求較少通過在寫第一頁的增加它

ini_set('max_file_uploads', 'as per your need size') 
+0

如果您有任何疑問或疑問,請告知我。 – PRANAV

+0

其實它是工作代碼。只有當我上傳大文件時它不起作用。截至目前,我已經測試上傳22M,這是工作正常。對於66M你看到的主要問題的評論,我已經提到了它給出了什麼錯誤,當我上傳超大文件如199MB,它給我的結果我的.php文件的其他塊。 二,我也不只是想上傳圖片文件類型。可以有視頻,pdf和zip文件幾乎所有的文件。 –

+0

確定點,所以你可以像在第一行那樣測試使用這一行echo phpinfo(); exit;找到並檢查'max_file_uploads'是否小於你的要求,通過在第一頁ini_set('max_file_uploads','根據你的需要大小')寫入來增加它; – PRANAV

0

要將大文件上傳到web服務器,需要在php中修改一些設置(使用.htaccess)。兩個php配置選項,最大上傳大小:upload_max_filesize和post_max_size。對於200兆字節的文件大小,它們都可以設置爲「200M」。

+0

我試過這個,寫得很清楚。但它是說在服務器上找不到頁面。如果你用語法來幫助我,那將會很棒。如果我錯過了一些東西。 php_value upload_max_filesize 200M php_value post_max_size 200M 我試過這個。 –

+0

#設置最大發布大小 php_value post_max_size 200M #設置上傳文件大小 php_value upload_max_filesize 200M –