-1

我正在使用 Laravel 运行一个进程,它依赖于 Symfony Process 组件,如下所示。

$process= new Process(['binary', $param1, $param2]);
$process->setTimeout(3600);
$process->run();

它可以正常工作,除非参数包含由 shell 解释的特殊字符。

当我直接在 shell 中运行我的进程时,我遇到了完全相同的问题。

如果我通过用简单的引号将参数括起来来转义参数,则效果很好。

因此,问题似乎来自 Process 组件如何转义参数。

从 Symfony 5 开始,Process 组件不再接受字符串作为构造函数参数

所以我不能转义参数如下

new Process("binary '".$param1."' '".$param2."'");

在我看来, Process 组件应该正确地转义参数,但显然不是这样。

有谁知道为什么特殊字符没有正确转义?我怎么能用简单的引号括住用户名和密码?

4

1 回答 1

0

我通过使用实现了我的目标Process::fromShellCommandline

我直接将命令组合成一个字符串,然后使用转义参数传递命令。

$command = "binary '".$param1."' '".$param2."'";
$process = Process::fromShellCommandline($command);
$process->setTimeout(3600);
$process->run();

仍然不知道为什么特殊字符没有正确使用字符串数组转义new Process

于 2021-05-24T13:59:50.287 回答