PHP shell_exec() vs exec()

Sto lottando per capire la differenza tra shell_exec() e exec()...

Ho sempre usato exec() per eseguire comandi lato server, quando dovrei usare shell_exec()?

È shell_exec() solo un'abbreviazione di exec()? Sembra essere la stessa cosa con meno parametri.

Soluzione

shell_exec restituisce tutto il flusso di output come una stringa. exec restituisce l'ultima riga dell'output per impostazione predefinita, ma può fornire tutto l'output come un array specificato come secondo parametro.

Vedere

Commentari (2)

Ecco le differenze. Notate le newline alla fine.

> shell_exec('date')
string(29) "Wed Mar  6 14:18:08 PST 2013\n"
> exec('date')
string(28) "Wed Mar  6 14:18:12 PST 2013"

> shell_exec('whoami')
string(9) "mark\n"
> exec('whoami')
string(8) "mark"

> shell_exec('ifconfig')
string(1244) "eth0      Link encap:Ethernet  HWaddr 10:bf:44:44:22:33  \n          inet addr:192.168.0.90  Bcast:192.168.0.255  Mask:255.255.255.0\n          inet6 addr: fe80::12bf:ffff:eeee:2222/64 Scope:Link\n          UP BROADCAST RUNNING MULTICAST  MTU:1500  Metric:1\n          RX packets:16264200 errors:0 dropped:1 overruns:0 frame:0\n          TX packets:7205647 errors:0 dropped:0 overruns:0 carrier:0\n          collisions:0 txqueuelen:1000 \n          RX bytes:13151177627 (13.1 GB)  TX bytes:2779457335 (2.7 GB)\n"...
> exec('ifconfig')
string(0) ""

Notate che l'uso dell'operatore backtick è identico a shell_exec().

Aggiornamento: Dovrei davvero spiegare quest'ultimo. Guardando questa risposta a distanza di anni non so nemmeno io perché sia uscita in bianco! Daniel lo spiega sopra -- è perché exec restituisce solo l'ultima linea, e l'ultima linea di ifconfig è vuota.

Commentari (3)

shell_exec - Esegue il comando tramite shell e restituisce l'output completo come stringa

exec - Esegue un programma esterno.

La differenza è che con shell_exec si ottiene l'output come valore di ritorno.

Commentari (1)