【问题标题】:Why does echo not work in a do while loop or even when ignore_user_abort(1)?为什么 echo 在 do while 循环中甚至在 ignore_user_abort(1) 中都不起作用?
【发布时间】:2012-12-06 06:57:44
【问题描述】:

我使用日志打印机来测试 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 完成并从服务器发送到浏览器后才会显示回显

标签: php loops while-loop do-while abort


【解决方案1】:

是的,也不是。

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

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

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

【讨论】:

    猜你喜欢
    • 2022-12-12
    • 1970-01-01
    • 2023-02-11
    • 1970-01-01
    • 2013-05-06
    • 1970-01-01
    • 1970-01-01
    • 2021-04-14
    • 2020-01-08
    相关资源
    最近更新 更多