Un paio di distinzioni che non sono stati toccati qui:
- con exec(), è possibile passare una variabile param opzionale che riceveranno una serie di linee di uscita. In alcuni casi ciò potrebbe far risparmiare tempo, specialmente se l'output dei comandi è già tabellare.
Confronta:
exec('ls', $out);
var_dump($out);
// Look an array
$out = shell_exec('ls');
var_dump($out);
// Look -- a string with newlines in it
Al contrario, se l'output del comando è XML o JSON, allora avere ogni riga come parte di un array non è ciò che si vuole, come avrete bisogno di inviare -elaborare l'input in qualche altro modulo, quindi in questo caso utilizzare shell_exec.
Vale anche la pena sottolineare che shell_exec è un alias per l'operatore di retromarcia, per quelli usati per * nix.
$out = `ls`;
var_dump($out);
exec supporta anche un parametro aggiuntivo che fornirà il codice di ritorno dal comando eseguito:
exec('ls', $out, $status);
if (0 === $status) {
var_dump($out);
} else {
echo "Command failed with status: $status";
}
Come indicato nella pagina di manuale shell_exec, quando in realtà bisogno di un codice di ritorno dal comando di essere eseguito, non hai altra scelta che usare exec.
Un buon esempio per vedere le differenze è provare questi comandi: 'date',' whoami', 'ifconfig',' netstat'. –
Ci sono anche altre funzioni: system(), passthru() ... vedi questa [domanda correlata] (https://stackoverflow.com/questions/732832/php-exec-vs-system-vs-passthru), e in particolare [questa risposta] (https://stackoverflow.com/questions/732832/php-exec-vs-system-vs-passthru#21016100). –
Possibile duplicato di [PHP exec() vs system() vs passthru()] (https://stackoverflow.com/questions/732832/php-exec-vs-system-vs-passthru) – jww