0. 说明
在 php 中,我们可以使用 exec() 来执行系统命令,但有时我们会遇到 exec() 命令执行不成功,或者无返回的情况,下面来说明一下:
1. 函数
exec (string $command [, array &$output [, int &$return_var]] ) : string
参数说明:
1.$command 要执行的命令
2.$output 执行结果
3.$return_var 若同时设置 $output 和此变量,命令执行后的返回状态会被写入到此变量
2. 例子
exec(“ping www.baidu.com”, $output);
正常来说执行结果会跟在服务器上直接执行 ping 没区别,但是由于某些原因会导致意外情况,下边针对两种情况作出说明,以及解决办法
2.1 权限问题
问题
当我们在服务器上直接执行 linux 系统命令时(此处以 ping 为例),执行权限取决于我们登陆用户的权限,如果我们登陆用户为 root,则执行 ping 的时候是用 root 来执行。但当我们在网站上访问的时候,我们此时的用户为 www, 如果不修改 ping 的执行权限的话,是无法执行成功的。
解决
修改 ping 或者对应命令的执行权限
2.2 命令路径问题
问题
还有一种情况,当我们用 exec 执行某个命令时,不报错,也不返回结果,原因是此命令没有在 /usr/bin 目录下,以 ifconfig 为例,我们可以用 `whereis ifconfig, 找出此命令具体路径,比如路径在 /usr/sbin` 下,两种解决办法:
解决
1 复制命令到 /usr/bin 下 (不太推荐)2 直接将命令全路径补全 exec(‘/usr/sbin’,$output);(推荐)