Php shell_exec()在后台执行命令

Php shell_exec()在后台执行命令,php,windows,shell-exec,Php,Windows,Shell Exec,在Linux上,我可以使用下面的shell\u exec()在后台运行该命令: shell_exec("/usr/bin/nohup curl -o /dev/null --data \"$data\" $url >/dev/null 2>&1 &"); 请注意,上面的行不会等待结果,代码将立即恢复 如何在windows上实现它?最好是windows的内置组件。我想看看这个用例的Symfony进程组件。它提供了同步和异步执行的方法。它可以通过Composer轻松安装

在Linux上,我可以使用下面的
shell\u exec()
后台运行该命令:

shell_exec("/usr/bin/nohup curl -o /dev/null --data \"$data\" $url >/dev/null 2>&1 &");
请注意,上面的行不会等待结果,代码将立即恢复


如何在windows上实现它?最好是windows的内置组件。

我想看看这个用例的Symfony进程组件。它提供了同步和异步执行的方法。它可以通过Composer轻松安装,但至少需要PHP7.1。
文档可在此处找到:

您的用例示例如下所示:

$process = new Process(['curl', '--data', $data, $url]);
$process->start();
请注意,我省略了
-o
选项,因为除非您明确请求,否则子进程的输出不会显示。 快速浏览产生了一些帖子,其中说
start()
方法在Windows上被阻止,但似乎已经实现并合并了一个补丁:

编辑:如果不想使用库,可以结合使用
popen()
pclose()
和Windows工具
start

pclose(popen('start /B curl --data "'.$data.'" '.$url, 'r'));
这将在后台运行程序,而不打开窗口,并立即返回


编辑2:使用
开始/B的技巧的源代码:

如果您只需删除/usr/bin/nohup部分,就可以在windows上执行相同的操作。这在windows上不是必需的,因为当父进程被终止时进程不会退出。@Xatenev在我的编辑中我注意到我不想等待结果我更喜欢内置的东西,PHP版本5.6请查看我的编辑。关于您的PHP版本(有点离题):PHP5.6将在今年年底下线,不会再收到任何安全更新。所以你应该尽快研究更新。但我编辑的解决方案也适用于5.6:)popen需要第二个参数模式。我认为在这种情况下,要么值
'r'
要么值
'w'
。谢谢你的提醒。我会考虑的。哦,是的,当然。对不起,我从测试文件复制时出错了。我想
'r'
最好是从过程中获取错误或其他东西,以防您需要,但两者都应该按照您所说的那样工作。