Ik heb moeite om het verschil tussen shell_exec()
en exec()
te begrijpen...
Ik'heb altijd exec()
gebruikt om server side commando's uit te voeren, wanneer zou ik shell_exec()
gebruiken?
Is shell_exec()
gewoon een afkorting voor exec()
? Het lijkt hetzelfde te zijn met minder parameters.
shell_exec
retourneert de gehele uitvoer als een string. exec
retourneert standaard de laatste regel van de uitvoer, maar kan alle uitvoer als een array opgeven als de tweede parameter.
Zie
Hier zijn de verschillen. Let op de nieuwe regels aan het eind.
> 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) ""
Merk op dat het gebruik van de backtick operator identiek is aan shell_exec()
.
Update: Dat laatste zou ik echt moeten uitleggen. Als ik jaren later naar dit antwoord kijk, weet ik zelfs niet'waarom dat er blanco uitkwam! Daniel legt het hierboven uit -- het'is omdat exec
alleen de laatste regel teruggeeft, en ifconfig
's laatste regel is toevallig blanco.
shell_exec
- Voer commando uit via shell en stuur de volledige uitvoer terug als een string
exec
- Een extern programma uitvoeren.
Het verschil is dat je met shell_exec
uitvoer als waarde terugkrijgt.