iT邦幫忙

0

用PHP上傳檔案, 如果要傳個1~2GB?

請問各位大大

小弟之前寫了個傳檔案程式
發現要改php.ini
upload_max_filesize = 32M
post_max_size = 32M

這種做法等於是傳檔需要先暫存在RAM之後才寫入系統
但這樣子不就會非常的吃RAM !?
所以想請教有什好方法上傳檔案又不會這麼吃RAM
如果PHP做不到, 用什才能做到!?
因為我想寫一個WEB介面的傳檔案功能

carl830 iT邦研究生 5 級 ‧ 2011-11-26 23:44:02 檢舉
我現在有在維護一個平台,上傳的部份也是跟上面那位所提到的一樣,
不過我們平台的ftp認證table是固定跟web帳號一樣的,沒有作清除的這個動作,
不知道如果不登入web就能使用ftp會有什麼隱憂在@@
wiseguy iT邦超人 1 級 ‧ 2011-11-26 23:59:01 檢舉
隱憂倒是沒什麼明顯隱憂。
當初會把 Web 與 FTP 認證 table 分開,是因為我們的系統的 FTP root 會變動,是要在 user 登入 Web 後,選擇某一個身份,才知道應該對應到哪個目錄,所以得另外加一個 FTP 專用的 table,並且在 Web 登出後,就同步清除,以防 user 登出 Web 再登入時,若選了別的身份,FTP root 目錄是錯誤的。
如果你的系統的 FTP root 是固定的目錄,那當然只需要一個 table 讓 Web 與 FTP 共用即可。並且不必做清除動作。

1 個回答

12
wiseguy
iT邦超人 1 級 ‧ 2011-11-17 00:22:13
最佳解答

upload_max_filesize = 32M
post_max_size = 32M
並不是說上傳檔案會用 memory 暫存,這設定只是限制能上傳多大的檔案而已。
至於 PHP 會使用的 memory 大小,是 memory_limit = ??? 這個設定值在限定。

所謂 PHP 上傳檔案的方式,也就是 Form submit 的方式。這種方式建議是不要傳超過 10MB,要不然 user 會等到不耐煩,而又不能做別的事 (在這個網站上)。是很糟糕的 UI 設計。

要在網頁裡傳 GB 級的檔案,除非用一些元件幫你製造出進度條,要不然傳那麼大實在很不佳。建議還是架一個 FTP 來輔助吧。

我以前是用 proftpd 來搭配 PHP。proftpd 設定認證使用 mysql,而 php 在登入的時候,就把該 user 的帳密寫到 proftpd 會用的認證 table 裡,登出的時候就順便清除。醬子 user 只有在登入 Web 之後才能使用 FTP 上傳,用的帳密也跟 Web 用的一樣。

我要發表回答

立即登入回答