【问题标题】:How sleep() works in PHPsleep() 在 PHP 中的工作原理
【发布时间】:2016-03-21 08:47:34
【问题描述】:

请原谅这个看似非常简单的问题,并且可能对 PHP/sleep() 的工作原理缺乏了解,但我对以下代码进行了一些指导:

<?php
$time_now = time();
echo "Time Now : " . $time_now;
sleep(10);
$time_then = time();
echo "<br>Time Then : " . $time_then;
?>

我希望这段代码输出当前时间,然后等待 10 秒,然后在 10 秒后输出时间。

而是等待设置的 10 秒并同时输出两个时间。时间是正确的,因为“现在时间”是我执行代码的时间,而“时间然后”是 10 秒后,但它没有按照我的预期响应(现在输出时间,等待 10 秒,然后继续执行代码并显示“Time Then”)。

鉴于我的理解显然不正确,是否有可能实现这一点?或者我会更好地触发另一个文件来加载我想要做的事情,如下所示:

文件 1

<?php
$time_now = time();
echo "Time Now : " . $time_now;
header('Location: page2.php');
?>

文件 2

<?php
sleep(10);
$time_then = time();
echo "<br>Time Then : " . $time_then;
?>

谢谢。

【问题讨论】:

  • sleep() 命令用于告诉服务器在执行脚本之前等待。似乎将函数放在开头、中间或结尾都没有关系,反正它会休眠。
  • @C0dekid 谢谢,我明白了,但我希望在 sleep 命令之前执行并回显代码,然后等待并回显第二个值
  • 输出通常是缓冲的。如果您想在调用 echo 时立即得到响应,您需要刷新输出。
  • 它确实按照您期望的方式工作:只需在命令行中尝试!您可能没有提到的是您正在通过 Web 服务器和 Web 浏览器组合加载代码。
  • 看看这个例子:php.net/manual/en/function.flush.php我想这就是你需要的。 PHP 需要一次性执行。所以基本上睡眠前的消息不会显示,因为 sleep() 函数正在等待执行脚本的其余部分。

标签: php sleep


【解决方案1】:

需要使用PHP的flush函数,才能得到异常结果。

当脚本完成时,PHP 会为您提供输出。如果要实时显示结果,则需要刷新输出缓冲区。

$time_now = time();
echo "Time Now : " . $time_now;
flush();
sleep(10);
$time_then = time();
echo "<br>Time Then : " . $time_then;

【讨论】:

【解决方案2】:

如果你在服务器上运行它,它确实会在脚本完成后给出输出。

但如果用作命令行脚本,它会输出然后休眠十秒钟,然后继续

在@lolka_bolka 中提到如果你想要价值然后你可以使用flush

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2013-10-17
    • 1970-01-01
    • 2013-11-04
    • 2012-09-02
    • 2019-12-04
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多