微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

Laravel 进程参数转义

如何解决Laravel 进程参数转义

我正在使用 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 组件应该正确转义参数,但显然并非如此。

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

解决方法

我通过使用 Process::fromShellCommandline

实现了我的目标

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

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

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

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。