
我嘗試執行以下 PHP 命令來從 eth0 取得 IP 位址。
$ip = trim(shell_exec("/sbin/ifconfig eth0 | grep -i 'inet Adresse:' | tr ':' ' ' | awk '{ print $3 }'"));
但我什麼也沒得到。如果我透過 ssh 執行完全相同的命令,那麼我會獲得 IP,因此該命令應該可以工作。
我打開visudo
並添加這些行並在其後重新啟動 apache2
www-data ALL = NOPASSWD: /sbin/ifconfig
www-data ALL = NOPASSWD: /bin/grep
www-data ALL = NOPASSWD: /usr/bin/awk
www-data ALL = NOPASSWD: /usr/bin/tr
但我還是一無所獲
答案1
您的 grep 模式似乎與 的輸出不匹配ifconfig
,因此grep
沒有產生輸出,請嘗試:
$ip = trim(shell_exec("/sbin/ifconfig eth0 | grep -i 'inet Adresse:' | awk '{ print $2 }'"));
答案2
我找到了解決方案。這是因為shell_exec
即使作業系統設定為德語,總是會得到英語輸出,如果你執行,shell_exec("/sbin/ifconfig")
那麼你總是會得到eginet addr
而不是inet Adresse
在輸出中。
我還忘記將文件的使用者和群組更改為www-data
withchown
並允許使用 執行腳本chmod
,但我不知道這是否有必要。