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

是的,没有。

您需要担心三个输出缓冲区:

  1. PHP 可以缓冲输出。您可以使用ob_ 函数来控制该缓冲区并强制输出到 apache/iis(Web 服务器)
  2. Apache/IIS 有自己的缓冲区,只有当他们认为有足够的信息可以发送时才会发送信息。这也与 mod_gzip 或其他压缩相结合。你不能通过 PHP 来控制它。
  3. 您的浏览器和服务器之间还可能存在其他缓存/代理。这些可能会保持输出,直到它收到完整的响应。

因此,echo 立即放入 PHP 缓冲区。您可以将缓冲区发送到网络服务器,但之后它就无法控制了。

于 2012-12-19T00:28:05.890 回答