源代碼: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); 只能換種方式了,這種方式比較的保守