例如:
//test.php
#! /usr/local/php/bin/php
<?php
exec('nohup ./loop.php > loop.out');
echo 'I am a superman!';
//loop.php
#! /usr/local/php/bin/php
<?php
$count = 0;
while (true) {
echo "Loop count:{$count}\n";
$count++;
}
当我运行./test.php时我无法得到输出'我是超人!',因为你知道loop.php是一个无限循环,test.php被loop.php打断,所以我怎么能得到输出?任何帮助表示赞赏。
答案 0 :(得分:3)
有很多方法可以实现这一目标:
使用&
运行后台流程:
exec('nohup ./loop.php > loop.out 2>&1 &');
使用pcntl_fork
并从子级运行您的进程:
$pid = pcntl_fork();
switch ($pid){
case -1:
die('Fork failed');
break;
case 0:
exec('nohup ./loop.php > loop.out');
exit();
default:
break;
}
echo "I'm not really a superman, just a parent process';
有更多方法可以做到这一点,只是潜入PHP文档和php中的问题......
答案 1 :(得分:2)
要在PHP中执行异步处理,您可能希望使用Gearman或beanstalkd
之类的内容答案 2 :(得分:0)
让一个“永无止境”的循环运行永远不是一个好主意。如果您需要经常运行特定任务,请考虑使用服务器操作系统提供的Cron作业,而不是实际上是PHP的一部分。
此外,如果您的PHP代码的一部分需要大量时间来执行,那么您应该更改您的设计方法以将作业排入数据库并让外部Job Scheduler处理它。
查看this帖子了解更多详情。