从另一个php页面启动运行php文件作为背景的后台进程

时间:2010-05-18 06:22:46

标签: php

我想从另一个php页面启动一个php页面作为后台进程。

3 个答案:

答案 0 :(得分:3)

使用popen()

$command = 'php somefile.php';
pclose(popen($command,'r'));

这会启动somefile.php作为后台流程。

答案 1 :(得分:2)

这是我用来绕过我的webhost限制的技术(将cronjobs限制为15分钟的执行时间,因此我的备份脚本总是超时)。

exec( 'php somefile.php | /dev/null &' );

这一行的细分是:

  • exec() - PHP reference运行指定的命令,就像从Linux命令行运行一样。
  • php somefile.php:调用PHP打开并运行 somefile.php 。这与通过Web浏览器访问该文件时会发生的行为相同。
  • |(“pipe”) - 将前进命令的输出发送到指定目标。在这种情况下,它将“管道”通常由访问该文件的Web浏览器读取的内容。
  • /dev/null - 一个黑洞。不,不是在开玩笑。如果您只想让它消失,那么这是您发送输出的地方。
  • & - 将此字符附加到Linux命令的末尾意味着“不要等待 - 将其发送到后台并继续。”

因此,总而言之,提供的代码将执行PHP脚本,不返回任何输出,并且在继续下一行之前不等待它完成。

而且,和往常一样,如果我这些假设中的任何一个都是错误的,我很乐意被更多知识渊博的社区成员纠正。

答案 2 :(得分:0)

您必须确保在完成页面处理时不终止后台进程。如果您使用的是Linux系统,则可以尝试使用nohup命令:

$command = 'nohup php somefile.php';
pclose(popen($command,'r'));

如果它仍然被终止,你可以尝试“守护进程”命令。