-1

次のように、Symfony Process コンポーネントに依存する Laravel を使用してプロセスを実行しています。

$process= new Process(['binary', $param1, $param2]);
$process->setTimeout(3600);
$process->run();

パラメータにシェルによって解釈される特殊文字が含まれている場合を除いて、正常に機能します。

プロセスをシェルで直接実行すると、まったく同じ問題が発生します。

パラメータを単純な引用符で囲んでエスケープすると、うまく機能します。

したがって、問題は Process コンポーネントがパラメーターをエスケープする方法にあるようです。

Symfony 5 以降、Process コンポーネントはコンストラクターのパラメーターとして文字列を受け入れなくなりました

したがって、次のようにパラメーターをエスケープできません

new Process("binary '".$param1."' '".$param2."'");

私の意見では、Process コンポーネントはパラメーターを正しくエスケープする必要がありますが、明らかにそうではありません。

特殊文字が正しくエスケープされない理由を知っている人はいますか? ユーザー名とパスワードの両方を単純な引用符で囲むにはどうすればよいですか?

4

1 に答える 1

0

を使用して目標を達成しましたProcess::fromShellCommandline

コマンドを文字列に直接構成し、エスケープしたパラメーターを指定してコマンドを渡します。

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

文字列配列を使用して特殊文字が正しくエスケープされない理由はまだわかりませんnew Process

于 2021-05-24T13:59:50.287 に答える