Пара различий, которые не были затронуты здесь:
- С помощью 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.
date
,whoami
,ifconfig
,netstat
.