4

ログ プリンターを使用して、ignore_user_abort が機能するかどうかをテストしました。ただし、エコーは機能したくありません。エコーはループが完了したときにのみ機能しますか?

<?php
ignore_user_abort(1); // run script in background 
set_time_limit(0); // run script forever 
$interval=2; // do every 2 sec... 
$i=0;
 $lastRunLog = 'lastrun.log';
do{ 
   // add the script that has to be ran every 2 sec here 
   // ... 
   echo 'Test: '.$i;

   file_put_contents($lastRunLog, time());


   sleep($interval); // wait 2 sec 
   $i=$i+1;
}while(true); 
?>
4

1 に答える 1

1

はいといいえ。

考慮する必要がある 3 つの出力バッファーがあります。

  1. PHP は出力をバッファリングできます。ob_ 関数を使用して、そのバッファーを制御し、出力を apache/iis (Web サーバー) に強制することができます。
  2. Apache/IIS には独自のバッファーがあり、送信するのに十分な情報があると判断された場合にのみ情報を送信します。これは、mod_gzip またはその他の圧縮によっても圧縮されます。これを PHP で制御することはできません。
  3. ブラウザとサーバーの間に他のキャッシュ/プロキシが存在する可能性もあります。これらは、完全な応答を受信するまで出力を保留する場合があります。

そのため、echo はすぐに PHP バッファーに入れます。バッファをウェブサーバーに送信することはできますが、その後はあなたの手に負えません。

于 2012-12-19T00:28:05.890 に答える