2010-10-01 71 views
1

我想用php腳本上傳1GB大小的文件,如果文件大小小於20MB,它可以很好地工作,但是當我增加文件大小比在網站上按上傳按鈕時,它會上傳該文件(我想,因爲它需要幾分鐘),然後,而不是執行upload.php,我的Firefox請求我下載upload.php,所以我猜,文件正在上傳,但我的PHP腳本無法執行。1GB文件上傳使用PHP

在谷歌搜索後也發現我對以下的php.ini設置,我做我的php_info()函數表明我的設置已經改變..

/* php.ini中開始 */

memory_limit的= 512M

的post_max_size = 15000M

file_uploads =開

的upload_max_filesize = 15000M

max_input_time設置= 20000

的max_execution_time = 20000

的session.gc_maxlifetime = 20000

/* 的php.ini端 */

+2

爲什麼上傳使用php腳本的文件太大?瘋。使用FTP。 – Ruel 2010-10-01 03:49:14

+0

其實我正在製作一個網站,可以上傳文件,並且用戶可以與其他用戶共享文件鏈接... – Sanniv 2010-10-01 03:50:18

+0

作爲一個側面提示:如果你正在上傳1GB文件,你應該使用Flash Uploader(Gmail/Youtube/etc用於高級上傳),因爲它允許輕鬆拖放,但最重要的是,一個視覺上吸引人的進度條。 – Kranu 2010-10-01 06:18:32

回答

7

上傳文件大小的限制受限於LOT,而不僅限於PHP。 PHP有其侷限性,Apache有其侷限性,許多Web服務都有自己的限制,然後對共享主機上的用戶權限可以設置的/ tmp目錄大小有限制。更別提硬盤空間不足了!

您的php.ini看起來不錯,但正如已經建議的 - 檢查Apache中的LimitRequestBody,並確保您的Web服務允許這樣做。

當您需要上傳超大文件時,一種常見的解決方案是在客戶端使用Flash或Java,因爲它們可以訪問客戶端的實際文件系統。然後,Flash/Java可以將該文件分解成小塊,並一次發送一個並在服務器端重新組裝。這有多個好處。首先,您可以恢復中斷下載。其次,您不必擔心任何腳本超時。第三,它繞過了PHP,Apache,Web服務或其他來源可能發揮的任何可能的文件系統限制。

+0

史蒂文,現在我能夠上傳100MB文件,通過添加.htaccess文件在我的網站文件夾就像下面這樣:作者RewriteEngine敘述的RewriteCond %{SERVER_PORT} 80 的RewriteCond%{REQUEST_URI} myuploadfolder 重寫規則^(。*)$ http://www.mywebsite.com/index.html [R,L] php_value max_input_time 0 我認爲你的建議可以幫助我上傳大約1GB的文件,但是當我嘗試在這個.htaccess文件中添加LimitRequestBody時,我得到內部服務器錯誤500,所以你能告訴我我應該在哪裏改變和如何爲LimitRequestBody .. – Sanniv 2010-10-03 11:09:50

+0

http://httpd.apache.org/docs/current/mod/core.html#limitrequestbody請確保您以字節「LimitRequestBody 1073741824」指定,並確保您的Web服務器允許此命令。一些網絡服務器有外部檢查,以確保太多的數據不會在單個請求中發送。這可以節省帶寬並最終爲他們節省資金。如果允許,您應該可以將它放在.htaccess文件的最後。我建議將它放在與上傳腳本相同的文件夾中,以防止在您的webroot上發生DoS攻擊。 – stevendesu 2010-10-03 15:32:14

1

檢查你的網絡服務器也允許這麼大的上傳。在Apache上,設置爲LimitRequestBody。這個限制早在PHP進入圖片之前就已經被應用了,並且不能在PHP中被修改/覆蓋。