2014-03-07 63 views
5

我有一个简单的PHP脚本内的回声调用屏幕上的打印参数:增加延迟回音

<body> 
<p>the string will appear in 30 seconds:</p> 
<p><?php echo $string; ?></p> 
</body> 

我想的是,“回声”运行前,该系统将等待X秒。因此,“30秒后出现的字符串”文本将首先出现,30秒后,$字符串将出现在它的下面。如何做到这一点?在加载之前,Sleep()倾向于延迟整个页面。

+0

确保您的输出不会被缓冲。 – Musa

+0

,看起来它会更好地实现使用JavaScript? – Stu

+1

然后你应该使用Javascript进行异步任务。 –

回答

4

你可以使用PHP睡眠等待30秒:

<body> 
<p>the string will appear in 30 seconds:</p> 
<p><?php sleep(30); echo $string; ?></p> 
</body> 

但是,当你这样做,这取决于你的PHP和Apache的设置,整个页面可能之前充分渲染和发送一个HTTP等待30秒回复给客户。

此外,如果您向客户端发送部分响应,有时可能会等待呈现内容,直到加载足够的页面以呈现数据(例如表格的情况)。

尝试使用JS来代替,以使页面呈现,然后在30秒后出现隐藏的数据:

<body> 
<p>the string will appear in 30 seconds:</p> 
<p id="sleep" style="display:none"><?php echo $string; ?></p> 
<script> 
    window.setTimeout(function() { 
     document.getElementById('sleep').style.display = ''; 
    }, 30000); 
</body> 
+0

确实,sleep()会延迟整个页面。第二种方法在某种程度上不起作用,但是当使用JS做类似的事情时,代码确实出现在X秒之后,但它仍然在我试图阻止这种情况的HTML源代码中可见。 – AssafT

+0

您可以使用延迟30秒的AJAX请求从服务器检索数据并将其显示在页面上。退房https://api.jquery.com/load/ –

+0

它没有工作,因为我有30毫秒的超时。已更新至30000,其按预期工作。 –

0

你可以尝试的解决方法,这种情况下使用Javascript。 jQuery库非常干净和实用。你应该尝试一下:

HTML

<body> 
    <p>the string will appear in 30 seconds:</p> 
    <p id="string" hidden="hidden"><?php echo $string; ?></p> 
</body> 

JS

$(document).ready(function() { 
    $("#string").delay(30000).show(); 
}); 

重要提示:由于JavaScript是一种客户端语言,这种解决方案只是 “拖延” 了$ string在客户端设备中回显,但自服务器开始以来,无论如何接收到变量$ string ...如果有一些“不耐烦和黑客易“的客户端,只是查看您的页面的源代码将做的伎俩... :(

服务器端替代:如果提出的解决方法是无效的为您的应用程序(因为我不知道它的安全需求),我会尝试,例如用另一种服务器端方法检查。下面是基本步骤:

  1. 保存时间戳与(例如,在会话cookie)所述客户端的信息一起在服务器上的初始请求

  2. 然后,不要直接从服务器发送$ string,只需将其保留为空即可。

  3. 使用JS,延迟30秒后再向服务器(例如通过AJAX)询问$ string。这个AJAX调用将在初始请求后的30秒后触发,服务器现在可以检查会话cookie(包含有关客户端和时间戳的信息)。

  4. 如果(current_timestamp() - cookie_timestamp()> = 30)==>服务器返回$ string或在其他情况下不返回任何内容。

祝你好运;)

+0

TNX ...我决定做一个服务器端解决方案。所有JS方法隐藏字符串,但它出现在html源文件中。 – AssafT