我理解睡眠是如何起作用的,但它在事情发生之前就有效了。比方说,我有一些回声和邮件以及其他一些东西。然后睡一觉,然后重定向。好吧,看起来睡眠先行,然后一切都只是垃圾邮件,导致服务器CPU增加。是否存在类似于睡眠的东西,在事情未被执行后不会起作用?
例如
echo 'Hey';
sleep(3);
echo 'My next text after 3 seconds is up';
嗯,有了这个,这不起作用,它使用C#做同样的事情。
当发生这种情况时,页面将不会响应3秒钟,然后是两个消息"嘿" &安培; " 3秒后我的下一个文字出现了#34;将立即显示所有。我是用这个做错了吗?还有其他我应该使用的东西吗?
因为我从未使用过睡眠,而且我看到很多人使用它来做同样的事情并且它有效,但在我的情况下,它并没有像我想象的那样真正起作用。
PHP不是C#
答案 0 :(得分:0)
您可以通过在点处刷新输出来完成此操作。您还可以使用ob_implicit_flush
来确保在每次输出调用时刷新输出,而不显式调用flush。
header( 'Content-type: text/html; charset=utf-8' );
echo 'Hey';
for($i=0;$i<60;$i++){
echo "<br />My next text after $i seconds is up";
ob_flush();
flush();
sleep(1);
}
请注意php docs for ob_flush suggests
,当事情不起作用时,您应该尝试使用内容类型标头。但是上面的代码也没有用。
答案 1 :(得分:0)
它完全按照编程运行,事实是,输出正在缓冲。您必须禁用缓冲,并强制flush()
确保在sleep()
之前发送缓冲。
while (@ ob_end_flush()); // closes all existing buffers if any
echo 'Hey';
flush(); // make sure it was flushed to the client
sleep(3);
...
并且它仍然可能在所有情况下都不起作用,因为还有另一个缓冲区,而这个你无法控制:浏览器。有些浏览器除非收到一定数量的数据,否则不会呈现任何HTML。