如何从另一个php脚本执行


How to execute a php script from another?

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

我想在不等待3个脚本完成的情况下,从我的php文件中执行3个php脚本。换句话说,这3个php文件需要同时执行(并行),而不是逐个执行(sequentiell)。

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

如果您不想等待它们完成,请使用任一运行它们

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 SMS发送脚本,该脚本可能需要10分钟才能完成,它从未失败过。

更多信息请访问:http://php.net/exec·http://php.net/shell_exec·http://php.net/system

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

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

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

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

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

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

为了执行一个命令,让它在运行时不挂起你的php脚本,你运行的程序不能输出回php。要做到这一点,请将stdout和stderr重定向到/dev/null,然后后台处理

> /dev/null 2>&1 &

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

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

对于窗口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 &");   
    }
}

在shell_exec中添加'/B'参数,这样可以同时运行多个可执行文件。看看我对这个问题的回答:windows机器上的PHP;在后台中启动进程

这是一样的。

shell_exec("启动/B"C:''Path''to''program.exe")/B参数是关键在这里我试着再给你找个话题,但似乎找不到找到它了。这对我有用。

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