Seu padrão grep parece não corresponder à saída de 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 }'"));
Eu 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 eu não recebo nada de volta. Se eu executar exatamente o mesmo comando via ssh, então eu obtenho o IP, então o comando deve funcionar.
Eu abri visudo
e adicionei essas linhas e reiniciei o apache2 depois
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
Seu padrão grep parece não corresponder à saída de 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 }'"));
Eu encontrei a solução. É porque shell_exec
sempre obtém uma saída em inglês, mesmo se o sistema operacional estiver definido como alemão, se você executar shell_exec("/sbin/ifconfig")
, você 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
com chown
e, para permitir a execução do script com chmod
, não sei se isso é necessário.