如何从另一个执行PHP脚本?

时间:2012-08-24 21:58:40

标签: php apache exec exe

如何从另一个执行php脚本?

我想从我的php文件中执行3个PHP脚本,而无需等待3个脚本完成。换句话说,3个php文件需要一次执行(并行)而不是一个一个(sequentiell)。

3个脚本位于我的主要php文件(脚本)的同一个文件夹中。

5 个答案:

答案 0 :(得分:2)

如果您不想等待它们完成,请使用

运行它们
exec('php script.php &> /dev/null &');
shell_exec('php script.php &> /dev/null &');
system('php script.php &> /dev/null &');
`php script.php &> /dev/null &`

任何这些都应该完成这项工作,具体取决于您的PHP配置。虽然它们是不同的函数,但它们的行为应该是相似的,因为所有输出都被重定向到/ dev / null并且proccess立即被分离。

我在生产环境中使用第一个解决方案,其中客户端启动bash SMS发送脚本,该脚本最多可能需要10分钟才能完成,但它从未失败。

更多信息请参阅:http://php.net/exec·http://php.net/shell_exec·http://php.net/system

答案 1 :(得分:0)

如何使用exec("php yourscript.php")

考虑使用排队系统来存储你的php脚本名称和worker来从队列中获取数据并执行例如执行beanstalkd

答案 2 :(得分:0)

您需要将它们作为分离的作业运行,并且它并不容易 - 或者是便携式的。通常的解决方案是使用nohup或执行脚本,将stdout和stderr重定向到/ dev / null(或Windows中的NUL),但这通常会有问题。

如果可能,请将三个脚本作为Web服务器上的脚本提供,并通过异步 cURL函数访问它们。这样做的另一个好处是能够通过浏览器测试脚本,并为您提供脚本输出。

其他方式包括使用popen(),或者在Linux下使用atbatch实用程序。

答案 3 :(得分:0)

取自http://board.phpbuilder.com/showthread.php?10351142-How-can-I-exec%28%29-in-a-non-blocking-fashion

  

为了执行命令让它在运行时不挂起你的php脚本,你运行的程序不能输出回php。为此,将stdout和stderr重定向到/ dev / null,然后将其背景化。

> /dev/null 2>&1 &
  

为了执行命令并将其作为另一个不依赖于apache线程继续运行的进程(如果某人取消该页面将不会死亡)而产生,请运行:

exec('bash -c "exec nohup setsid your_command > /dev/null 2>&1 &"');

对于Windows http://www.php.net/manual/en/function.exec.php

function execInBackground($path, $exe, $args = "") {
global $conf;

if (file_exists($path . $exe)) {
    chdir($path);
    if (substr(php_uname(), 0, 7) == "Windows"){
        pclose(popen("start \"bla\" \"" . $exe . "\" " . escapeshellarg($args), "r"));   
    } else {
        exec("./" . $exe . " " . escapeshellarg($args) . " > /dev/null &");   
    }
}

答案 4 :(得分:0)

对于shell_exec,添加'/ B'参数,这允许您一次运行多个可执行文件。 请参阅此问题的答案:PHP on a windows machine; Start process in background

它是一样的。

  

shell_exec('start / B“C:\ Path \ to \ program.exe”); / B参数是关键   这里。我试图再次找到你的主题,但我似乎无法   找到它了。这对我有用。

我希望这能为您解决问题。