php 上傳大檔案原理,剖析PHP上傳大檔案原理

2021-10-25 21:51:12 字數 1255 閱讀 9552

php給我帶來了更方便的程式設計,但是我們在使用時以會遇到問題,這裡就談談php上傳大檔案的小問題吧。由於涉及到本地和伺服器兩方面的安全問題,所以基於input type="file"形式的頁面檔案上傳一直處於乙個很尷尬的位置。一方面,使用者不希望隱私洩露,所以瀏覽器無法對使用者在上傳時選擇的檔案做有效的判斷。另一方面,為了伺服器端的安全,減輕傳輸負擔,系統又希望能在使用者開始上傳之前就將非法的檔案拒之門外。

一來一去,基於原始input方式的上傳,成為網路儲存**避之唯恐不及的遺留性問題,也造就了現在千奇百怪的外掛程式、上傳客戶端。input方式的上傳就如此之差麼?當然不是。上傳檔案不大的時候,它還是非常簡單可靠的,在php中,我們只需要乙個複合型表單。

乙個輸入框

和伺服器端的一行**

move_uploaded_file($_files['userfile']['tmp_name'], '/var/www/uploads/'. basename($_files['userfile']['name']));

就可以實現整個上傳過程。但隨檔案增大,表單上傳的不足就會暴露出來。尤其是我們想取得最基本的檔案大小來阻止php上傳大檔案這一簡單的想法,也變得如此困難。以下一一道來:通過max_file_siz。我們經常會在手冊裡讀到:

顯然php的開發者們也考慮到了php上傳大檔案的問題,但就像手冊所說,max_file_size只是對瀏覽器的乙個建議,事實上目前為止所有主流的瀏覽器並沒有採納這個建議,所以採用max_file_size約束檔案大小形同擺設,不可行。

通過伺服器端

max_file_size既然無效,那麼使用者可以將檔案上傳到伺服器,伺服器端通過$_files['userfile']['size']判斷使用者上傳的檔案大小,然後決定是否接受上傳並返回資訊。暫且排除伺服器的負荷以及可能存在的惡意破壞行為,這種解決方案聽起來無非是浪費一部分頻寬,也能對使用者上傳檔案作出約束。但這也是不可行的,php的檔案上傳受到php.ini以下這些設定的影響:post_max_size

upload_max_filesize

max_execution_time

memory_limit

雖然設定方法在手冊中都有比較詳細的說明,之所以仍然說此方法不可行,是因為php執行指令碼在超過memory_limit時,該次的post資料會全部丟失並且不會報錯!試想使用者填寫了乙個超長的表單,並伴隨乙個超過memory_limit的檔案一起上傳,經過了漫長的等待時間之後發現等來的又是一張乾乾淨淨的空白表單,那是何等印象深刻的使用者體驗啊。更何況數十m的伺服器流量僅僅用來檢測檔案大小,是現在的網路環境不允許的。

點讚 0

php 上傳大檔案

下來就是來講怎麼修改上傳檔案大小的。1.首先修改執行上傳檔案限制 一般的檔案上傳,除非檔案很小.就像乙個5m的檔案,很可能要超過一分鐘才能上傳完.但在php中,預設的該頁最久執行時間為 30 秒.就是說超過30秒,該指令碼就停止執行.這就導致出現 無法開啟網頁的情況.這時我們可以修改 max exe...

PHP大檔案上傳(切片上傳)

由於專案需要,經常要上傳幾百兆或者幾個g的檔案。考慮到檔案過大,直接上傳的話會超出php設定的表單提交限制大小,同時會占用較多的系統資源。於是考慮將檔案進行切片,然後將切片後的檔案統一上傳至檔案目錄,待全部上傳成功之後再將其合併成乙個檔案,同時後台md5驗證是否上傳成功。上面的思路是目前上傳大容量檔...

php上傳大檔案設定

開啟php.ini,首先找到 file uploads 區域,有影響檔案上傳的以下幾個引數 file uploads on 是否允許通過http上傳檔案的開關。預設為on即是開 upload tmp dir 檔案上傳至伺服器上儲存臨時檔案的地方,如果沒指定就會用系統預設的臨時資料夾 upload m...