Php 为什么echo在do-while循环中不工作,甚至在ignore\u user\u abort(1)时也不工作?

Php 为什么echo在do-while循环中不工作,甚至在ignore\u user\u abort(1)时也不工作?,php,loops,while-loop,do-while,abort,Php,Loops,While Loop,Do While,Abort,我使用了一个日志打印机来测试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{ /

我使用了一个日志打印机来测试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); 
?>

是和否

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

  • PHP可以缓冲输出。您可以使用来控制该缓冲区并强制输出到apache/iis(web服务器)
  • Apache/IIS有自己的缓冲区,只有在认为有足够的缓冲区时才会发送信息。这也是通过mod_gzip或其他压缩来计算的。您无法通过PHP控制这一点
  • 在浏览器和服务器之间还可能存在其他缓存/代理。这些可能会保留输出,直到收到完整响应

  • 因此,echo会立即放入PHP缓冲区。您可以将缓冲区发送到Web服务器,但之后缓冲区将不再由您控制。

    是的,只有在PHP完成并从服务器发送到浏览器后,才会显示回显