作者 主題: 請問 PHP 怎麼傳超過 1GB 的檔案?(有爬文修改過php.ini)  (閱讀 23625 次)

0 會員 與 1 訪客 正在閱讀本文。

id4fox

  • 憂鬱的高中生
  • ***
  • 文章數: 103
  • 40 oz 挑戰成功!
    • 檢視個人資料
我利用 input type=file , 要post檔案給ftp作上傳
嘗試過 1GB 都可以, 但試了 4GB 的就失敗, 按Submit都沒反應
請問是不是我哪裡設定錯了?
Server version: Apache/2.2.10 (Unix)

我有做以下設定:
[ /etc/httpd/conf/httpd.conf ]加入:
<Files *.php>
       SetOutputFilter PHP
       SetInputFilter PHP
       LimitRequestBody 5242880000000000
</Files>

[ /etc/httpd/conf.d/php.conf ]加入:
<Files *.php>
       SetOutputFilter PHP
       SetInputFilter PHP
       LimitRequestBody 5242880000000000
</Files>

[ /etc/php.ini ]
memory_limit = 125M;
post_max_size = 10G
upload_max_filesize = 10G


fillano

  • 鑽研的研究生
  • *****
  • 文章數: 526
    • 檢視個人資料
你的硬體有多少記憶體?這樣夠用嗎???
Sapere aude! Habe Mut, dich deines eigenen Verstandes zu bedienen! ist also der Wahlspruch der Aufklärung.

id4fox

  • 憂鬱的高中生
  • ***
  • 文章數: 103
  • 40 oz 挑戰成功!
    • 檢視個人資料
你的硬體有多少記憶體?這樣夠用嗎???
記憶體有 2G 應該不成問題

Yamaka

  • 俺是博士!
  • *****
  • 文章數: 4913
    • 檢視個人資料
    • http://www.ecmagic.com
我利用 input type=file , 要post檔案給ftp作上傳
嘗試過 1GB 都可以, 但試了 4GB 的就失敗, 按Submit都沒反應
請問是不是我哪裡設定錯了?
Server version: Apache/2.2.10 (Unix)

『按Submit都沒反應』 那應該是瀏覽器端的問題吧?
還是說, 瀏覽器端有在上傳, 主機端沒反應?

fillano

  • 鑽研的研究生
  • *****
  • 文章數: 526
    • 檢視個人資料
你的swap有多少?上傳檔案格式應該是binary吧?(我想應該是,不然overhead太高)

log有看到什麼嗎?(httpd, php, messages等)
Sapere aude! Habe Mut, dich deines eigenen Verstandes zu bedienen! ist also der Wahlspruch der Aufklärung.

id4fox

  • 憂鬱的高中生
  • ***
  • 文章數: 103
  • 40 oz 挑戰成功!
    • 檢視個人資料
To yamaka:
『按Submit都沒反應』可能要更正一下,
按下Submit有很快的一閃即過(讀取條閃一下),
感覺就是POST動作被阻擋下來,沒辦法進下一頁面.

To fillano:
SwapTotal:     3899384 kB
SwapFree:      3899336 kB
我是打算上傳一個DVD映像檔
log我看他的修改日期都沒變, 應該沒有記錄(路徑: /var/log/httpd/ )
« 上次編輯: 2009-10-27 14:30 由 id4fox »

kenduest

  • 酷!學園 學長們
  • 俺是博士!
  • *****
  • 文章數: 3675
    • 檢視個人資料
    • http://kenduest.sayya.org

建議你先測一下 dd 建立一個 4GB 檔案,然後你的 apache 是否可以正確提供可以 download 回來這樣>
I am kenduest - 小州

my website: http://kenduest.sayya.org/

夜雲

  • 憂鬱的高中生
  • ***
  • 文章數: 108
    • 檢視個人資料
瀏覽器端的作業系統是 windows 系列的嗎~~~
基本上 windows os 會有單一 程序可配置記憶體的限制
以前有遇過~~~ 不知有沒有幫助~~~   ::)

id4fox

  • 憂鬱的高中生
  • ***
  • 文章數: 103
  • 40 oz 挑戰成功!
    • 檢視個人資料
建議你先測一下 dd 建立一個 4GB 檔案,然後你的 apache 是否可以正確提供可以 download 回來這樣>

不好意思, 不是很了解~
請問 "apache 是否可以正確提供可以 download 回來" 指的是??
我有用過直接 ftp 直接上傳4GB映像檔給伺服器, 是OK的

kenduest

  • 酷!學園 學長們
  • 俺是博士!
  • *****
  • 文章數: 3675
    • 檢視個人資料
    • http://kenduest.sayya.org

你的 apache 支援處理到 4GB 的檔案能力嗎?你可以建立 4GB 檔案後看看瀏覽器是否可以下載,若不行表示你的 apache 不支援大檔案,下載不行就更別說上傳了。
I am kenduest - 小州

my website: http://kenduest.sayya.org/

id4fox

  • 憂鬱的高中生
  • ***
  • 文章數: 103
  • 40 oz 挑戰成功!
    • 檢視個人資料
瀏覽器端的作業系統是 windows 系列的嗎~~~
基本上 windows os 會有單一 程序可配置記憶體的限制
以前有遇過~~~ 不知有沒有幫助~~~   ::)
恩. 我的Client端是 Windows XP, 用的是 Firefox, 也有試過 IE
Server 是 Linux Fedora 10
單一程序記憶體配置限制,
恩... 如果直接用 ftp 上傳是可以成功的, 那這種可能性可以排除嗎?
Thx

Yamaka

  • 俺是博士!
  • *****
  • 文章數: 4913
    • 檢視個人資料
    • http://www.ecmagic.com
『按Submit都沒反應』可能要更正一下,
按下Submit有很快的一閃即過(讀取條閃一下),
感覺就是POST動作被阻擋下來,沒辦法進下一頁面.

那也許是主機端收到上傳的header時判斷上傳資料量過大, 所以中止上傳動作了
如k老大說的, 測一下apache能否讓瀏覽器下載超過4G的檔案
或者乾脆就花點時間逐步增加上傳檔案的大小, 看看極限是多大

id4fox

  • 憂鬱的高中生
  • ***
  • 文章數: 103
  • 40 oz 挑戰成功!
    • 檢視個人資料
你的 apache 支援處理到 4GB 的檔案能力嗎?你可以建立 4GB 檔案後看看瀏覽器是否可以下載,若不行表示你的 apache 不支援大檔案,下載不行就更別說上傳了。
剛剛測試了一下下載, 4GB的檔案, 是沒問題的~

TyroneYeh

  • 俺是博士!
  • *****
  • 文章數: 2396
  • 性別: 男
    • 檢視個人資料
那要不要試試看 php call ftp 上傳的方式呢?
http://curl.haxx.se/libcurl/php/examples/ftpupload.html
--
TyroneYeh

id4fox

  • 憂鬱的高中生
  • ***
  • 文章數: 103
  • 40 oz 挑戰成功!
    • 檢視個人資料
那要不要試試看 php call ftp 上傳的方式呢?
http://curl.haxx.se/libcurl/php/examples/ftpupload.html
我沒有用過,所以先把網站上的範例複製來用用看 (p.s : 12行的${ftppasswd} 名子跟上面不合~ )
改設定
$localfile = "aaa.bmp";
$ftpserver = "192.168.1.XXX";
$ftppath   = "/upload_dir";
$ftpuser   = "USER";
$ftppass   = "123456";
結果是
Warning: fopen(aaa.bmp) [function.fopen]: failed to open stream: No such file or directory in /var/www/html/test.php on line 16
Warning: curl_setopt(): supplied argument is not a valid File-Handle resource in /var/www/html/test.php on line 21
Warning: filesize() [function.filesize]: stat failed for aaa.bmp in /var/www/html/test.php on line 25

失敗了~我是不是少作了什麼?
此外 $localfile 指定檔案 不需要指定路徑嗎?
如果要, 是不是有除了 input type=file 更好的傳遞路徑的方法呢?

micmic3

  • 俺是博士!
  • *****
  • 文章數: 1692
    • 檢視個人資料
那要不要試試看 php call ftp 上傳的方式呢?
http://curl.haxx.se/libcurl/php/examples/ftpupload.html
這應該不行 php 是在 server side 跑的
而現在是 client side 檔案丟不上 server sid

ricky

  • 實習板主
  • 鑽研的研究生
  • *****
  • 文章數: 669
    • 檢視個人資料
    • Ricky 碎碎唸
php本身無法處理超過2G以上的檔案。
除非你重新編譯php 並加上 -D_FILE_OFFSET_BITS=64 的參數
我的symfony作品:YOMOpets 寵物誌
有興趣可以一起來討論symfony喔
我的部落格:http://ricky.ez2.us/

id4fox

  • 憂鬱的高中生
  • ***
  • 文章數: 103
  • 40 oz 挑戰成功!
    • 檢視個人資料
回覆: 請問 PHP 怎麼傳超過 1GB 的&
« 回覆 #17 於: 2009-10-27 17:43 »
php本身無法處理超過2G以上的檔案。
除非你重新編譯php 並加上 -D_FILE_OFFSET_BITS=64 的參數
喔喔! 這樣就明瞭了
我來試著重編 php 吧
謝謝各位學長姐的指導!!!
« 上次編輯: 2009-10-27 17:57 由 id4fox »

TyroneYeh

  • 俺是博士!
  • *****
  • 文章數: 2396
  • 性別: 男
    • 檢視個人資料
那用上次 yamaka 先進用的 SWFUpload 呢?
--
TyroneYeh

kenduest

  • 酷!學園 學長們
  • 俺是博士!
  • *****
  • 文章數: 3675
    • 檢視個人資料
    • http://kenduest.sayya.org
php本身無法處理超過2G以上的檔案。
除非你重新編譯php 並加上 -D_FILE_OFFSET_BITS=64 的參數

不過這個要看 linux distro 是否編譯打包時候是否已經放入。

晚點來看一下 spec 檔案怎樣寫的。
I am kenduest - 小州

my website: http://kenduest.sayya.org/

id4fox

  • 憂鬱的高中生
  • ***
  • 文章數: 103
  • 40 oz 挑戰成功!
    • 檢視個人資料
回覆: 請問 PHP 怎麼傳超過 1GB 的&
« 回覆 #20 於: 2010-05-14 16:41 »
我編譯結果還是失敗的~
我的建立流程如下

0. 下載 apache 原始碼並解壓縮

1. 編寫編譯引用的shell參數$CFLAGS, export 是為了設定為全域
   export CFLAGS='-D_FILE_OFFSET_BITS=64 -D_LARGEFILE_SOURCE -D_LARGEFILE64_SOURCE'

2. 指定 ./configure 參數 --prefix 來指定安裝路徑, 指定 apxs2 (apache擴展工具)檔案路徑
   ./configure --prefix=/usr/local/apache_2 --enable-so --with-apxs2=/usr/local/apache_2/bin/apxs --enable-ftp

3. 編譯
   make

4. 安裝
   make install

在 ./configure 時有顯示   [checking whether to enable -D_LARGEFILE64_SOURCE... no]
而在編譯的時候很明顯的看到 gcc 有加入 -D_FILE_OFFSET_BITS=64 -D_LARGEFILE_SOURCE -D_LARGEFILE64_SOURCE
執行起來還是沒辦法讓我傳送 超過 2GB 的檔案.
不知道是不是我設定的方式錯誤, 還是哪裡忽略了?

請學長姊幫忙指點, 謝謝.

(慚愧, 隔了那麼久才又提出問題 當時編了一次, 失敗被判定為是 CPU 並非 64 bit的關係.
 直到最近有同事很好心的以 64 Bit CPU 編來試試看, 但是結果還是失敗的, 才又拿出這個問題.
 還是先謝謝各位學長姐指導.)
« 上次編輯: 2010-05-19 12:09 由 id4fox »

kenduest

  • 酷!學園 學長們
  • 俺是博士!
  • *****
  • 文章數: 3675
    • 檢視個人資料
    • http://kenduest.sayya.org

考古文章又被翻出來?

只是我想問,你的瀏覽器可以支援這樣大檔上傳嗎?

I am kenduest - 小州

my website: http://kenduest.sayya.org/

id4fox

  • 憂鬱的高中生
  • ***
  • 文章數: 103
  • 40 oz 挑戰成功!
    • 檢視個人資料
考古文章又被翻出來?

只是我想問,你的瀏覽器可以支援這樣大檔上傳嗎?
我是用 Firefox 3.5.9,
請問怎樣才能看出瀏覽器能不能支援大檔案呢?

(不好意思, 因為認為是這個主題的延伸所以就點回覆了
 是不是不妥阿? 我下次會注意的)

Yamaka

  • 俺是博士!
  • *****
  • 文章數: 4913
    • 檢視個人資料
    • http://www.ecmagic.com
看了一下前面的討論串
要上傳大檔案還是改用ftp比較保險吧
用http傳, 如果上傳完成99.99%斷線了
那會欲哭無淚吧, 用 ftp 致少還有續傳功能  :D

id4fox

  • 憂鬱的高中生
  • ***
  • 文章數: 103
  • 40 oz 挑戰成功!
    • 檢視個人資料
看了一下前面的討論串
要上傳大檔案還是改用ftp比較保險吧
用http傳, 如果上傳完成99.99%斷線了
那會欲哭無淚吧, 用 ftp 致少還有續傳功能  :D

因為我的目標是  "利用一個Web介面, 提供上傳檔案的服務"
所以可能就不能直接以外部ftp程式做上傳了~
目前是以 html 配合 php 的 ftp 操作函數 的做法
網路上好像有ftp續傳的寫法呢, 還沒驗證就是了.

id4fox

  • 憂鬱的高中生
  • ***
  • 文章數: 103
  • 40 oz 挑戰成功!
    • 檢視個人資料

考古文章又被翻出來?

只是我想問,你的瀏覽器可以支援這樣大檔上傳嗎?

我上 Firefox 的論壇問了一下 (感恩)
http://forum.moztw.org/viewtopic.php?f=2&t=30226&p=157604#p157604
Firefox 的確是有 2GB 的限制沒錯,
真的是要考量瀏覽器哩 謝謝點醒
我會試看看 patch 的

id4fox

  • 憂鬱的高中生
  • ***
  • 文章數: 103
  • 40 oz 挑戰成功!
    • 檢視個人資料
我測試了一些知名的瀏覽器 但是還是沒有突破 2GB
測試結果如下, 僅供大家參考:

環境 :
  • Server : Fedora 12 , Kernel  " 2.6.31.5-127.fc12.i686.PAE "
  • Client : Windows XP Professional , Ver 2002 , SP 3
  • Httpd  : 2.2.13

瀏覽器|版本|結果
Firefox|3.6.3|(沒安裝patch)上傳失敗. 沒有實體檔案生成. 瀏覽器頁面沒有任何切換.
Chrome|4.1.249.1064|4 GB 的檔案最後只傳了 2 GB 瀏覽器正常切換頁面
IE|7.0.5730.13|上傳失敗. 沒有實體檔案生成. 瀏覽器顯示 "Internet Explorer 無法顯示網頁"
Opera|10.53|4 GB 的檔案最後只傳了 2 GB 瀏覽器正常切換頁面
Safari|4.0.5(531.22.7)|上傳失敗, 沒有任何實體檔案建立 瀏覽器顯示 "Internal Server Error"

hikohan

  • 俺是博士!
  • *****
  • 文章數: 1288
    • 檢視個人資料
很久以前用過的工具,測試1G多是ok

http://www.ftls.org/en/examples/cgi/

eUpload (cgi / perl)

要超過4G,應該是要一些特殊手段,例如extension還是3rd tools根據指令背後傳。
(該不會是要user傳藍光影像吧?)
lifeIsFunWithPHP.

id4fox

  • 憂鬱的高中生
  • ***
  • 文章數: 103
  • 40 oz 挑戰成功!
    • 檢視個人資料
回覆: 請問 PHP 怎麼傳超過 1GB 的&
« 回覆 #28 於: 2010-05-19 15:14 »
很久以前用過的工具,測試1G多是ok

http://www.ftls.org/en/examples/cgi/

eUpload (cgi / perl)

要超過4G,應該是要一些特殊手段,例如extension還是3rd tools根據指令背後傳。
(該不會是要user傳藍光影像吧?)
:o 第一次!!! 我用 Web 上傳成功了 4 GB 的檔案
我用的是 Chrome,
除了 README 所教的安裝方式外, 還要記得調整 httpd.conf 的 Timeout 時間
否則再傳送大檔案時, 會出現 "Gateway Timeout Error 504"
謝謝 hikohan 提供的方法!!! 有了一個確定可行的對照組 就再也不用東猜西猜的拉!!!
感恩

補充 :
瀏覽器|版本|結果
Firefox|3.6.3|(沒安裝patch)上傳失敗. 沒有實體檔案生成. 瀏覽器頁面沒有任何切換.
Chrome|4.1.249.1064|傳檔成功
IE|7.0.5730.13|上傳失敗. 沒有實體檔案生成. 瀏覽器顯示 "Internet Explorer 無法顯示網頁"
Opera|10.53|傳檔成功
Safari|4.0.5(531.22.7)|傳檔成功
« 上次編輯: 2010-05-19 17:10 由 id4fox »

see7di

  • 懷疑的國中生
  • **
  • 文章數: 51
  • 性別: 男
    • 檢視個人資料
    • http://7di.net
調整一下timeout的時間,受限于網速如果timeout時間不夠往往執行樂意部分就會超時