2016-06-22 52 views
2

我已經無法上傳(.OBJ)文件到服務器,並得到一個「錯誤1」這意味着文件太大,上傳到服務器,即使php.ini文件改變

上傳的文件超過在php.ini中的upload_max_filesize指令

我從這個網頁信息 - http://php.net/manual/en/features.file-upload.errors.php

然後我去了php.ini文件,並改變了upload_max_filesize和都10至10000M

當我嘗試上傳文件即使只有3MB時,仍然收到「錯誤1」。我也重新啓動了服務器,以便我對php.ini文件所做的更改可以生效。我知道我的代碼適用於較小的文件,因爲我可以發送一個包含單詞「Test」的小TXT文件。

這裏是form.php文件,它包含處理服務器端發送文件的PHP代碼和創建文件選擇和上傳功能的HTML代碼。

<?php 
ini_set('display_errors', 1); 
error_reporting(E_ALL); 

ini_set('max_execution_time', 3000000); 

if ($_SERVER['REQUEST_METHOD'] === 'POST') { 
    var_dump($_FILES); 
    echo "<br/><b>File Name:</b> " . $_FILES["file"]["name"] . "<br>"; 
    echo "<b>Type:</b> " . $_FILES["file"]["type"] . "<br>"; 
    echo "<b>Size:</b> " . ($_FILES["file"]["size"]/1024) . " kB<br>"; 
    echo "<b>Temp File Name:</b> " . $_FILES["file"]["tmp_name"] . "<br>"; 
    echo "<b>Error:</b> " . $_FILES["file"]["error"] . "<br>"; 

    $sourcePath = $_FILES['file']['tmp_name'];   // Storing source path of the file in a variable 
    $targetPath = "upload/" . $_FILES['file']['name']; // Target path where file is to be stored 

    move_uploaded_file($sourcePath, $targetPath); 

    exit; 
} 
?> 

<!DOCTYPE html> 
<html> 
<head> 
    <script src="https://code.jquery.com/jquery-2.2.4.min.js"></script> 
</head> 
<body> 
    <form action="form.php" method="post" enctype="multipart/form-data"> 
     <label>File</label> 
     <input type="file" name="file"> 
     <input type="submit" value="Upload"> 
    </form> 
    <div></div> 
</body> 
<script> 

$(function() { 
    $('form').on('submit', function (e) { 
     e.preventDefault(); 

     $.ajax({ 
      url: this.action, 
      type: this.method, 
      data: new FormData(this), 
      processData: false, 
      contentType: false, 
      success: function (res) { 
       $('div').html(res); 
      } 
     }); 
    }); 
}); 

</script> 
</html> 

總結我的問題是,爲什麼我不能上傳所需的文件,即使我已經更改了php.ini文件的相應變量?

+0

打印phpinfo頁面並檢查其中的值:<?php phpinfo(); ?> – vsakos

+0

@vsakos我用phpinfo()檢查了值,它表示'upload_max_filesize'設置爲2M。所以它沒有被更新。我仍然無法更新這個值,因爲我現在已經嘗試重新啓動Apache Webserver,但沒有改變任何東西。 – skelto

+0

@vsakos我一定是更新了一個不同的php.ini文件。我去了phpinfo()頁面上的php.ini文件目錄,並更新了'upload_max_filesize',它工作正常!謝謝您的幫助! – skelto

回答

1

你必須重新啓動Web服務器你:

service apache restart #If you have Apache 
service nginx restart #If you have NGINX 

如果您運行的是PHP-FPM:

service php-fpm restart 

你有多個php.ini中的? 當心:

/etc/php/php-fpm 
/etc/php/php-cli 
/etc/php/php-cgi 

在某些情況下你還必須讓你的Web服務器大文件上傳。

NGINX:從客戶端

client_max_body_size 10000M; 
+1

我重新啓動了Apache Web服務器,但仍然收到'錯誤1'。我似乎沒有多個php.ini的。 – skelto

+1

我正在更改錯誤的php.ini文件。重新啓動Web服務器也是一個關鍵步驟。謝謝! – skelto

+0

是的。當你使用「正常」的PHP而不是PHP的FPM,你必須重新啓動你的Apache,所以PHP.ini中的新設置得到加載。祝你有個好的一天 –

0

Jquery的AJAX傳遞斷絕僅僅只有數據,而不是文件。如果你想用jquery ajax傳輸文件,那麼試試這個jquery extended library。我以前用過它,它工作得很好。