作者 主題: [問題]關於php上傳檔案~  (閱讀 15583 次)

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

ozakipw

  • 憂鬱的高中生
  • ***
  • 文章數: 190
    • 檢視個人資料
[問題]關於php上傳檔案~
« 於: 2004-08-25 17:01 »
利用php寫好上傳程式,但當上傳檔案太大時
如何在程式中加入一個進度列以提醒使用者
img]http://61.222.212.236/~test1/sing.jpg[/img]

螢火飛

  • 酷!學園 學長們
  • 活潑的大學生
  • ***
  • 文章數: 400
    • 檢視個人資料
    • http://firefly.idv.tw
[問題]關於php上傳檔案~
« 回覆 #1 於: 2004-08-26 00:17 »
No way!

ozakipw

  • 憂鬱的高中生
  • ***
  • 文章數: 190
    • 檢視個人資料
[問題]關於php上傳檔案~
« 回覆 #2 於: 2004-08-26 01:18 »
像 Perl 一樣,可以使用像下方的指令一點一點讀取進來!

read(STDIN,$LINE,4096);

那請問php有辦法內砍一段perl?
img]http://61.222.212.236/~test1/sing.jpg[/img]

螢火飛

  • 酷!學園 學長們
  • 活潑的大學生
  • ***
  • 文章數: 400
    • 檢視個人資料
    • http://firefly.idv.tw
[問題]關於php上傳檔案~
« 回覆 #3 於: 2004-08-26 09:31 »
還是老話:
No Way!
即使用 php 的 fopen()、fsockopen()也不能夠。

我告訴你為什麼?見下圖:

Client ─> Http Server ─> CGI(Perl/C/PHP...)

Client 傳送任何資料,都會被 Http Server 先處理,最後才給 CGI,
所以,傳送的檔案會等到 Http Server 完全接收完畢,才會丟給 PHP 處理。

CGI 程式不可能搶在 Http Server 前面(或同時)。

ozakipw

  • 憂鬱的高中生
  • ***
  • 文章數: 190
    • 檢視個人資料
[問題]關於php上傳檔案~
« 回覆 #4 於: 2004-08-26 11:41 »
引述: "螢火飛"
還是老話:
No Way!
即使用 php 的 fopen()、fsockopen()也不能夠。

我告訴你為什麼?見下圖:

Client ─> Http Server ─> CGI(Perl/C/PHP...)

Client 傳送任何資料,都會被 Http Server 先處理,最後才給 CGI,
所以,傳送的檔案會等到 Http Server 完全接收完畢,才會丟給 PHP 處理。

CGI 程式不可能搶在 Http Server 前面(或同時)。


現在在辦公室~~~晚點回家給學長看一郭cgi寫的~~~
可以表示上傳進度!
另外asp也可以~~代表網頁http://www.dcview.com.tw
他上傳時也有進度表...嗚嗚嗚~~不知如何做...
還是那是假象??
img]http://61.222.212.236/~test1/sing.jpg[/img]

螢火飛

  • 酷!學園 學長們
  • 活潑的大學生
  • ***
  • 文章數: 400
    • 檢視個人資料
    • http://firefly.idv.tw
[問題]關於php上傳檔案~
« 回覆 #5 於: 2004-08-26 12:11 »
引述: "ozakipw"
引述: "螢火飛"
還是老話:
No Way!
即使用 php 的 fopen()、fsockopen()也不能夠。

我告訴你為什麼?見下圖:

Client ─> Http Server ─> CGI(Perl/C/PHP...)

Client 傳送任何資料,都會被 Http Server 先處理,最後才給 CGI,
所以,傳送的檔案會等到 Http Server 完全接收完畢,才會丟給 PHP 處理。

CGI 程式不可能搶在 Http Server 前面(或同時)。


現在在辦公室~~~晚點回家給學長看一郭cgi寫的~~~
可以表示上傳進度!
另外asp也可以~~代表網頁http://www.dcview.com.tw
他上傳時也有進度表...嗚嗚嗚~~不知如何做...
還是那是假象??


如果是在 Server run,肯定是假的 !
真可以的話,各大免費網頁 ISP 業者早做了。

梁楓

  • 俺是博士!
  • *****
  • 文章數: 6220
    • 檢視個人資料
[問題]關於php上傳檔案~
« 回覆 #6 於: 2004-08-29 21:07 »
較常的做法
實際上是用二個網頁
一個網頁進行上傳
另一個網頁做動畫

二個合起來,就像是有上傳動作的動劃了

joeyhsy

  • 活潑的大學生
  • ***
  • 文章數: 290
    • 檢視個人資料
[問題]關於php上傳檔案~
« 回覆 #7 於: 2004-12-17 19:50 »
梁楓學長您好, 我在一家網站上傳檔案時, 頡取了以下畫面, 它可以顯示進度,
還包括檔案大小等, 數字一直在流動, 不過是asp, 在php真的不可行嗎 ?? 謝謝 !!


梁楓

  • 俺是博士!
  • *****
  • 文章數: 6220
    • 檢視個人資料
[問題]關於php上傳檔案~
« 回覆 #8 於: 2004-12-19 21:51 »
這個通常是另外用一個小程式下載後嵌入你的瀏覽器
真正的程式是在你的client,而不是在server端控制的

joeyhsy

  • 活潑的大學生
  • ***
  • 文章數: 290
    • 檢視個人資料
[問題]關於php上傳檔案~
« 回覆 #9 於: 2004-12-20 11:13 »
引述: "梁楓"
這個通常是另外用一個小程式下載後嵌入你的瀏覽器
真正的程式是在你的client,而不是在server端控制的

謝謝梁楓學長的回覆, 經過了google大師的指導, 小弟已經完成了這個課題...

php, asp, cgi...等後台程式就像學長們說的, 無法搶先在web-server之前得知
post資料, 唯有自己寫一個web-server(只要寫post部份), 才能解決"純"php
達成的目的, 參考了網站上許多前輩的說法, 發現要寫一個php-base的
web-server不是小弟能力所及, 而且還要加裝socket函式庫,
但真的有人實作出來了, 厲害...

http://timteam.org/?TIM=FORUM&FORUM=1&ShowDocument=12142

退而求其次, 另外一種方法就是搭配perl來作, 偷懶的我找到了這個

http://www.raditha.com/php/upload.php

它的source-code還看得懂, 不過作者有作"上傳速率限制", 我修改了一些東西,
並將之中文化後, 覺得效果不錯, 等有空再來研究web-server的實作方法囉... :wink:

Jihad

  • 懷疑的國中生
  • **
  • 文章數: 32
    • 檢視個人資料
[問題]關於php上傳檔案~
« 回覆 #10 於: 2004-12-20 17:42 »
如果採用Flash+PHP架構的話,是不是也可以作出類似的效果呢?!!

梁楓

  • 俺是博士!
  • *****
  • 文章數: 6220
    • 檢視個人資料
[問題]關於php上傳檔案~
« 回覆 #11 於: 2004-12-20 17:44 »
類似有可能
但是要知道目前實際進度則有困難

joeyhsy

  • 活潑的大學生
  • ***
  • 文章數: 290
    • 檢視個人資料
[問題]關於php上傳檔案~
« 回覆 #12 於: 2004-12-20 18:53 »
引述: "梁楓"
但是要知道目前實際進度則有困難

學弟研究了Megauploda的做法,搭配perl可以取得總封包的大小,再偵測目前已讀取的封包大小,
加以計算後就可以算出目前的進度了,如果想再搭配flash,我想應該把這些
變數再丟給flash就可以了,但沒有實作過,因為進度表顯示是用fresh的方式,感覺效能會降低...(純推論!)

梁楓

  • 俺是博士!
  • *****
  • 文章數: 6220
    • 檢視個人資料
[問題]關於php上傳檔案~
« 回覆 #13 於: 2004-12-20 19:01 »
如果你能配合server的“流量”那就有可能
不過那要搭配的東西太多了,不是單純PHP跟網頁能做的到了吧?

joeyhsy

  • 活潑的大學生
  • ***
  • 文章數: 290
    • 檢視個人資料
[問題]關於php上傳檔案~
« 回覆 #14 於: 2004-12-20 20:11 »
引述: "梁楓"
如果你能配合server的“流量”那就有可能
不過那要搭配的東西太多了,不是單純PHP跟網頁能做的到了吧?

 學弟原本的觀念也是這樣,如果單純用php, "幾乎"不可能,可是看到實例後,
不得不相信還是可以達成的,不知道學長是否有看過上面的連結,裡面有精彩
的討論,而且不只一個人做出來了...

梁楓

  • 俺是博士!
  • *****
  • 文章數: 6220
    • 檢視個人資料
[問題]關於php上傳檔案~
« 回覆 #15 於: 2004-12-20 20:26 »
代碼: [選擇]

$link = "/cgi-bin/progress.cgi?iTotal=".$iTotal."&iRead=".$iRead."&iStatus=".$iStatus."&sessionid=".$sessionId."&dtnow
=".$dtnow."&dtstart=".$dtstart;


知道奧密了嗎?

joeyhsy

  • 活潑的大學生
  • ***
  • 文章數: 290
    • 檢視個人資料
[問題]關於php上傳檔案~
« 回覆 #16 於: 2004-12-20 21:28 »
引述: "梁楓"
代碼: [選擇]

$link = "/cgi-bin/progress.cgi?iTotal=".$iTotal."&iRead=".$iRead."&iStatus=".$iStatus."&sessionid=".$sessionId."&dtnow
=".$dtnow."&dtstart=".$dtstart;


知道奧密了嗎?

梁楓學長, 謝謝您的標注, 我想您誤會學弟的意思了, 這是搭配perl(cgi)的方法,
學弟已經瞭解, 學弟不解的是"純php"的方法, 請參考以下連結...

討論

實作

其中batman和大頭目前輩都有完成實例, 並不須透過perl來幫忙...

梁楓

  • 俺是博士!
  • *****
  • 文章數: 6220
    • 檢視個人資料
[問題]關於php上傳檔案~
« 回覆 #17 於: 2004-12-20 21:42 »
試試“關閉JavaScripts”

整串跟我們之前討論的一樣沒有衝突

只要你能從Client動手腳or 從Server端動手腳
要想達到這個目地就有可能,但是如果不行呢?

CGI跟嵌入HTML之間的差異為何?

所以單純以“php來了解檔案上傳的狀態”
我還是持相同的意件“不可行”

ps: 我不愛用JavaScirpts,原因是主觀認為降低可攜性及安全性。

twu2

  • 管理員
  • 俺是博士!
  • *****
  • 文章數: 5411
  • 性別: 男
    • 檢視個人資料
    • http://blog.teatime.com.tw/1
[問題]關於php上傳檔案~
« 回覆 #18 於: 2004-12-20 21:49 »
如果 perl cgi 可以做, 那用 php cgi mode 來執行呢?
這樣子算不算純 php 的方式呢?

我不覺得你前面說的那個 php 實作方式是對的, 限制太多了. 那麼.... 要不要乾脆整個 httpd 都用 php 來做就可以了? 那時, 你要怎麼處理都可以. (網路找找, 我記得有簡單的 php httpd 可以使用)

joeyhsy

  • 活潑的大學生
  • ***
  • 文章數: 290
    • 檢視個人資料
[問題]關於php上傳檔案~
« 回覆 #19 於: 2004-12-20 22:26 »
很抱歉 !! 我可能誤解學長的意思了, 或許是我自己還沒實作出來(php-base),
所以許多問題還不能很確切下定論,  但學弟著墨的地方是php到底能作到這樣嗎?
也就是自已接收封包, 雖然大頭目前輩借用了javascripts和flash, 但我想主角還是在php
身上, 不像perl的例子, 是php去接收perl傳來的數據,....
如果我能寫出php-base的web-server, 許多重要的數據就不必等httpd給了,
或許有人會問, 這麼麻煩幹嘛 ?!
就像這個題目的發起人用意是相同的, 當使用者不是位programmer時,
一個過大的檔案或許會讓他以為沒在動作, 甚至以為掛點了, 只為了這樣一個
小小方便的直覺, 我感覺一切都值得了...

謝謝梁學長的指教, 若學弟也實作出php-server時, 再來跟您報告 :lol:

梁楓

  • 俺是博士!
  • *****
  • 文章數: 6220
    • 檢視個人資料
[問題]關於php上傳檔案~
« 回覆 #20 於: 2004-12-20 22:40 »
我從頭至尾沒從沒有說要做一個 PHP-server出來

請注意我從頭至尾的重點

PHP以apache mod 的方式使用的情況下
在什麼狀況才會把網頁顯示出來?

為什麼 cgi可以? 為什麼用apache mod 就不行?
難道perl cgi可以,php cgi就不行?

這才是我思考的方向

joeyhsy

  • 活潑的大學生
  • ***
  • 文章數: 290
    • 檢視個人資料
[問題]關於php上傳檔案~
« 回覆 #21 於: 2004-12-20 22:45 »
引述: "梁楓"
我從頭至尾沒從沒有說要做一個 PHP-server出來

為什麼 cgi可以? 為什麼用apache mod 就不行?
難道perl cgi可以,php cgi就不行?

這才是我思考的方向

學弟瞭解了, 是我的觀念錯誤了...
兩位學長提供了重要的觀念, 我剛剛找到了php-httpd程式, 我會朝這個方向
再研究, 謝謝你們喔 :)

twu2

  • 管理員
  • 俺是博士!
  • *****
  • 文章數: 5411
  • 性別: 男
    • 檢視個人資料
    • http://blog.teatime.com.tw/1
[問題]關於php上傳檔案~
« 回覆 #22 於: 2004-12-21 08:45 »
php-httpd 不是重點吧.
你為了一個小功能要放棄 apache 本身就有的功能, 然後全部重做?

你說的理由和你一直想找這個問題的解答似乎不太一致.
如果只是為了讓使用者可以知道還在傳輸, 上面提過很多種方式可以處理, 有何必要執意要純 php 的解決方案? 只要做的到該要求, 是不是 php 做出來的, 使用者會知道嗎? 會覺得有差別嗎?

joeyhsy

  • 活潑的大學生
  • ***
  • 文章數: 290
    • 檢視個人資料
[問題]關於php上傳檔案~
« 回覆 #23 於: 2004-12-21 11:29 »
引述: "twu2"
php-httpd 不是重點吧.
你為了一個小功能要放棄 apache 本身就有的功能, 然後全部重做?

你說的理由和你一直想找這個問題的解答似乎不太一致.
如果只是為了讓使用者可以知道還在傳輸, 上面提過很多種方式可以處理, 有何必要執意要純 php 的解決方案? 只要做的到該要求, 是不是 php 做出來的, 使用者會知道嗎? 會覺得有差別嗎?

學長您好,我先前已經成功使用搭配perl的方式,當然不是執意於純php的方式,只是想另外瞭解使用php-httpd的方式,比較兩種方式的優劣,至於全部重做倒沒有,目前也沒這個能力,因為要計算封包,只需寫httpd的post-request就夠了,我看了一晚php-httpd的程式,已經稍有一點概念...謝謝學長的指教,等有了進度再跟各位報告 :lol:

acosy

  • 可愛的小學生
  • *
  • 文章數: 2
    • 檢視個人資料
[問題]關於php上傳檔案~
« 回覆 #24 於: 2004-12-29 12:35 »
嗯嗯,我是再想有沒有辦法讓 flash 跟 ftp 結合,

     一般的ftp軟體或windows內建的ie 都可以顯示上傳的進度,

     當然在後台程式(php..asp..) 都是 no way的情況下,

     不知該如何製作.