exec()函数问题

源代码: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); 只能换种方式了,这种方式比较的保守
相关文章
相关标签/搜索