我希望PHP输出一些文本,然后睡一秒半,然后再输出一些文本。
<?php
echo 'Output one.';
usleep(1500000);
echo 'Output two.';
?>
我的问题是所有文字都被同时发出 - 等待那些1.5秒之后。我已经阅读了一些名为flush的函数 - 但它似乎不起作用。也许我没有用它写。任何帮助将不胜感激^^
提前致谢!
答案 0 :(得分:10)
检查出来
<?php
ob_start();
echo 'Output one.';
ob_flush();
usleep(1500000);
echo 'Output two.';
ob_flush();
?>
答案 1 :(得分:7)
Pentium10的答案对我来说并不适用..但是当我访问PHP文档页面时,那里有很多好评。
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()对于发送数据至关重要。
答案 2 :(得分:2)
我认为这更像是一个http请求/响应问题。在命令行上,您的脚本可以正常工作。
通常,响应已完全准备好并发送给客户端。如果您的响应具有必须发送多个tcp包的大小,则在脚本准备好处理之前可能会发送第一个包。所以它取决于输出的大小。根据客户端/ Web浏览器的不同,在完成响应到达客户端之前,也可能会出现第一个包。
当Noufal Ibrahim在我打字时回答,我完全赞同他。以异步方式进行。
答案 3 :(得分:1)
虽然Pentium10的解决方案可能会有效,但您可能需要考虑将其移至客户端。进行异步调用以获取第一个值,打印它,睡眠所需的时间,然后重复第二个值。
答案 4 :(得分:0)
echo 'Output one.';
ob_flush();
flush();
usleep(1500000);
echo 'Output two.';
答案 5 :(得分:0)
你的问题是这是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>