2011-10-30 13 views
0

値を配列に設定する関数を呼び出すforeachループがあります。完了までに何時間かかるかによっては完了まで数時間かかることがあります。foreachループ内で関数を実行しているときのプログレスバー

私が望むのは、進行状況バーまたは少なくとも1/1000の完了したタイプの進捗インジケータです。

これは可能ですか?どうすれば私のコードにこれを実装できますか?それが関数かforeachループにあるでしょうか?調べて、forと$ i ++を使っていくつかの例を見つけましたが、私はすでにforeachループを使用しているので、実際に実装する方法はわかりません。

ありがとうございました。

function scrape_amazon($links) { 
//my code runs here to set all values in $ret array. 
} 


foreach($links as $link) { 
$ret = scrape_amazon($link); 
} 
+0

PHPでもこれを行うことはできません。あなたはAjaxとJavaScriptが必要で、おそらく完全なリストラが必要です。あなたが醜い連続的なフラッシュをしたい場合を除き、それは間違いなく進捗バーではありません。 – Ryan

+0

1ワード:Ajax。 – Cyclone

+0

ありがとうございます。私はajaxプログレスバーを調べ、私が何を学ぶことができるかを見ていきます。うまくいけば、私は何かを再構成する必要はありません... – Reg

答えて

0

PHPはおそらく本当にこのタスクのための適切なツールではありません、しかし、何を行う可能性はある:

  • 起動ファイルへの遅いバックグラウンド・プロセスとしてコード、および出力の進行状況。 cronを経由

    • 打ち上げ:
    • は、その進捗情報用のファイルをポーリング

    を含め、いくつかの方法で行うことができるバックグラウンド・プロセスを起動する(ページの更新やAJAXのいずれかによって)PHPスクリプトを持っていますいくつか読みやすいエリアにスプールの新規雇用のための60秒ごと、およびポーリング

  • システム起動時にデーモンとしてのウェブページ
  • 打ち上げからフォーク/ execの機構を介して
  • 起動

複数の実行や重複の問題を避けるために多少の努力が必要です。

+0

私はmysqlでテーブルを作成し、それを各ループで更新しました。それから、Ajaxを使って5秒ごとにテーブルをポーリングするPHPファイルを読みました。よく働く!先端に感謝します。 – Reg

0

私はよく、Ajaxは、だけなので醜いフラッシュしますが、いないいないいる、これを使用します。

私はその後flush、その後、サーバー上でecho行を行って、すべてのイベントに設定した画像

<img src='progress.gif' height=18 width=0 name=probar> 

置く:例えば(

echo "<script language='JavaScript'>\ndocument.probar.width=".(($sys["probar_width"]/$task_all)*$task_i).";\n</script>\n"; 
flush(); 

サーバー(Apacheなど。)場合は、キャッシュを使用.gzipが有効になっている)、うまく動作しません。