PHP shell_exec() vs exec()

2022-08-30 05:56:51

我正在努力理解和之间的区别...shell_exec()exec()

我一直习惯于执行服务器端命令,我什么时候会使用?exec()shell_exec()

只是 ?它似乎是同一回事,参数更少。shell_exec()exec()


答案 1

shell_exec将所有输出流作为字符串返回。 默认情况下返回输出的最后一行,但可以将所有输出作为指定为第二个参数的数组提供。exec


答案 2

以下是差异。请注意末尾的换行符。

> 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) ""

请注意,反引号运算符的使用与 shell_exec() 相同

更新:我真的应该解释最后一个。几年后看着这个答案,甚至我不知道为什么会一片空白!丹尼尔在上面解释了它 - 这是因为只返回最后一行,而的最后一行恰好是空白的。execifconfig


推荐