TECH INFO

Are you ready for TECH INFO?

AD

ループで重い処理なんかをする場合に、途中経過を表示する事は、windows上のプログラムでは普通に出来る事だと思います。

しかし、これをPHPでもってサーバー上で行っている処理の途中経過を表示するなどという事は、AJAXな処理が必要だと思っていたので、そんな簡単に行える事とは思っていなかったです。修行がたりませんね。

割と有名な処理なようで、同じような問題に悩んだ先人に感謝。
実際のコードはこんな感じ。

  for($i=0;$i<256;$i++){
   echo ” “;//ie対策
  }

 for( $i=0;$i<100;$i++ ){

  //ここに、なんか重い処理があると思って下さい
  omoi_syori();

  print(“$i回転目<br />\n”);

  ob_flush();
  flush();

  sleep(1);//なんかしらんが、必要らしい。…なんでかは不明だが、そういうものとしておく。

 }

これで、途中経過を表示してくれるようになるらしい。
ちなみに 上のループで256回空白を吐き出しているのは、
ieが256バイトバッファを貯めてからでないと出力をしてくれないからという理由らしい...
sleep(); については、これを入れておかないとちゃんと動いてくれません。
実際にやってみたが、やっぱりそうだった。

 技術的になぜなのかという質問もあるかもしれないが...正直言ってよくわからん。
リファレンスになんか書いてあったが、私の弱い頭ではなんの事やらイマイチわかりませんでした。
技術的な裏づけがなければ使えねぇよという人は、すまんが、自力で調べて、自力で内容をよく把握して欲しい。

自分的には、ちゃんと意図の通りに動けば技術的な部分は隠蔽されたままで問題なし。
クリティカルな部分にこのコードを使う予定は無いですので。

Post date : 2009.06.15 16:07