通过shell_exec()在后台执行命令

时间:2018-10-29 09:54:26

标签: php windows shell-exec

在Linux上,我可以如下使用SELECT LEN(LEFT(address, PATINDEX('%[A-Z]%', address)-1)) AS doorNoLength 后台中运行命令:

env: flex

请注意,以上行不会等待结果,并且代码将立即恢复。

如何在Windows上实现它?最好是Windows内置的东西。

1 个答案:

答案 0 :(得分:1)

我将针对此用例签出Symfony Process组件。它提供了用于同步和异步执行的方法。可以通过Composer轻松安装,但是至少需要PHP 7.1。
该文档可以在这里找到:https://symfony.com/doc/current/components/process.html

您的用例示例如下:

$process = new Process(['curl', '--data', $data, $url]);
$process->start();

请注意,我省略了-o选项,因为除非明确要求,否则子进程的输出不会显示。 快速浏览后发现,有一些帖子说Windows上的start()方法已被阻止,但似乎已经实施并合并了一个补丁程序:https://github.com/symfony/symfony/pull/10420

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

pclose(popen('start /B curl --data "'.$data.'" '.$url, 'r'));

这会在不打开窗口的情况下在后台运行程序并立即返回。

编辑2:带有start /B的技巧的来源:http://php.net/manual/en/function.exec.php#86329