2

我正在使用 php,我while()在 php 中看到了循环。我想问一些我们可以使用
while()循环作为mysql_unbuffered_query().
这段代码很好理解。

<?php
  echo 'While Loop is going to start';
  $i = 0;
  while($i <= 1000){
      echo 'Now number is '.$i;
      $i++;
  }
  echo 'Continue to running script';
?>

当我们运行这段代码时会发生什么,首先读取这些代码while loop is going to start
然后读取while循环并创建要运行的语句Now number is 0.....1000
然后读取Continue to running script当代码完成时,它会打印出整个数据。但我不想要这个。
我想要的是。
第一个脚本读取while Loop is going to start并打印出然后读取while循环并
打印出Now number is 0然后去Continue to running script打印出但是脚本的 后端while循环仍在工作,我的意思是两者都可以while loop同时continue script工作。
这让你更加了解。
OUTPUT(脚本运行的第一次开始)

 1 - While Loop is going to start
 2 - Now number is 0
 3 - Continue to running script

输出(脚本运行继续)

 1 - While Loop is going to start
 2 - Now number is 0
 3 - Now number is 1
 . - ...............
 1000 - Now number is 1000
 1001 - Continue to running script

可能这是不可能的。如果是,我该怎么做。

但也许这是可能的mysql_unbuffered_query()
就像当 while 循环完成一个循环时,它会打印出数字,然后再打印出另一个,依此类推。
OUTPUT(第一次while循环完成一个循环)

1 - While Loop is going to start
2 - Now number is 0

输出(while 循环完成第二个循环)

1 - While Loop is going to start
2 - Now number is 0
3 - Now number is 1

如果这是可能的,请指导我该怎么做。
谢谢..............

4

3 回答 3

1

您需要线程或进程。这是一个很好的线程:PHP 有线程吗?

我最喜欢的答案是https://stackoverflow.com/a/14201579/650405

于 2013-06-11T13:25:19.697 回答
1

如果您从命令行运行此脚本,输出缓冲始终关闭,隐式刷新始终打开(根据http://us3.php.net/manual/en/outcontrol.configuration.php)。因此,我怀疑您是在 Web 服务器中运行此 PHP。

有几个 PHP INI 值会影响缓冲,因此您可能希望关闭这些功能:

<?php
    ini_set('zlib.output_compression', 'off');
    ini_set('implicit_flush', 'on');
    ini_set('output_buffering', 'off');
    echo "While Loop is going to start.\n";
    $i = 0;
    while($i <= 10){
        echo "Now number is ".$i."\n<br>\n";
        $i++;
        sleep(1);
    }
    echo "\n<br>Finished running script\n\n";
?>

即便如此,PHP 的行为也可能完全符合您的要求,但您的 Web 服务器正在缓冲输出。这个线程可能很有趣:php flush not working

如果您使用的是 apache,您可以在 .htaccess 文件中添加一行以关闭 gzip 压缩(它会自动缓冲,直到有足够的数据可以压缩和发送)我找到了这个页面(http://www.bluehostforum.com/showthread .php?18996-Turning-off-Gzip)描述了这个过程,但它基本上说要添加

SetEnv no-gzip dont-vary

到您的 .htaccess 文件。

您能否确认我在上面发布的脚本在您的命令行环境中是否按您所期望的那样工作?

此外,如果您在 Web 服务器中工作,请发布您正在使用的 Web 服务器(IIS/apache/etc)

于 2013-06-11T14:16:57.430 回答
0

强制输出到浏览器按此顺序使用以下调用

ob_flush();
flush();

但是,它不会在后台进行任何处理。

于 2013-06-11T13:55:14.823 回答