Un par de distinciones que no se mencionaron aquí:
- Con exec (), puede pasar una variable param opcional que recibirá una matriz de líneas de salida. En algunos casos, esto puede ahorrar tiempo, especialmente si la salida de los comandos ya es 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 el contrario, si la salida del comando es xml o json, entonces tener cada línea como parte de una matriz no es lo que desea, ya que deberá procesar posteriormente la entrada en otra forma, por lo que en ese caso use shell_exec .
También vale la pena señalar que shell_exec es un alias para el operador backtic, para aquellos que se usan para * nix.
$out = `ls`;
var_dump($out);
exec también admite un parámetro adicional que proporcionará el código de retorno del comando ejecutado:
exec('ls', $out, $status);
if (0 === $status) {
var_dump($out);
} else {
echo "Command failed with status: $status";
}
Como se señaló en la página del manual shell_exec, cuando realmente necesita un código de retorno del comando que se está ejecutando, no tiene más remedio que usar exec.
date
,whoami
,ifconfig
,netstat
.