蝸牛の歩み

蝸牛の如く,ゆっくりでも着実に前へ・・・

phpでファイルアップロードの進捗状況を表示する

動画のような大きなファイルをサーバーにアップロードするとき、通常はアップロード(とそれに続く変換など)が終わらないとページ遷移しない。かなり長い時間待たされるので、ユーザーは不安になる。そこで、はてなフォトライフのようにアップロードの進捗状況がプログレスバーで表示され、変換作業中は「コンバーティング」などと裏で行われている作業が表示されれば、正常に作業が進んでいることがわかり、また残り時間も推測できるので不安も解消されると思われる。

アップロードの進捗が見れるphpファイルアップローダー:phpspot開発日誌経由でMega Upload Progress Barを試してみることにした。


"25% of 5 users recommend this project"に不安を覚えつつもmegaupload-1.45.tar.gzをダウンロード、解凍。"DOWNLOAD NOW"ボタンではなく、右の"View all files"から"megaupload"を選ぶ。READMEによると1.35がSTABLEなバージョンとのことなので、そちらの方がいいかもしれないが、1.45もリリースされてから時間が経っているので安定していることを期待。
INSTALLというファイルに従って、インストールを行う。(以下はあくまでMacOSXServerでの一例)

  1. phpディレクトリのファイルを、~/Sites/にコピー。
  2. cgi-binディレクトリのファイル(header.cgi progress.cgi upload.cgi)を、/Library/WebServer/CGI-Executables/にコピー。
  3. header.cgiを適宜編集。各cgiファイルの1行目のperlのパスを編集。
  4. (INSTALLにはupload.htmlと書いてあるが)upload.phpにブラウザでアクセスして、テスト。
  5. どうもphpファイルを DocumentRoot に置いてないためにエラーになるようだ……。pgbar.phpを編集し、"/php/sponser.php"を"sponser.php"に変更(いや、まあsponser.phpは表示されなくても全然構わないんだけど)。

これでアップロードできるようになった。「Send」ボタンを押すと、別ウィンドウがポップアップし、上側のフレームに進捗状況がプログレスバーとテキストで表示される。

ただ、やたらと遅い。プログレスバーが表示されず"File Upload in progress"とだけ表示された状態が、50秒くらいも続き、不安になる。プログレスバーが表示されてもアップロードは遅々として進まず、だいたい80Kbpsと表示される。約3.5MBのファイルをアップロードするのに6分かかった。

ADSL回線なのでアップロードが遅いのは仕方ないのかと思ったが、試しにWinSCPでアップすると64KB/secで、1分程度で完了した。一見すると同じくらいの速度に見えるが、前者はbit/s、後者はByte/sなので約8分の1の遅さ。この遅さを解消しない限り、使う気になれない。一体何が原因なのだろう?

pgbar.phpを読むと、progress.cgiの代わりにprogress.phpを使用することもできるようだ。そこで、contribディレクトリのprogress.phpを、~/Sites/にコピー。pgbar.phpの "progress.php?〜"の部分をコメントじゃなくして、"$link = "/cgi-bin/progress.cgi?〜"をコメントアウト。しかし、進捗状況が表示されなかった。こちらも原因不明。