PHP大檔案上傳問題?

時間 2021-06-01 09:18:56

1樓:guess

一.強烈建議改用PHP7

上傳大檔案要注意在php5中filesize返回的檔案大小有問題,一般不會超過2g,網上找了很多替代方法都無效說白了就是32位惹的禍,建議直接更換php7.之前bug就是這個引發的。不信的話可以測試5G和3G,乙個返回值是1.

5G,乙個乾脆就是負數- -,我戳。。。

二.按如下步驟改PHP.INI,大小自己掂量(個人改了個10G貌似沒問題),注意PHP.INI的位置,可在apache裡看。

1、max_execution_time

變數max_execution_time設定了在強制終止指令碼前PHP等待指令碼執行完畢的時間,此時間以秒計算。當指令碼進入了乙個無限迴圈狀態時此變數非常有用。然而,當存在乙個需要很長時間完成的合法活動時(例如上傳大型檔案),這項功能也會導致操作失敗。

在這樣的情況下必須考慮將此變數值增加,以避免PHP在指令碼正在執行某些重要過程的時候將指令碼關閉。

修改為:max_execution_time =800

2、file_uploads = On(原來問開就不用設定了)

3、upload_max_filesize =2M修改為800M

4、同表單提交相關的乙個變數是post_max_size,它將控制在採用POST方法進行一次表單提交中PHP所能夠接收的最大資料量。需要將預設的8 MB改得更大。相反,應當適當將其降到更為實際的數值。

但如果希望使用PHP檔案上傳功能,則需要將此值改為比upload_max_filesize還要大。

也修改為:post_max_size =900M

5、max_input_time

此變數可以以秒為單位對通過POST、GET以及PUT方式接收資料時間進行限制。如果應用程式所執行環境處在低速鏈路上,則需要增加此值以適應接收資料所需的更多時間.

修改為:max_input_time =900

6、memory_limit =10M(這裡需要說明,盡量不要更改這裡,我改動之後發現有錯誤提示,但是我改成預設的128M就又好了)

為了避免正在執行的指令碼大量使用系統可用記憶體,PHP允許定義記憶體使用限額。通過memory_limit變數來指定單個指令碼程式可以使用的最大記憶體容量

變數memory_limit的值(不要超出伺服器內寸最大值)

修改為:memory_limit =128M

三.用move_uploaded_file()上傳即可。

2樓:

我現在終於可以很好地回答這個問題了

首先大檔案上傳的設計思路肯定是要將乙個檔案先分割成一小份一小份的檔案進行順序上傳,分割檔案是實現方案在web上有三種,一種是使用flash技術,對檔案已經分割,另外一種是通過html5自帶的檔案處理api對檔案進行分割,前者有乙個缺陷在於大檔案首先要全部載入進記憶體,所以上傳的大檔案不能突破你可用記憶體的限制,後者的缺點是現代瀏覽器才支援html5,IE789,IE10都不行,還有一種方案只針對於IE,activeX可以切割檔案。切割後的小塊檔案上傳到伺服器之後,需要通過程式進行拼接到乙個完整的檔案。由於大檔案上傳需要考慮中斷的問題,所以上傳檔案需要記錄上傳到那一塊的位置資訊。

上傳過程通過什麼協議來實現,可以使用http協議,比較簡單,PHP好處理。也可以通過socket來上傳,相對來說實現上難度大點,沒有太好的例子可以使用,需要考慮的問題比較大,當然如果socket程式設計寫得好,對上傳更加可控,效率高。還可以去了解一下websocket,http:

//socket.io

以及ruby在中方面的解決方案。

我最終實現的是通過flash和html5實現了檔案切割,然後再通過http來上傳檔案,後台通過PHP來對檔案進行拼接。

3樓:姚大松

我用過更毒的辦法,用socket,完全不是受PHP.INI限制,可實時顯示上傳進度,不過需要你的伺服器的防火牆設定有一定要求,因為用這個辦法,要動態開啟伺服器高於1024以上的埠用於接收資料

4樓:王仕軍

首先你需要配置伺服器端的php.ini能夠接受這樣大小的檔案,其次大檔案上傳肯定是個耗時的工作,需要在客戶端通知使用者上傳的進度,具體可以採用swfUpload實現。另外,如果伺服器效能,如鏈結超時等原因限制,可以讓使用者把檔案分卷壓縮,之後上傳。

這也是許多論壇採用的方法。因為大檔案上傳占用的資源會很多。

超大檔案如何計算md5?

使用openssl的寫法 bool Md5FileCpp const std string filepath,std string strMd5 FILE pFile fopen filepath.c str rb if pFile NULL return false MD5 CTX ctx uns...

js上傳檔案時,如何實時顯示上傳進度,上傳速度?

182 ProgressEvent bubbles false cancelBubble false cancelable false composed false currentTarget XMLHttpRequestdefaultPrevented falseeventPhase 0 isTr...

關於2019人大檔案學考研的提問?

招魚 2021考研er,一戰人大,初試第一 390分 https zhuanlan p 361659238 範懟懟 鄙人18年考的本校本專業表示,考哪所學校和本科並無太大關係 一般來說好的大學不可能會有本校對於專業課知識的優勢,除非極個別學校在分數上有優惠政策 考本校主要是複試上的優勢,考研是個導師...