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); 只能換種方式了,這種方式比較的保守
相關文章
相關標籤/搜索