【发布时间】:2011-03-05 23:10:30
【问题描述】:
我想让 PHP 输出一些文本,然后休眠一秒半,然后再输出一些文本。
<?php
echo 'Output one.';
usleep(1500000);
echo 'Output two.';
?>
我的问题是所有文本都被同时输出 - 等待了那 1.5 秒。我读过一些关于一个叫做flush的函数的东西——但它似乎不起作用。也许我没有用它写。任何帮助将不胜感激^^
提前致谢!
【问题讨论】:
我想让 PHP 输出一些文本,然后休眠一秒半,然后再输出一些文本。
<?php
echo 'Output one.';
usleep(1500000);
echo 'Output two.';
?>
我的问题是所有文本都被同时输出 - 等待了那 1.5 秒。我读过一些关于一个叫做flush的函数的东西——但它似乎不起作用。也许我没有用它写。任何帮助将不胜感激^^
提前致谢!
【问题讨论】:
您的问题是这是 PHP。它是一个预处理器。所以 php 脚本运行,输出第一个日志,然后休眠,然后输出第二个日志,然后才发送到浏览器并显示在浏览器中。
如果您希望延迟显示在浏览器屏幕上,则需要 javascript。
function showLog () {
$(".secondlog").show();
}
$(document).ready(function() {
setTimeout(showLog,3000);
});
.firstlog {
border: 1px solid #AEAEAE;
}
.secondlog {
display: none;
border: 1px solid #AEAEAE;
margin-top: 20px;
}
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<div class="firstlog">
Output of first log
</div>
<div class="secondlog">
Output of second log
</div>
<p>Wait for 3 seconds...</p>
【讨论】:
echo 'Output one.';
ob_flush();
flush();
usleep(1500000);
echo 'Output two.';
【讨论】:
Pentium10 的回答对我来说不太管用。但是当我去 PHP 文档页面时,那里有很多好的 cmets。
http://php.net/manual/en/function.ob-flush.php
这适用于我使用 Firefox 3.5.9、PHP 5.2.11、Apache 在本地 Windows 7 笔记本电脑上运行:
echo "test";
ob_end_flush();
flush();
usleep(x);
echo "test";
ob_end_flush() 对于发送数据至关重要。
【讨论】:
我认为这更像是一个 http 请求/响应问题。在命令行上,您的脚本工作正常。
通常,响应已完全准备好并发送给客户端。如果您的响应具有必须发送多个 tcp 包的大小,则可能会在您的脚本准备好处理之前发送第一个包。所以这取决于输出的大小。根据客户端/Web 浏览器,也可能会在完整响应到达客户端之前呈现第一个包。
正如Noufal Ibrahim 在我打字时回答的那样,我完全同意他的看法。以异步方式执行。
【讨论】:
虽然 Pentium10 的解决方案可能会起作用,但您可能需要考虑将其移至客户端。进行异步调用以获取第一个值,打印它,休眠所需的时间,然后重复第二个值。
【讨论】:
看看这个
<?php
ob_start();
echo 'Output one.';
ob_flush();
usleep(1500000);
echo 'Output two.';
ob_flush();
?>
【讨论】:
ob_flush(); 之后添加了 flush(); 然后它起作用了。有人能解释一下为什么我需要flush吗?