интерполяция php shell_exec()

У меня есть php-скрипт, который создает динамическую командную строку (вызывает perl-скрипт), а затем выполняет команду, например:

    $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');

Я получаю сбои, которые, как мне кажется, вызваны интерполяцией некоторых аргументов. Например, если один из аргументов «246+8GT>-», он превращается в «246 8GT» и возникает ошибка, что строка не завершена. Но если я выведу на экран $cmd_string_r и выполню его через командную строку или скопирую/вставлю в переменную $cmd_string, он будет выполнен правильно. Я в тупике. Как я могу убедиться, что эти аргументы передаются правильно? Я пробовал это:

    $output = shell_exec('export PERL5LIB=/mnt/path/to/custom:$PERL5LIB  && ' . escapeshellcmd($cmd_string) . ' 2>&1');

но получить тот же результат. Помощь?


person Julie    schedule 01.11.2013    source источник


Ответы (1)


Вы экранируете строку команд после того, как она была построена.

Попробуй это:

$cmd_string = "perl $pushFile";
foreach($cmd_args AS $argName => $arg){
    $cmd_string .= ' --' . $argName . '="' . escapeshellarg($arg) . '"';
}
$output = shell_exec('export PERL5LIB=/mnt/path/to/custom:$PERL5LIB  && ' . $cmd_string . ' 2>&1');
person Latheesan    schedule 01.11.2013