Algumas distinções que não foram mencionadas aqui:
- Com exec (), você pode passar uma variável param opcional que receberá uma matriz de linhas de saída. Em alguns casos, isso pode economizar tempo, especialmente se a saída dos comandos já for tabular.
Comparar:
exec('ls', $out);
var_dump($out);
// Look an array
$out = shell_exec('ls');
var_dump($out);
// Look -- a string with newlines in it
Por outro lado, se a saída do comando for xml ou json, ter cada linha como parte de uma matriz não é o que você deseja, pois será necessário pós-processar a entrada em algum outro formato, portanto, nesse caso, use shell_exec .
Também vale ressaltar que shell_exec é um alias para o operador backtic, para aqueles que costumavam * nix.
$out = `ls`;
var_dump($out);
exec também suporta um parâmetro adicional que fornecerá o código de retorno do comando executado:
exec('ls', $out, $status);
if (0 === $status) {
var_dump($out);
} else {
echo "Command failed with status: $status";
}
Conforme observado na página de manual do shell_exec, quando você realmente requer um código de retorno do comando que está sendo executado, você não tem escolha a não ser usar exec.
date
,whoami
,ifconfig
,netstat
.