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

如何从另一个脚本执行php脚本?,php,apache,exec,exe,Php,Apache,Exec,Exe,如何从另一个脚本执行php脚本 我想从我的php文件中执行3个php脚本,而不用等待3个脚本完成。换句话说,3个php文件需要一次执行(并行),而不是逐个执行(sequentiell) 这三个脚本都在我的主php文件(脚本)的同一文件夹中。使用exec(“php-yourscript.php”)怎么样 请考虑使用排队系统来存储PHP脚本名称和Word来从队列中获取数据,并执行例如< P>。如果您不想等待它们完成,请用“< /P>”运行它们。 exec('php script.php &&

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

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

这三个脚本都在我的主php文件(脚本)的同一文件夹中。

使用
exec(“php-yourscript.php”)怎么样


请考虑使用排队系统来存储PHP脚本名称和Word来从队列中获取数据,并执行例如

< P>。如果您不想等待它们完成,请用“< /P>”运行它们。
exec('php script.php &> /dev/null &');
shell_exec('php script.php &> /dev/null &');
system('php script.php &> /dev/null &');
`php script.php &> /dev/null &`
根据您的PHPs配置,其中任何一个都应该完成这项工作。虽然它们是不同的函数,但它们的行为应该是相似的,因为所有的输出都被重定向到/dev/null,并且进程被立即分离

我在生产环境中使用了第一个解决方案,客户机启动bash-SMSs发送脚本最多需要10分钟才能完成,它从未失败过


更多信息请参见:··

您需要将它们作为分离作业运行,这并不容易,也不便于移植。通常的解决方案是使用
nohup
或在stdout和stderr重定向到/dev/null(或Windows中的NUL)的情况下执行脚本,但这通常会出现问题

如果可能,将这三个脚本作为web服务器上的脚本提供,并通过异步cURL函数访问它们。这还有一个优点,即可以通过浏览器测试脚本,并向您提供脚本输出

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

取自:

为了使命令在运行时不挂起php脚本,您运行的程序不得输出回php。为此,将stdout和stderr重定向到/dev/null,然后将其置于后台

为了执行命令并使其作为另一个不依赖apache线程的进程继续运行(如果有人取消页面,则不会死亡),请运行以下命令:

对于windows:


在shell_exec中,添加“/B”参数,这允许您同时运行多个可执行文件。 请看我对这个问题的回答:

都一样

shell_exec('start/B“C:\Path\to\program.exe”)/B参数是关键 在这里我又试着为你找到这个话题,但似乎找不到 再也找不到了。这对我有用


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

可能重复:这将等待脚本完成,然后再开始下一个脚本。@Kolink更新了答案。。使用队列存储并使用其他工作进程运行。这总是一个很好的方法。@faressoft我的示例中的每一行都按预期工作,只是尝试了一下,您的服务器设置有一个问题,现在与这里的问题和答案无关。
> /dev/null 2>&1 &
exec('bash -c "exec nohup setsid your_command > /dev/null 2>&1 &"');
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 &");   
    }
}