源代码:php
在网上也搜索了答案node
比较详细的答案是:linux
<?phpnginx
exec("lsof -i:80",$out,$status);shell
结果:数组
var_dump($out);安全
array(0) { }dom
echo $status;值为127函数
二、经过:shell_exec("id -a");查看一下用户以及用户组ui
<?php
echo shell_exec("id -a");
结果:uid=1002(www) gid=1002(www) groups=1002(www)
三、登陆Linux给www用户赋予root级别的权限试一试看
修改/etc/sudoers文件
root ALL=(ALL) ALL
下面增长一行
www ALL=(ALL) ALL
修改后执行php,结果没意义,返回的数组依然为空array(0) { }
四、修改权限没有效果,网上查询说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)"
}
_______________________________________________________________________________________________________
linux 配置状况:
php.ini 配置文件我没有禁用exec()函数 安全模式 也是false
/etc/sudoers 文件也配置了
结果依旧没有生效 真的很悲剧啊
为此我作了个实验
证实上面个人配置是正确的!!!!
系统的命令就不须要加全路径 通常放在/usr/bin/ 下面的命令
但问题仍是来了 which php 始终返回不了值????????
exec("/usr/local/node/bin/node -v 2>&1", $out, $status); 只能换种方式了,这种方式比较的保守