Пара различий, которые здесь не затрагивались:
- С помощью exec () вы можете передать необязательную переменную param, которая получит массив выходных строк.В некоторых случаях это может сэкономить время, особенно если выходные данные команд уже являются табличными.
Сравнение:
exec('ls', $out);
var_dump($out);
// Look an array
$out = shell_exec('ls');
var_dump($out);
// Look -- a string with newlines in it
И наоборот, если выходные данные команды имеют формат xml илиjson, тогда каждая строка как часть массива - это не то, что вам нужно, так как вам нужно будет постобработать ввод в какую-то другую форму, поэтому в этом случае используйте shell_exec.
Также стоит указатьиз-за того, что shell_exec является псевдонимом для оператора backtic, для тех, которые используются для * nix.
$out = `ls`;
var_dump($out);
exec также поддерживает дополнительный параметр, который предоставит код возврата от выполненной команды:
exec('ls', $out, $status);
if (0 === $status) {
var_dump($out);
} else {
echo "Command failed with status: $status";
}
Как отмечалось на странице справки shell_exec, когда вам действительно требуется код возврата от выполняемой команды, у вас нет другого выбора, кроме как использовать exec.