[英]How can I execute an external program without php script interrupt
例如:
//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打断,所以我怎么能得到输出? 任何帮助表示赞赏。
您可以通过多种方式实现此目标:
使用&
运行后台进程:
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这里...
要在PHP中执行异步处理,您可能希望使用Gearman或beanstalkd之类的东西
让一个“永无止境”的循环运行永远不是一个好主意。 如果您需要经常运行特定任务,请考虑使用服务器操作系统提供的Cron作业,而不是PHP的实际部分。
此外,如果PHP代码的一部分需要大量时间来执行,那么您应该更改设计方法以将作业排入数据库并让外部Job Scheduler处理它。
请查看此帖子了解更多详情。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.