我尝试执行以下 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
并chown
允许使用执行脚本chmod
,但我不知道这是否有必要。