nai*_*rch 4 php symfony symfony-process symfony5
我正在将旧的 Symfony 应用程序 (v2.8) 升级到 Symfony 5.3。我正在使用进程组件,其中参数必须以不同于以前的方式传递。
我以前的代码就像
use Symfony\Component\Process\Process;
$cmd = sprintf('mysqldump mydatabase > %s', $outputTarget);
$process = new Process($cmd);
$process->run();
Run Code Online (Sandbox Code Playgroud)
现在,Symfony 的 Process 构造函数期望将二进制文件和参数作为数组传递(请参阅此处)。
如何实现新样式的输出重定向?
$process = new Process(['mysqldump', 'mydatabase', '>', $outputTarget]);
$process->run();
Run Code Online (Sandbox Code Playgroud)
不会起作用,因为>会被转义。
我找到了一个解决方法。Process::fromShellCommandline可用于重定向输出。这是我的解决方案:
$process = Process::fromShellCommandline('mysqldump mydatabase > "$OUTPUT_TARGET"');
$process->start(null, [
'OUTPUT_TARGET' => $outputTarget,
]);
Run Code Online (Sandbox Code Playgroud)
这样,参数就会作为环境变量传递给进程,操作系统(或 shell?)会负责用 env 替换命令的占位符。
| 归档时间: |
|
| 查看次数: |
1563 次 |
| 最近记录: |