次のように、Symfony Process コンポーネントに依存する Laravel を使用してプロセスを実行しています。
$process= new Process(['binary', $param1, $param2]);
$process->setTimeout(3600);
$process->run();
パラメータにシェルによって解釈される特殊文字が含まれている場合を除いて、正常に機能します。
プロセスをシェルで直接実行すると、まったく同じ問題が発生します。
パラメータを単純な引用符で囲んでエスケープすると、うまく機能します。
したがって、問題は Process コンポーネントがパラメーターをエスケープする方法にあるようです。
Symfony 5 以降、Process コンポーネントはコンストラクターのパラメーターとして文字列を受け入れなくなりました
したがって、次のようにパラメーターをエスケープできません
new Process("binary '".$param1."' '".$param2."'");
私の意見では、Process コンポーネントはパラメーターを正しくエスケープする必要がありますが、明らかにそうではありません。
特殊文字が正しくエスケープされない理由を知っている人はいますか? ユーザー名とパスワードの両方を単純な引用符で囲むにはどうすればよいですか?