PHP开发实例大全(提高卷) 中文完整pdf扫描版[244MB]
php中可以通过类似exec()系列函数执行Linux中的命令,但是测试时发现,有的命令无法执行。
可能原因是用户权限
1、实例:
通过exec函数查看Linux服务器80端口占用情况,可是返回值为空,exec()函数和Linux的"lsof -i:80"命令都没问题。那很有可能就是执行此php脚本的用户权限问题。
<?php
exec("lsof -i:80",$out,$status);
结果:
var_dump($out);
array(0) { }
echo $status;值为127
2、通过:shell_exec("id -a");查看一下用户以及用户组
<?php
echo shell_exec("id -a");
结果:uid=1002(www) gid=1002(www) groups=1002(www)
3、登录Linux给www用户赋予root级别的权限试一试看
修改/etc/sudoers文件
root ALL=(ALL) ALL
下面增加一行
www ALL=(ALL) ALL
修改后执行php,结果没意义,返回的数组依然为空array(0) { }
4、修改权限没有效果,网上查询说exec第三个参数返回127可能还与路径有关系,那么从路径方面着手试一试
exec("whereis lsof", $out);
var_dump($out);
结果:
array(1) { [0]=> string(50) "lsof: /usr/sbin/lsof /usr/share/man/man8/lsof.8.gz" }
lsof命令所在文件路径: /usr/sbin/lsof
所以把 exec("lsof -i:80",$out1,$status);修改为exec("/usr/sbin/lsof -i:80",$out1,$status);
var_dump($out1);
结果成功执行了
返回结果如下:
array(6) {
[0]=> string(56) "COMMAND PID USER FD TYPE DEVICE SIZE/OFF NODE NAME"
[1]=> string(67) "nginx 31706 www 6u IPv4 165987 0t0 TCP *:http (LISTEN)"
[2]=> string(67) "nginx 31707 www 6u IPv4 165987 0t0 TCP *:http (LISTEN)"
[3]=> string(113) "nginx 31707 www 12u IPv4 232481 0t0 TCP localhost.localdomain:http->192.168.204.1:55893 (ESTABLISHED)"
[4]=> string(67) "nginx 31708 www 6u IPv4 165987 0t0 TCP *:http (LISTEN)"
[5]=> string(67) "nginx 31709 www 6u IPv4 165987 0t0 TCP *:http (LISTEN)"
}
转载请注明:谷谷点程序 » php中exec执行部分linux命令返回空数组