質問

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;

それだけです!

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top