【问题标题】:How to echo something when in infinite while loop?在无限while循环中如何回显某些内容?
【发布时间】:2012-06-08 11:24:46
【问题描述】:

例如我有这样的东西:

<?php
  header("Content-Type: text/html; charset=UTF-8");
  set_time_limit(0); 
  ob_start("ob_gzhandler");

  while(true) :
    echo microtime(true)."<br>";
    ob_flush();
    flush(); 
    sleep(1);
  endwhile;

  ob_end_clean();
?>

此代码适用于我的localhost,页面上的每一秒都会打印microtime(),但是当我尝试在我的Shared Linux Hosting 上运行相同的脚本时,没有打印任何内容,页面只有无限的加载时间。

如何在我的主机上进行无限循环打印?

也许我必须在我的php.ini 文件中启用/禁用某些东西?有什么想法吗?

【问题讨论】:

    标签: php infinite-loop shared-hosting


    【解决方案1】:

    它是Gzip等待所有数据,所以它可以压缩并发送它。

    当您使用共享主机时,完全禁用它可能有点棘手。 所以我们可以:

    使用 PHP 在 Linux 主机上禁用 Gzip

    ini_set('output_buffering','on');
    ini_set('zlib.output_compression', 0)
    

    使用 .htaccess 禁用 Gzip

    SetEnv no-gzip dont-vary
    



    编辑: 你也可以在你的 Linux 主机上试试这个吗?

    <?php
    ini_set('output_buffering','on');
    ini_set('zlib.output_compression', 0);
    ob_implicit_flush();
    for($i=0;$i<100;$i++) {
          echo $i;
          echo str_repeat(" ", 500);
          ob_flush();
          flush();
          sleep(1);
    }
    ?>
    

    这个适用于我的主机,看看它是否适用于你的主机会很有趣。

    【讨论】:

    • 我编辑并检查了我的 php5.ini 文件并将该行添加到 .htaccess,但它仍然没有显示任何内容
    • 看看我的编辑,我发布了一段我刚刚在主机上测试过的工作代码。
    • 页面加载后才显示结果。
    • 我在 GoDaddy 共享托管网络服务器上遇到了同样的问题,并且(不幸的是),这个解决方案对我不起作用。 ob_flush() 和 flush() 完全无效。在脚本完成执行之前不会显示输出。我只有在这台服务器(我使用的唯一共享托管服务器)上有问题。我在您的答案中尝试了两种解决方案(ini_set() 函数调用和 .htaccess 文件)。同样的问题仍然存在。虽然我不能保证我会保持这个页面,但这里是它发生的页面的 URL:specpro.us/.admin/specpro.us.reqcert.php?debug=1
    猜你喜欢
    • 2019-11-13
    • 2022-11-20
    • 2017-07-26
    • 2017-07-05
    • 2014-03-29
    • 1970-01-01
    • 2015-06-25
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多