2010-06-20 48 views
5

我想让PHP输出一些文本,然后睡一会儿,然后输出一些更多的文本。睡前PHP输出文本

<?php 

echo 'Output one.'; 

usleep(1500000); 

echo 'Output two.'; 

?> 

我的问题是,所有的文本被同时推出 - 等侯的1.5秒。我已经阅读了一些关于一个叫做flush的函数 - 但它似乎不起作用。也许我没有用它写。任何帮助将不胜感激^^

在此先感谢!

回答

8

检查了这一点

<?php 

ob_start(); 

echo 'Output one.'; 
ob_flush(); 
usleep(1500000); 
echo 'Output two.'; 
ob_flush(); 

?> 
+0

这并没有为我工作,但我接着说:冲洗();''每次之后使用ob_flush();'然后它的工作。有人可以解释为什么我需要“冲洗”吗? – Salam 2018-03-05 09:25:49

1

虽然Pentium10的解决方案可能会工作,你可能要考虑这个移动到客户端。进行异步调用以获取第一个值,打印它,休眠所需的时间,然后重复第二个值。

2

我认为这是一个http请求/响应问题。在命令行中,脚本可以正常工作。

正常情况下,响应已准备完毕并发送给客户端。如果您的响应的大小必须发送多个tcp包,则可能会在脚本准备好处理之前发送第一个包。所以它取决于输出的大小。根据客户端/网络浏览器的不同,在完整的响应到达客户端之前,也可能会发生第一个包被渲染的情况。

作为Noufal Ibrahim即时通讯打字时回答,我完全同意他。以异步方式进行。

4

Pentium10的答案对我来说并不适用。但是当我去到PHP文档页面时,那里有很多好评。

http://php.net/manual/en/function.ob-flush.php

这为我工作使用的是Firefox 3.5.9,PHP 5.2.11,阿帕奇流失本地的Windows 7笔记本电脑:

echo "test"; 
ob_end_flush(); 
flush(); 
usleep(x); 
echo "test"; 

的ob_end_flush()函数是为了获取发送的数据是至关重要的。

+0

谢谢,工作! – 2015-12-26 12:39:24

-1
echo 'Output one.'; 
ob_flush(); 
flush(); 
usleep(1500000); 
echo 'Output two.'; 
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>