代码之家  ›  专栏  ›  技术社区  ›  arik

PHP睡眠前输出文本

  •  5
  • arik  · 技术社区  · 14 年前

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

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

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

    提前谢谢!

    6 回复  |  直到 8 年前
        1
  •  11
  •   Pentium10    14 年前

    看看这个

    <?php
    
    ob_start();
    
    echo 'Output one.';
    ob_flush();
    usleep(1500000);
    echo 'Output two.';
    ob_flush();
    
    ?>
    
        2
  •  9
  •   abelito    14 年前

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

    使用Firefox 3.5.9、PHP5.2.11和Apache运行本地Windows 7笔记本电脑时,这对我来说很有效:

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

        3
  •  2
  •   Community T.Woody    7 年前

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

    作为 Noufal Ibrahim 我一边打字一边回答,我完全同意他的看法。以异步方式进行。

        4
  •  1
  •   Noufal Ibrahim    14 年前

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

        5
  •  1
  •   user5219763    8 年前
    echo 'Output one.';
    ob_flush(); 
    flush();
    usleep(1500000);
    echo 'Output two.';
    
        6
  •  0
  •   s1h4d0w    8 年前

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

    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>