2013-02-01 89 views
2

我有一個應用程序。讓您通過ajax一次上傳多個文件。它的意思爲大文件,但一旦進入到2GB +我伸手象這樣的錯誤:大PHP上傳內存限制

[Fri Feb 01 11:22:56 2013] [error] [client x.x.x.x] PHP Fatal error: Out of memory (allocated 2331770880) (tried to allocate 1165449891 bytes) in Unknown on line 0, referer: ... 

在我的php.ini,我有這些CONFIGS:

post_max_size = 53687091200M 
upload_max_filesize = 53687091200M 
max_input_time = -1 
memory_limit = -1 
max_execution_time -1 
max_file_uploads = 20 

據我所知,這應該足以處理3GB的上傳。但幾乎在每一次嘗試中,我都會遇到這些錯誤。我討論過支持我的VPS,他們說這一切看起來不錯,應該能夠處理它。

我有一個nginx反向代理設置,它有一點幫助,但還不夠。我錯過了什麼嗎?

有沒有一種方法可以減輕HTTP與PHP的負載?我測試了Java應用程序,並且它們表現非常出色,但是(不幸的是)我需要保持UI的良好狀態。

+3

PHP並不適合上傳多GB文件。你最好使用Java,然後讓PHP完成處理。 – Petah

+0

有何建議?我可以用的任何東西,我不知道,'藏在背景中'?爲了能夠仍然顯示一個很好的看着'用戶界面? :) –

+0

您是否嘗試過在通過ajax上傳時分割文件?也許可以解決上傳大小小於2GB的問題,比如排隊的串行|並行上傳等。 – Gntem

回答

1

如果您正在上傳非常大的文件,您可能需要在將它們傳遞給PHP之前進行「代理」。我的經驗是,長期存在的PHP線程可能會意外彈出,並且PHP有時會遇到大內存分配問題。

看看nginx's upload progress module,它會在將文件傳遞到上游服務器(在本例中爲PHP)之前將文件緩衝到磁盤,並提供監視和報告進度的機制。

如果你仍然有問題,你可以通過使用upload module完全地將PHP從equasion中取出(就管理上傳而言);只需將文件直接轉儲到磁盤上需要的位置,並通知PHP它的位置即可。