PHP如何运行和显示函数序列,不要等到全部完成再显示1次
作为标题,我有一个带有一些函数的脚本,当我运行该文件(在Web服务器上)时,它将等待所有函数完成,然后在屏幕上一次性显示所有结果。 我只想运行一个函数并显示其结果,然后执行下一个函数。例如:PHP如何运行和显示函数序列,不要等到全部完成再显示1次,php,multithreading,sequence,Php,Multithreading,Sequence,作为标题,我有一个带有一些函数的脚本,当我运行该文件(在Web服务器上)时,它将等待所有函数完成,然后在屏幕上一次性显示所有结果。 我只想运行一个函数并显示其结果,然后执行下一个函数。例如: <?php function Fun1(){ echo 'Done 1st func'; sleep(3); //This is run time of Func1 } function Fun2(){ echo 'Done 2nd func'; sleep(3); //This is run tim
<?php
function Fun1(){
echo 'Done 1st func';
sleep(3); //This is run time of Func1
}
function Fun2(){
echo 'Done 2nd func';
sleep(3); //This is run time of Func2
}
function Fun3(){
echo 'Done 3rd func';
}
?>
然后,结果将首先显示为:
完成第一次功能
Func1加载3s后,添加了另一行:
完成第二次功能
Func2加载3s后
完成第三次功能
不是这样(等待6秒后):
完成第一个函数完成第二个函数
完成第三个函数
提前感谢:)您没有指定是在命令行还是在web服务器上运行脚本。但由于在CLI中运行它已经产生了输出,因此我假设您将在Apache中使用它 为了在输出发生时立即显示,您需要清除PHP的输出缓冲区并立即刷新输出 以下是一个例子:
<?php
while(ob_get_level()) ob_end_clean();
ob_implicit_flush(true);
function Fun1(){
echo 'Done 1st func';
sleep(3); //This is run time of Func1
}
function Fun2(){
echo 'Done 2nd func';
sleep(3); //This is run time of Func2
}
function Fun3(){
echo 'Done 3rd func';
}
?>
注意:只要PHP作为Apache模块安装,这就可以工作。您可以在phpinfo()中检查它;。如果它是作为CGI处理程序或FastCGI安装的,那么您也必须为它们禁用输出缓冲区。您没有指定是在命令行还是在web服务器上运行脚本。但由于在CLI中运行它已经产生了输出,因此我假设您将在Apache中使用它 为了在输出发生时立即显示,您需要清除PHP的输出缓冲区并立即刷新输出 以下是一个例子:
<?php
while(ob_get_level()) ob_end_clean();
ob_implicit_flush(true);
function Fun1(){
echo 'Done 1st func';
sleep(3); //This is run time of Func1
}
function Fun2(){
echo 'Done 2nd func';
sleep(3); //This is run time of Func2
}
function Fun3(){
echo 'Done 3rd func';
}
?>
注意:只要PHP作为Apache模块安装,这就可以工作。您可以在phpinfo()中检查它;。如果它是作为CGI处理程序或FastCGI安装的,那么您也必须为它们禁用输出缓冲区。我在Nginx Web服务器上运行它,并通过浏览器输出:(似乎它在Nginx上不起作用。您可能需要搜索如何在Nginx上执行此操作。下面是一些值得检查的内容:Hi@lbrahim您知道如何限制每个循环可以运行的时间吗?例如:
code
$i=0;而(1){sleep($i);$i++},如果一个回合运行超过5秒,则中断它并继续循环…不使用线程有点棘手。您可以尝试使用set\u time\u limit()
在您的函数中,因为它支持本地作用域。如果这对您不起作用,那么您就倒霉了。请注意,睡眠函数将不计入时间限制,因此您需要其他没有睡眠的测试场景。我在Nginx Web服务器上运行它,并通过浏览器输出:(似乎它在Nginx上不起作用。您可能需要搜索如何在Nginx上执行此操作。下面是一些值得检查的内容:Hi@lbrahim您知道如何限制每个循环可以运行的时间吗?例如:code
$i=0;而(1){sleep($i);$i++},如果一个回合运行超过5秒,则中断它并继续循环…不使用线程有点棘手。您可以尝试使用set\u time\u limit()
在您的函数中,因为它支持本地作用域。如果这对您不起作用,那么您就倒霉了。请注意,sleep函数不会计入时间限制,因此您需要其他不带sleep的测试场景。