Laravel 拉威尔过程参数逃逸

Laravel 拉威尔过程参数逃逸,laravel,shell,process,escaping,symfony-process,Laravel,Shell,Process,Escaping,Symfony Process,我正在使用Laravel运行一个进程,它依赖于Symfony进程组件,如下所示 $process= new Process(['binary', $param1, $param2]); $process->setTimeout(3600); $process->run(); 它工作正常,除非参数包含由shell解释的特殊字符 当我直接在shell中运行我的进程时,我遇到了完全相同的问题 如果我用简单的引号来转义参数,效果会很好 因此,问题似乎来自流程组件如何逃逸参数 $comman

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

$process= new Process(['binary', $param1, $param2]);
$process->setTimeout(3600);
$process->run();
它工作正常,除非参数包含由shell解释的特殊字符

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

如果我用简单的引号来转义参数,效果会很好

因此,问题似乎来自流程组件如何逃逸参数

$command = "binary '".$param1."' '".$param2."'";
$process = Process::fromShellCommandline($command);
$process->setTimeout(3600);
$process->run();
自Symfony 5以来,流程组件不再接受字符串作为构造函数参数

所以我不能像下面那样逃避参数

new Process("binary '".$param1."' '".$param2."'");
在我看来,流程组件应该正确地转义参数,但情况显然不是这样

有人知道为什么特殊字符不能正确转义吗?
如何用简单的引号将用户名和密码括起来?

我通过使用
Process::fromShellCommandline

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

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

仍然不知道为什么使用带有
新进程的字符串数组不能正确转义特殊字符

使用反斜杠转义任何特殊字符,例如
“\?”
?您是否正在尝试执行命令
二进制用户名密码
?@clyconecode我本应该确定我计划使用变量未加工的字符串。问题是updated@IGP编校过程中字符串选择不当,这只是一个很小的示例,但我不打算在命令行上发送纯文本密码