2012-03-02 7 views
5

こんにちは、画像ダウンロードを扱うPHPスクリプトを備えたサーバー。すべてのイメージのダウンロードが完了したら、イメージを圧縮してから、ユーザーがダウンロードすることができます。モニター別のサーバー上でのジップの進行状況

ユーザーは、このプロセスを開始するには、この他のサーバに伝えるために私のウェブサイトを告げるWebページ上のボタンをクリックし、このプロセスを要求します。これは、リクエストを処理するWebサーバーがファイルのダウンロード/圧縮を処理しないため、タイムアウトしないためです。

私はビュンが完了したときにユーザーに通知するために、ユーザーのWebページ上でビュンの進捗状況を伝えることができるか不思議でしたか?

答えて

2

私は、「作成するzipファイル」としてではなく、別の拡張子を持つ同じ名前のキューファイルになるだろう。ダウンロードファイルを作成し、サーバー上

は、スクリプトは拡張子と同じ名前を持つ別のファイルが、ステータスコードを作成してみましょう。 (例:それは準備ができているの進行状況と123456789.DONに意味123456789.PRO)今 .DONをスタートファイルを作成する前に、.PROをこのファイル名を更新することができますzipファイルを作成し、終了スクリプトが)

あなたのウェブサーバー上で、ファイルが存在するかどうかを確認するPHPスクリプトを読み込むajax呼び出しを行います。

がファイルではありません。プロセスは .PROファイルを起動していない存在:PROCESSING .DONファイルが存在する:AJAX呼び出しは、あなたとどのくらいのサーバ負荷あなたまで、数秒ごとにチェックすることができ、ダウンロードリンク

を作成します。欲しいです。

0

クライアントからのajax経由でポーリングを設定して、x秒ごとに進捗状況をリクエストできます。あなたは、出力を/ tmp /ファイルへの進行をすることができますビュンPHPスクリプトで

、応答PHPスクリプトで

zip -v filename.zip file1 file2 file3 > /tmp/tmpid.txt 

のように、あなたがtmpの出力ファイルを読むことができる(例えば/tmp/zip_af45d26746a4e5bf01.txt )、進行状況を計算してブラウザに戻ります。

+0

zip -v in php? このロジックを使用すると、すべてのファイルの圧縮が完了したカウンタがforループに追加され、現在の項目と合計項目の比率がファイルに出力されます。 これで、割合の差が返され、それに応じてバーが更新されるというリクエストをサーバーに送信できますか? – mirugai

0

execを介したzipファイル()のステータスのポーリングとの考え方は、私にとって大きなジップファイルを作成するプロジェクトのために完璧でした。

exec("zip -qdgds 10m output.zip file1.php file2.php > log_dot.txt"); 

、今別のAJAXのスクリプトをポーリングし、(ファイルサイズ全体のファイルとドッ​​ト* 10メガバイトごと)zip-の作成の実際のプロセスを計算します。

は、私のような文はジップスクリプトで使用しましたファイル。

多分マニュアルヘルプ他の人zip-maual

関連する問題