動的なコマンド文字列を作成し (perl スクリプトを呼び出し)、次のようにコマンドを実行する php スクリプトがあります。
$cmd_string = "perl $pushFile";
foreach($cmd_args AS $argName => $arg){
$cmd_string .= ' --' . $argName . '="' . $arg . '"';
}
$output = shell_exec('export PERL5LIB=/mnt/path/to/custom:$PERL5LIB && ' . $cmd_string . ' 2>&1');
一部の引数の補間が原因であると思われる失敗が発生しています。たとえば、引数の 1 つが '246+8GT>-' の場合、'246 8GT ' になり、文字列が終了していないというエラーが発生します。しかし、$cmd_string を画面に出力してコマンドラインから実行するか、コピーして $cmd_string 変数に貼り付けると、正しく実行されます。私は困惑しています。これらの引数が適切に渡されていることを確認するにはどうすればよいですか? 私はこれを試しました:
$output = shell_exec('export PERL5LIB=/mnt/path/to/custom:$PERL5LIB && ' . escapeshellcmd($cmd_string) . ' 2>&1');
しかし、同じ結果が得られます。ヘルプ?