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.
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
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.
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.