
Tento executar o seguinte comando PHP para obter o endereço IP da eth0.
$ip = trim(shell_exec("/sbin/ifconfig eth0 | grep -i 'inet Adresse:' | tr ':' ' ' | awk '{ print $3 }'"));
Mas não recebo nada em troca. Se eu executar exatamente o mesmo comando via ssh, recebo o IP, então o comando deve funcionar.
Eu abri visudo
e adicionei essas linhas e reiniciei o apache2 depois disso
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
Mas ainda não recebo nada de volta
Responder1
Seu padrão grep parece não corresponder à saída ifconfig
e, portanto, grep
não está produzindo saída, tente:
$ip = trim(shell_exec("/sbin/ifconfig eth0 | grep -i 'inet Adresse:' | awk '{ print $2 }'"));
Responder2
Eu encontrei a solução. É porque shell_exec
sempre obtém uma saída em inglês, mesmo que o sistema operacional esteja configurado para alemão, se você executar, shell_exec("/sbin/ifconfig")
sempre obterá, por exemplo, inet addr
em vez de inet Adresse
na saída.
Também esqueci de alterar o usuário e o grupo do meu arquivo para www-data
with chown
e permitir a execução do script with chmod
, mas não sei se isso é necessário.