Кілька відмінностей, які тут не торкалися:
- За допомогою exec () ви можете передавати необов'язкові параметри змінної, які отримають масив вихідних рядків. У деяких випадках це може заощадити час, особливо якщо результат команд вже є табличним.
Порівняйте:
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
.