【问题标题】:PHP sleep() FunctionPHP sleep() 函数
【发布时间】:2013-06-06 23:53:37
【问题描述】:

我正在尝试在 echo 命令之间插入延迟,并希望使用 sleep() 函数。不幸的是,据我了解,PHP 中的 sleep() 函数会延迟整个脚本。我想知道这是否有一个技巧?

我正在努力完成以下工作

  1. 回显一行
  2. 睡眠(2)
  3. 回显下一行
  4. 睡眠(2)

有没有办法在没有任何 JS 或其他东西的情况下使用 PHP 做到这一点?

【问题讨论】:

  • 脚本是从 CLI 交互运行还是用于生成网页?
  • 你是在说延迟不同行在用户浏览器中的出现吗?
  • 听起来你想使用 JavaScript。
  • PHP 在服务器上工作,因此 PHP 可以只让服务器进入(长时间、长时间)睡眠,而不是浏览器;)
  • 不清楚您所说的“回显命令之间的延迟”或“延迟整个脚本”是什么意思。您能否就您正在尝试做的事情提供更多背景信息?

标签: php function sleep


【解决方案1】:

我认为你需要的只是一些 javascript:

<p id="p"></p>

<script>

setTimeout(function() {
  document.getElementById('p').innerHTML = "line1";
}, 2000);

setTimeout(function() {
  document.getElementById('p').innerHTML = "line2";
}, 4000);

</script>

【讨论】:

    【解决方案2】:

    我假设当您说您不想延迟整个脚本时,您实际上是在谈论输出......您不想延迟整个输出,只是睡眠后的内容。

    有几件事要记住:

    1. IE 在收到 1k 内容之前往往不显示任何内容。为了解决这个问题,您需要通过输出一些填充来启动脚本……例如,1024 个空格。 (这对实际的 HTML 显示没有影响)

    2. 您需要确保您的内容没有被网络服务器以任何方式压缩

    3. 您需要在回显后刷新输出缓冲区。

    所有这些加起来看起来像这样:

    <?php
        // turn off output compression
        @apache_setenv('no-gzip', 1);
        ini_set('zlib.output_compression', 0);
    
        // no need to flush after every output call
        ob_implicit_flush(true);
    
        // some padding for IE
        echo(str_repeat(" ", 1024) . "\n");
    
        echo("Something here<br />");
        sleep(5);
    
        echo("Something else<br />");
    ?>
    

    【讨论】:

    • jcsanyi 您回复中关于输出的部分正是我的想法。但我认为我最好让整个事情处理并在客户端处理延迟。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2010-09-19
    • 2018-08-30
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-10-12
    相关资源
    最近更新 更多