【问题标题】:PHP output text before sleepPHP在睡眠前输出文本
【发布时间】:2011-03-05 23:10:30
【问题描述】:

我想让 PHP 输出一些文本,然后休眠一秒半,然后再输出一些文本。

<?php

echo 'Output one.';

usleep(1500000);

echo 'Output two.';

?>

我的问题是所有文本都被同时输出 - 等待了那 1.5 秒。我读过一些关于一个叫做flush的函数的东西——但它似乎不起作用。也许我没有用它写。任何帮助将不胜感激^^

提前致谢!

【问题讨论】:

    标签: php text sleep


    【解决方案1】:

    您的问题是这是 PHP。它是一个预处理器。所以 php 脚本运行,输出第一个日志,然后休眠,然后输出第二个日志,然后才发送到浏览器并显示在浏览器中。

    如果您希望延迟显示在浏览器屏幕上,则需要 javascript。

    function showLog () {
      $(".secondlog").show();
    }
    
    $(document).ready(function() {
      setTimeout(showLog,3000);
    });
    .firstlog {
      border: 1px solid #AEAEAE;
    }
    
    .secondlog {
      display: none;
      border: 1px solid #AEAEAE;
      margin-top: 20px;
    }
    <script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
    <div class="firstlog">
      Output of first log
    </div>
    <div class="secondlog">
      Output of second log
    </div>
    
    <p>Wait for 3 seconds...</p>

    【讨论】:

      【解决方案2】:
      echo 'Output one.';
      ob_flush(); 
      flush();
      usleep(1500000);
      echo 'Output two.';
      

      【讨论】:

        【解决方案3】:

        Pentium10 的回答对我来说不太管用。但是当我去 PHP 文档页面时,那里有很多好的 cmets。

        http://php.net/manual/en/function.ob-flush.php

        这适用于我使用 Firefox 3.5.9、PHP 5.2.11、Apache 在本地 Windows 7 笔记本电脑上运行:

        echo "test";
        ob_end_flush();
        flush();
        usleep(x);
        echo "test";
        

        ob_end_flush() 对于发送数据至关重要。

        【讨论】:

        • 唯一对我有用的答案!非常感谢!
        【解决方案4】:

        我认为这更像是一个 http 请求/响应问题。在命令行上,您的脚本工作正常。

        通常,响应已完全准备好并发送给客户端。如果您的响应具有必须发送多个 tcp 包的大小,则可能会在您的脚本准备好处理之前发送第一个包。所以这取决于输出的大小。根据客户端/Web 浏览器,也可能会在完整响应到达客户端之前呈现第一个包。

        正如Noufal Ibrahim 在我打字时回答的那样,我完全同意他的看法。以异步方式执行。

        【讨论】:

          【解决方案5】:

          虽然 Pentium10 的解决方案可能会起作用,但您可能需要考虑将其移至客户端。进行异步调用以获取第一个值,打印它,休眠所需的时间,然后重复第二个值。

          【讨论】:

            【解决方案6】:

            看看这个

            <?php
            
            ob_start();
            
            echo 'Output one.';
            ob_flush();
            usleep(1500000);
            echo 'Output two.';
            ob_flush();
            
            ?>
            

            【讨论】:

            • 这对我不起作用,但我在每个 ob_flush(); 之后添加了 flush(); 然后它起作用了。有人能解释一下为什么我需要flush吗?
            猜你喜欢
            • 2010-11-16
            • 2011-04-10
            • 1970-01-01
            • 1970-01-01
            • 2012-04-07
            • 1970-01-01
            • 2013-03-03
            • 2017-10-17
            • 1970-01-01
            相关资源
            最近更新 更多