我正在將舊的 Symfony 應用程式 (v2.8) 升級到 Symfony 5.3。我正在使用 process 組件,其中必須以不同于以前的方式傳遞引數。
我以前的代碼就像
use Symfony\Component\Process\Process;
$cmd = sprintf('mysqldump mydatabase > %s', $outputTarget);
$process = new Process($cmd);
$process->run();
現在,Symfony 的 Process 建構式期望二進制檔案和引數作為陣列傳遞(參見此處)。
如何使用新樣式實作輸出重定向?
$process = new Process(['mysqldump', 'mydatabase', '>', $outputTarget]);
$process->run();
不會作業,因為>會被逃脫。
uj5u.com熱心網友回復:
我找到了一種解決方法。Process::fromShellCommandline可用于重定向輸出。這是我的解決方案:
$process = Process::fromShellCommandline('mysqldump mydatabase > "$OUTPUT_TARGET"');
$process->start(null, [
'OUTPUT_TARGET' => $outputTarget,
]);
這樣,引數作為環境變數傳遞給行程,作業系統(或外殼?)負責用 env 替換命令的占位符。
轉載請註明出處,本文鏈接:https://www.uj5u.com/qianduan/371975.html
標籤:php symfony symfony5 symfony 进程
