我有一个简单的PHP脚本内的回声调用屏幕上的打印参数:增加延迟回音
<body>
<p>the string will appear in 30 seconds:</p>
<p><?php echo $string; ?></p>
</body>
我想的是,“回声”运行前,该系统将等待X秒。因此,“30秒后出现的字符串”文本将首先出现,30秒后,$字符串将出现在它的下面。如何做到这一点?在加载之前,Sleep()倾向于延迟整个页面。
我有一个简单的PHP脚本内的回声调用屏幕上的打印参数:增加延迟回音
<body>
<p>the string will appear in 30 seconds:</p>
<p><?php echo $string; ?></p>
</body>
我想的是,“回声”运行前,该系统将等待X秒。因此,“30秒后出现的字符串”文本将首先出现,30秒后,$字符串将出现在它的下面。如何做到这一点?在加载之前,Sleep()倾向于延迟整个页面。
你可以使用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>
确实,sleep()会延迟整个页面。第二种方法在某种程度上不起作用,但是当使用JS做类似的事情时,代码确实出现在X秒之后,但它仍然在我试图阻止这种情况的HTML源代码中可见。 – AssafT
您可以使用延迟30秒的AJAX请求从服务器检索数据并将其显示在页面上。退房https://api.jquery.com/load/ –
它没有工作,因为我有30毫秒的超时。已更新至30000,其按预期工作。 –
你可以尝试的解决方法,这种情况下使用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 ...如果有一些“不耐烦和黑客易“的客户端,只是查看您的页面的源代码将做的伎俩... :(
服务器端替代:如果提出的解决方法是无效的为您的应用程序(因为我不知道它的安全需求),我会尝试,例如用另一种服务器端方法检查。下面是基本步骤:
保存时间戳与(例如,在会话cookie)所述客户端的信息一起在服务器上的初始请求的。
然后,不要直接从服务器发送$ string,只需将其保留为空即可。
使用JS,延迟30秒后再向服务器(例如通过AJAX)询问$ string。这个AJAX调用将在初始请求后的30秒后触发,服务器现在可以检查会话cookie(包含有关客户端和时间戳的信息)。
如果(current_timestamp() - cookie_timestamp()> = 30)==>服务器返回$ string或在其他情况下不返回任何内容。
祝你好运;)
TNX ...我决定做一个服务器端解决方案。所有JS方法隐藏字符串,但它出现在html源文件中。 – AssafT
确保您的输出不会被缓冲。 – Musa
,看起来它会更好地实现使用JavaScript? – Stu
然后你应该使用Javascript进行异步任务。 –