循环之间的睡眠功能在任何循环执行之前运行

时间:2019-07-03 03:54:17

标签: php

我正在尝试让脚本等待3秒再继续执行。问题在于睡眠功能首先运行并睡眠3秒钟,然后两个循环都运行。

if ($resultCheck > 0) {
  while ($row = mysqli_fetch_all($result)) {


      for ($i=0; $i < 3; $i++) {
        echo $row[$i][0];
      }
         sleep(3);

      $values = sizeof($row);
      for ($i=3; $i < $values; $i++) {
        echo $row[$i][0];
      }

    }


    }

3 个答案:

答案 0 :(得分:1)

在每个回显之后添加以下行: flush(); 。它将使输出立即显示。

您的代码正确,但是脚本结束后将显示输出。要立即显示输出,需要使用flush()函数刷新输出缓冲区。

替换行:

echo $row[$i][0];

echo $row[$i][0];
flush();

可能还有更多的输出缓冲层正在导致输出延迟。参见How to disable output buffering in PHP。如果无法使用冲洗,则可以将ob_flush与冲洗一起使用。

答案 1 :(得分:1)

您的代码正在运行,但是为了使您的输出显示出来,您应该像这样冲洗输出缓冲区:

if ($resultCheck > 0) {
  while ($row = mysqli_fetch_all($result)) {
    for ($i=0; $i < 3; $i++) {
      echo $row[$i][0];
      ob_flush();
      flush();
    }
    sleep(3);

    $values = sizeof($row);
    for ($i=3; $i < $values; $i++) {
      echo $row[$i][0];
    }
  }
}

如果您的文本未超过一定长度,则可能仍无法刷新。如果上面的代码不起作用,我们可以使用str_pad($text,4096);将文本加长到4kb:

if ($resultCheck > 0) {
  while ($row = mysqli_fetch_all($result)) {
    for ($i=0; $i < 3; $i++) {
      echo str_pad( $row[$i][0], 4096);
      ob_flush();
      flush();
    }
    sleep(3);

    $values = sizeof($row);
    for ($i=3; $i < $values; $i++) {
      echo $row[$i][0];
    }
  }
}

答案 2 :(得分:0)

您必须先初始化sleep(),然后才能执行其他操作

 if ($resultCheck > 0) {

  while ($row = mysqli_fetch_all($result)) { 
          sleep(3);  
      for ($i=0; $i < 3; $i++) {
        echo $row[$i][0];
      }
      $values = sizeof($row);
      for ($i=3; $i < $values; $i++) {
        echo $row[$i][0];
      }
    }
    }