我的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();但我已经在上面的代码中使用过它了吗?
答案 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或内容过滤器),您无法对其进行影响。