程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> 網頁編程 >> PHP編程 >> 關於PHP編程 >> php 無法上傳大文件完美解決方案

php 無法上傳大文件完美解決方案

編輯:關於PHP編程

       php.ini無法上傳大文件完美解決辦法

      1、打開php.ini(打開方式就不用說了,百度一大堆)

      2、查找post_max_size

      表單提交最大數值,此項不是限制上傳單個文件的大小,而是針對整個表單的提交數據進行限制的

      默認為8M,設置為自己需要的值,此參數建議要設置比upload_max_filesize大一些

      3、查找File Uploads

      是否允許通過http上傳文件的開關,確認file_uploads = on

      4、查找upload_tmp_dir

      文件上傳至服務器上存儲臨時文件的地方,如果沒指定就會用系統默認的臨時文件夾

      如果系統報錯提示有“XXX臨時目錄XXX”的話,這個目錄就需要你來設置一個有效目錄,沒報錯就不用管

      5、查找upload_max_filesize

      允許上傳文件大小的最大值,默認為2M,設置為自己需要的值此參數建議不要超過post_max_size值,因為它受控於post_max_size值(就算upload_max_filesize設置了1G,而post_max_size只設置了2M時,大於2M的文件照樣傳不上去,因為它受控於post_max_size值)

      6、如果要上傳大於8M的文件,還需要對下面的參數也進行設置:

      查找max_execution_time = 600 ;每個PHP頁面運行的最大時間值(秒),默認30秒

      max_input_time = 600 ;每個PHP頁面接收數據所需的最大時間,默認60秒

      memory_limit = 8M ;每個PHP頁面所需要的最大內存,默認8M

      nginx法上傳大文件完美解決辦法

      1.client_body_buffer_size 盡量設置的大點,這是基於速度的考慮,如果因為設置的過小,導致上傳的文件老要寫磁盤,那速度就太慢了。

      2.client_body_temp_path 路徑要有可寫權限,這個是明顯的錯誤了。改正了就好

      3.client_max_body_size 設置上傳文件的最大值,這個是基於安全的考慮,我們認為正常用戶不會或者基本不會上傳太大的文件。

      可以設置為client_max_body_size 100m; 或者按照自己的業務來設置這個值。

      例子

      nginx的配置。

     代碼如下  

     cd /export/servers/nginx/conf/nginx.conf,在這個配置文件裡面的server段裡面的

    location / {

        root   html;

        index  index.html index.htm;

       client_max_body_size    1000m;

      }

      加上了client_max_body_size 字段,怎麼重啟都不行。後來在總配置文件裡面發現了分配置文件:

     代碼如下  

    sendfileon;
        #tcp_nopush     on;
        
        #keepalive_timeout  0;
        keepalive_timeout  65;
          
        #gzip  on;
        include domains/*;
        #include domains/chat.local;
        #include domains/chat.erp.com;
        #include domains/support.chat.com;
        #include douains/chat.com;
        
        server {
    listen       80; 
    server_name  localhost;

      於是找到了分配置文件,在分配置文件裡面進行修改。分配置文件配置如下:

     代碼如下   server
    {
       listen   80;
       server_name  chat.erp.360buy.com;
    #  access_log    /export/servers/nginx/logs/chat.erp.360buy.com;
       location / {
       proxy_pass     http://tomcat;
    client_max_body_size    1000m;
         }
    }

      用/export/servers/nginx/sbin/nginx -s reload重啟下,上傳文件的大小受限的問題就解決了。

      分享下我的解決過程,希望對大家有幫助。

      如果還是無法解決我們需要看看是不是php表單設置問題

      這段代碼分為兩個文件,一個為upload.html,一個是upload.php

      upload.html

     代碼如下   <form enctype="multipart/form-data" action="upload.php" method="post">
    <input type="hidden" name="max_file_size" value="100000">
    <input name="userfile" type="file">  
    <input type="submit" value="上傳文件">
    </form>

      其中,

      請注意

      這是一個標簽,我們要實現文件的上傳,必須指定為multipart/form-data,否則服務器將不知道要干什麼。

      值得注意的是文件upload.html中表單選項 MAX_FILE_SIZE 的隱藏值域,通過設置其Value(值)可以限制上載文件的大小。

      MAX_FILE_SIZE 的值只是對浏覽器的一個建議,實際上它可以被簡單的繞過。因此不要把對浏覽器的限制寄希望於該值。實際上,PHP 設置中的上傳文件最大值,是不會失效的。但是最好還是在表單中加上 MAX_FILE_SIZE,因為它可以避免用戶在花時間等待上傳大文件之後才發現該文件太大了的麻煩。

      upload.php

     代碼如下   $f=&$HTTP_POST_FILES['Myfile'];
    $dest_dir=’uploads’;//設定上傳目錄
    $dest=$dest_dir.’/’.date("ymd")."_".$f['name'];//設置文件名為日期加上文件名避免重復
    $r=move_uploaded_file($f['tmp_name'],$dest);
    chmod($dest, 0755);//設定上傳的文件的屬性
    或者
    <?copy($_FILES[MyFile][tmp_name],$_FILES[MyFile][name]);?>

      以上范例中 $_FILES 數組的內容如下所示。我們假設文件上傳字段的名稱為 userfile(名稱可隨意命名)

    1. 上一頁:
    2. 下一頁:
    Copyright © 程式師世界 All Rights Reserved