У меня есть PHP-скрипт, который должен выполнять программы, которые будут работать с файлами с пробелами в именах. Большинство функций PHP для выполнения внешних команд (например, exec()
) принимают 1 строковый аргумент для выполнения командной строки. Однако тогда вы должны сделать что-то вроде escapeshellarg()
, чтобы сделать ваш вход безопасным.Выполнение внешней команды путем передачи массива с пробелами в именах файлов
Есть ли способ выполнить внешнюю команду в PHP с массивом. Таким образом, вместо:
exec("ls -l ".escapeshellarg($filename));
Я могу пойти:
exec(array("ls", "-l", $filename));
Это означало бы, я не придется беспокоиться о побеге аргументы. Я хочу избежать использования escapeshellarg()
, так как версия, которую я использую, имеет ошибку, которая вырезает символы, отличные от ASCII.
Java эта функциональность http://java.sun.com/j2se/1.4.2/docs/api/java/lang/Runtime.html#exec%28java.lang.String[]%29
Я знаю, это очевидно, но для всех, кто приходит: НИКОГДА не запускайте внешние команды на основе пользовательского ввода. Если скрипт не находится на каком-либо веб-сервере, отлично, но в противном случае убедитесь, что вы проверяете, проверяете и проверяете еще 5 раз, что никто не может использовать этот скрипт для выполнения любой команды, которой они не должны. – Matchu