【问题标题】:PHP doesn't echo until page loadedPHP 在页面加载之前不会回显
【发布时间】:2017-06-20 08:23:44
【问题描述】:

我的 index.php 文件中有

<?php
    ob_start();
    echo '<html>
              <head>
                  <style>
                      body {background-color: black; color: white}
                  </style>
              </head>
              <body>
                  <h2 id="greeting">Wait for page load</h2>
              </body>
          </html>';
    ob_flush();
    flush();
    sleep(100);
    echo '<script>document.getElementByID("greeting").innerHTML = "Page loaded!";</script>';
    ob_flush();
    flush();
?>

我认为它会将 HTML 内容发送到客户端,他们会看到“等待页面加载”文本,因为它已被刷新,但在我的网站上,网页只是一个空白屏幕,直到 PHP 代码完成执行(100 秒后)然后页面上的所有内容立即显示。

我已经尝试添加

echo str_repeat("<!--AAAAAAAAAAAA-->", 100);

在每次回显之后也要确保它开始向浏览器发送数据块,但这也不起作用。

有没有办法让我在 php 代码完成执行之前显示 php 文件中的 HTML 内容?

谢谢!

编辑:每个人都在告诉我使用 ob_start(); ob_flush();和冲洗();但是我已经在上面的代码中使用过了?

【问题讨论】:

标签: php html


【解决方案1】:

你需要从你的脚本中删除ob_start,或者如果你的程序逻辑中需要ob_start,你可能需要使用ob_end_flush

刷新(发送)输出缓冲区并关闭输出缓冲

如下:

<?php
ob_start();
echo '<html>
          <head>
              <style>
                  body {background-color: black; color: white}
              </style>
          </head>
          <body>
              <h2 id="greeting">Wait for page load</h2> '. time() .'
          </body>
      </html>';

ob_end_flush(); // <--------------

ob_flush();
flush();
sleep(2);
echo '<script>document.getElementById("greeting").innerHTML = "Page loaded!";</script>';
ob_flush();
flush();
?>

【讨论】:

  • 天哪,太感谢你了,我只需要 ob_end_flush()。在看到所有其他人的 cmets 后变得绝望
【解决方案2】:

做你想要完成的事情的正确方法是使用 ajax。 在这种情况下使用输出缓冲是不可靠的,因为您可能还有其他缓冲层。

我建议你阅读这个很好的问答: PHP buffer ob_flush() vs. flush()

TL;DR您的网络服务器本身可能会实施一个缓冲方案(mod_deflate 或内容过滤器),您无法对其施加影响。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2010-12-23
    • 1970-01-01
    相关资源
    最近更新 更多