exec()函数问题

源代码:

 

 

 

在网上也搜索了答案

比较详细的答案是:

 

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

 }

_______________________________________________________________________________________________________

linux 配置情况:

php.ini  配置文件我没有禁用exec()函数   安全模式 也是false

/etc/sudoers  文件也配置了

 

 

结果依旧没有生效  真的很悲剧啊

 

为此我做了个实验

 

 证明上面我的配置是正确的!!!!

系统的命令就不需要加全路径  一般放在/usr/bin/ 下面的命令  

但问题还是来了 which php 始终返回不了值????????

 

exec("/usr/local/node/bin/node -v 2>&1", $out, $status); 只能换种方式了,这种方式比较的保守

 

 

 

 

 

posted on 2020-02-01 09:39  PHP码农_ithua  阅读(527)  评论(0编辑  收藏  举报

导航