为什么输出在执行前等待而不是php中的中间进程?

时间:2017-04-27 04:46:03

标签: php

for ($i=1; $i<=4; $i++) { 
    echo $i ;
}    
sleep(2) ;  
for ($i=5; $i<=10; $i++) { 
    echo $i ;
}

我希望首先打印1到4而不是等待2秒而不是打印5到10.这正在online php editor上工作但是当我尝试窗口(xampp)时它比直接显示1到10。

4 个答案:

答案 0 :(得分:4)

我认为在线PHP正在运行它,就像它在shell中运行一样,所以你可以在代码运行时看到输出。

在您的Xampp虚拟机上,Apache正在等待PHP脚本完全运行,然后再将其提供给您的浏览器,因此看起来sleep()命令似乎没有做任何事情。

在命令行界面中运行您的脚本,您将看到您的期望。

答案 1 :(得分:0)

您必须了解PHP命令行和HTTP请求之间的区别。

如果执行php命令行,它将以逼真的方式提供输出。

your_root_folder$ php your_script.php

但是如果你通过HTTP请求执行php脚本,那么Apache正在等待整个脚本的完整执行,然后将输出提供给客户端。

http://localhost/your_script.php

根据您的问题,在线PHP编辑器将您编写的代码发布到他们的PHP服务器,在完成执行服务器将为您提供输出后,在他们的服务器中执行您的代码。

答案 2 :(得分:0)

添加到现有的答案,如果您需要立即输出到浏览器,您可以使用ob_end_flush()flush(),即:

for ($i=1; $i<=4; $i++) {
    echo $i ;
}
ob_end_flush();
flush();
sleep(2) ;
for ($i=5; $i<=10; $i++) {
    echo $i ;
}

答案 3 :(得分:0)

您调用服务器,运行php脚本以及何时运行 这已完全完成,结果将返回给您的浏览器。

你可以尝试睡觉。

<?php
header( 'Content-type: text/html; charset=utf-8' );
header("Cache-Control: no-cache, must-revalidate");
header ("Pragma: no-cache");
set_time_limit(0);
ob_implicit_flush(1);

for ($i=1; $i<=4; $i++) { 
    echo $i ;
} 
for ($i = 0; $i < 2; $i++) { 
    sleep(2);
    if(ob_get_level()>0)
       ob_end_flush(); 
}
for ($i=5; $i<=10; $i++) { 
    echo $i ;
}
?>