2009-08-27 156 views
5

我正在研究允許在Web服務器上上傳和存儲大文件的應用程序。目前我使用PHP通過http處理POST文件。我有我的php.ini設置爲:大文件上傳

upload_max_filesize = 100M 
post_max_size = 100M 
memory_limit = 128M 
max_input_time = 6000 
max_execution_time = 6000 

似乎沒有爲LimitRequestBody設置任何apache指令。我使用APC來跟蹤文件上傳進度。出於某種原因,文件上傳總是停在50M。

我知道HTTP是不是上傳文件最有效的解決方案,但這個程序需要以用戶友好的,我知道有使用FTP的防火牆問題。

我想知道如果任何人都可以給我一些建議,什麼是正好50M停止我的下載?它必須是某種配置設置。

另外,有沒有我應該考慮和工作圍繞使用JavaScript/PHP HTTP文件上傳一些其他的方式。我已經研究過Java applets並使用flash。可能會使用swfuploader,但如果它的服務器配置導致我的上傳失敗通過http,我真的不知道java applet或flash上​​傳器如何解決這個問題。

我要指出,我希望能拿出一個解決方案,讓我在某一點上是非常大的文件上傳高達1 GB。

我用非常簡單的PHP接收文件

$uploaddir = '/'.$_POST['upload_directory'].'/'; 
$uploadfile = $uploaddir . basename($_FILES['file']['name']); 

if (is_uploaded_file($_FILES['file']['tmp_name'])) { 
    if (move_uploaded_file($_FILES['file']['tmp_name'], $uploadfile)) { some success code; } 

有明顯多一點給它比,但是這是我如何處理上傳的要點。

+0

你是如何上傳文件的,你在上傳文件後做了些什麼? – 2009-08-27 19:12:04

+0

簡單的php is_uploaded_file()和move_uploaded_file()以命令和拉動文件出來的$ _FILES – wallacer 2009-08-27 19:23:55

回答

4

幾個小時敲打我的頭後,我已經解決了這個問題。我使用Extjs作爲前端組件。我使用的上傳小部件有一個硬編碼設置,它將POST請求的MAX_ UPLOAD _FILESIZE屬性設置爲50M,並將我將其設置爲其他位置的值覆蓋。它現在按預期工作。感謝您的評論。

2

設置LimitRequestBody指令在你的虛擬主機。

http://www.cyberciti.biz/faq/apache-limiting-upload-size/

+0

這篇文章是關於如何設置LimitRequestBody限制上傳大小。如果我沒有設置LimitRequestBody,那它是不是已經沒有限制了? – wallacer 2009-08-27 19:25:17

+1

http://httpd.apache.org/docs/2.2/mod/core.html#limitrequestbody說:「如果客戶端請求超過該限制,服務器將返回錯誤響應而不是服務請求。」如果你沒有在瀏覽器中得到錯誤響應,這不是問題... – VolkerK 2009-08-27 20:14:16

+0

雅,我沒有得到一個錯誤,所以我知道這不是問題。我沒有足夠的「聲譽」來減少答案,但這個答案根本沒有幫助 – wallacer 2009-08-27 20:44:18