質問
PHPでプログレスバーを表示する方法はありますか? phpスクリプトが何をしているかをユーザーに知らせるのが好きです。
これは私のウェブサイトの結果例です http:// www.bestsellprice.com/search.php?itemnum=0&keyword=harry+potter+book
「読み込み中...」というテキストを含む静的な読み込み画像があります。ページが完全に読み込まれたら、読み込みdivを非表示にします。私のPHPスクリプトはamazon api、ebay api、screenに出て、他のいくつかのサイトをスクレイピングし、静的ローディングdivの代わりに次のようにそのローディングdivを更新したい
amazon.comの読み込み
// progress amazon、divの読み込みが完了したら
ebay.comの読み込み
などなど。
これは可能ですか?もしそうなら、最善のアプローチは何ですか?助けてくれてありがとう!
解決
AJAXを使用して、PHPが現在何をしているのかを確認し、完了したタスクまたは未完了のタスクを定義するキューシステムを用意します。これは非常に基本的な例です:
タスクが開始されたら、次の変数を設定します:
AJAXを使用して、PHPが現在何をしているのかを確認し、完了したタスクまたは未完了のタスクを定義するキューシステムを用意します。これは非常に基本的な例です:
タスクが開始されたら、次の変数を設定します:
<*>
PHPがeBayをロードすると、isEbayLoadedがtrueに設定され、AJAXはPHPにebayがまだロードされているかどうかを確認し、次にAmazon、そして必要なものをすべて要求できます。 PHPがしなければならないことは、これらの変数がtrueに設定されているかどうかを確認することだけです。これは、タスクが完了したことを意味します。
SESSION['isEbayLoaded'] = false;
AJAXを使用して、PHPが現在何をしているのかを確認し、完了したタスクまたは未完了のタスクを定義するキューシステムを用意します。これは非常に基本的な例です:
タスクが開始されたら、次の変数を設定します:
<*>
PHPがeBayをロードすると、isEbayLoadedがtrueに設定され、AJAXはPHPにebayがまだロードされているかどうかを確認し、次にAmazon、そして必要なものをすべて要求できます。 PHPがしなければならないことは、これらの変数がtrueに設定されているかどうかを確認することだけです。これは、タスクが完了したことを意味します。
SESSION['isAmazonLoaded'] = false;
PHPがeBayをロードすると、isEbayLoadedがtrueに設定され、AJAXはPHPにebayがまだロードされているかどうかを確認し、次にAmazon、そして必要なものをすべて要求できます。 PHPがしなければならないことは、これらの変数がtrueに設定されているかどうかを確認することだけです。これは、タスクが完了したことを意味します。
他のヒント
私はこれを本当に簡単な解決策で達成しました:
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(一意のIDを使用)、および前のdivのスタイルを「表示:なし」に設定するスタイル。
もちろん、一部のブラウザでは、レンダリングの前に少なくとも1024バイト(4k程度)が必要です。
最良のアプローチは、javascriptにサーバーへのajax呼び出しを行わせて、それがどこにあるかを調べることです。そうすれば、ユーザーにフィードバックを提供できます。
アップロードの進行状況バーから始めて、アプリケーションの進行状況を表示し続けることができます。
各サイトに対してリクエストを作成し、そのページからの出力(XML、JSONなど)を使用して、他のページに何が起こっているかを知らせます。
たとえば... psuedoコード:
- サイトの収集
- ajaxページをロードするforループ
- ajaxページは、各リクエストにステータスメッセージを返します。 -&quot; Amazonを読み込んでいます...&quot;
それだけです!