Un par de distinciones que no se han tocado aquí:
- Con exec(), puede pasar una variable de parámetro opcional que recibirá una serie de líneas de salida. En algunos casos, esto podría ahorrar tiempo, especialmente si el resultado de los comandos ya es tabular.
Compare:
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, y luego tener cada línea como parte de un array no es lo que quiere, ya que necesitará para publicar -procesar la entrada en alguna otra forma, entonces en ese caso use shell_exec.
También vale la pena señalar que shell_exec es un alias para el operador de la parte posterior, para aquellos que utilizan * nix.
$out = `ls`;
var_dump($out);
ejecutivo también es compatible con 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 indica en la página del manual shell_exec, cuando realmente se necesita un código de retorno del comando siendo ejecutado, no tiene más remedio que utilizar el ejecutivo.
buen ejemplo para ver las diferencias es probar estos comandos: 'date',' whoami', 'ifconfig',' netstat'. –
También hay otras funciones: system(), passthru() ... vea esta [pregunta relacionada] (https://stackoverflow.com/questions/732832/php-exec-vs-system-vs-passthru), y en particular [esta respuesta] (https://stackoverflow.com/questions/732832/php-exec-vs-system-vs-passthru#21016100). –
Posible duplicado de [PHP exec() vs system() vs passthru()] (https://stackoverflow.com/questions/732832/php-exec-vs-system-vs-passthru) – jww