如何在 PHP 中延迟 2 秒来包含?

How to delay 2 seconds in PHP to include?

我希望此 PHP 脚本在包含 sp.php(服务器面板)之前等待 2 秒。 sleep(2); 对我不起作用(它根本不做任何事情。)

我的代码:

<?php
$cookie_name = "sc";
?>
<?php
if(!isset($_COOKIE[$cookie_name])) {
    include 'noserver.php';
} else {
    echo "Server found";
    sleep(2);
    include 'sp.php';
}
?>

有什么想法吗?它用于托管网站的服务器。

您可以使用 Javascript 与 setTimeoutwindow.location.href 重定向到文件。

示例:

<?php

if (!isset($_COOKIE[$cookie_name])) {
    include 'noserver.php';
} else {
    echo 'Server found';
    echo '<script>setTimeout(function(){window.location.href = 
    "http://yourwebsite.com/sp.php"}, 2 * 1000);</script>';
}
?>

您可能认为它什么也没做,因为在包含完成之前您看不到输出。尝试输入 flush 命令并在写入“找到服务器”后刷新所有缓冲:

print "Server found\n";
// in the very worst case you might be forced to send "<!-- GARBAGE -->" 
// with enough "garbage" to force any intermediate buffers to flush.
if (ob_get_level()) {
    ob_flush();
}
flush();
...

但是,正如所建议的那样,这可能是一个 XY 问题。您希望 else 发生某些事情,服务器端延迟 2 秒可能不是实现此目的的最佳方法。

例如,如果您希望立即出现快速的“找到服务器”消息,然后加载较慢的页面(即使是同一页面),您可以使用会话标志或使用 jQuery 和 DOM 加载来做到这一点。

在第一种情况下,您加载同一页面两次,第一次显示消息、设置标志并使用位置或元重新加载 (echo "<meta http-equiv="refresh" content="2" />))。第二次,在设置标志的情况下,您取消设置标志和 运行 include()。问题已解决,没有服务器 sleep() 开销。