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.