在页面加载之前,PHP不会回显

时间:2017-06-20 08:23:45

标签: php html

我的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内容发送给客户端,他们会看到&#34;等待页面加载&#34;文本,因为它被刷新,但在我的网站上,网页只是一个空白的白色屏幕,直到PHP代码完成执行(100秒后),然后页面上的所有内容立即显示。

我尝试过添加

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

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

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

谢谢!

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

2 个答案:

答案 0 :(得分:2)

您需要从脚本中删除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();
?>

答案 1 :(得分:0)

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

我建议你阅读这个好的Q&amp; A: PHP buffer ob_flush() vs. flush()

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