2

PHPでプログレスバーを表示する方法はありますか?phpスクリプトが何をしているのかをユーザーに知らせたいと思います。

これが私のウェブサイトhttp://www.bestsellprice.com/search.php?itemnum=0&keyword=harry+potter+bookからの結果の例です

「読み込み中...」というテキストを含む静的読み込み画像があります。ページが完全に読み込まれると、読み込み中のdivを非表示にします。私のphpスクリプトはamazonapi、ebay apiに送信され、screenは他のいくつかのサイトをスクレイプします。静的なloading divの代わりに、そのloadingdivを次のように更新したいと思います。

amazon.comを読み込んでいます

//アマゾンを進行し、更新の読み込みが終了するとdivをロードします

ebay.comを読み込んでいます

などなど。

これは可能ですか?もしそうなら、最善のアプローチは何ですか?助けてくれてありがとう!

4

4 に答える 4

3

AJAX を使用して、PHP が現在何をしているのかを確認し、完了したタスクと完了していないタスクを定義するキュー システムを用意します。非常に基本的な例を次に示します。

タスクが開始されたら、次の変数を設定します。

$_SESSION['isEbayLoaded'] = false;
$_SESSION['isAmazonLoaded'] = false;

PHP が eBay をロードすると、isEbayLoaded が true に設定され、AJAX は単純に PHP に ebay がまだロードされているかどうかを尋ね、次に amazon、そして必要なものを尋ねます。PHP がしなければならないことは、これらの変数が true に設定されているかどうかを確認することだけです。これは、タスクが完了したことを意味します。

于 2009-10-22T00:23:01.493 に答える
1

私はこれを以前に非常に簡単な解決策で達成しました:

ob_flush();

必要なのは、適切なクラス名を持つ単一の div を作成することだけでした:

<div class="loading">
    Loading...
</div>

次に、私のPHPは基本的に次のとおりです。

foreach ($sites as $site) {
   printAndFlush(<<<CSS
     <style>
       div.loading {
         background: url($site.png) no-repeat right center;
       }
     </style>
CSS;

   scrapeSite($site);
}

これは、背景スタイルを使用して、スクレイピングするサイトを示します。

マークアップを使用する必要がある場合は、前の div のスタイルを「display: none」に設定するスタイルとともに、毎回新しい「Loading」div を (一意の ID と共に) 単純に印刷できます。

もちろん、一部のブラウザでは、何かをレンダリングする前に少なくとも 1024 バイト (4k 程度!) が必要であることを覚えておいてください。

于 2009-10-22T04:11:32.713 に答える
0

各サイトにリクエストを送信し、そのページからの出力 (XML、JSON など) を使用して、他のページに何が起こっているかを知らせます。

たとえば...疑似コード:

  • サイトを集める
  • ajax ページをロードする for ループ
  • ajax ページは、「Amazon を読み込んでいます....」などのステータス メッセージを含む各リクエストを返します。

それでおしまい!

于 2009-10-22T18:54:54.680 に答える
0

最善の方法は、JavaScript にサーバーへの ajax 呼び出しを行わせ、その場所を見つけて、ユーザーにフィードバックを提供できるようにすることです。

アップロードの進行状況バーを表示することから始めて、アプリケーションの進行状況を表示し続けることができます。

于 2009-10-22T00:16:41.053 に答える