
Intento ejecutar el siguiente comando PHP para obtener la dirección IP de eth0.
$ip = trim(shell_exec("/sbin/ifconfig eth0 | grep -i 'inet Adresse:' | tr ':' ' ' | awk '{ print $3 }'"));
Pero no recibo nada a cambio. Si ejecuto exactamente el mismo comando a través de ssh, obtengo la IP, por lo que el comando debería funcionar.
Abrí visudo
y agregué estas líneas y reinicié Apache2 después.
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
Pero todavía no recibo nada a cambio
Respuesta1
Su patrón grep no parece coincidir con el resultado ifconfig
y, por lo tanto, grep
no produce ningún resultado, intente:
$ip = trim(shell_exec("/sbin/ifconfig eth0 | grep -i 'inet Adresse:' | awk '{ print $2 }'"));
Respuesta2
Encontré la solución. Esto se debe a que shell_exec
siempre obtiene una salida en inglés, incluso si el sistema operativo está configurado en alemán, si ejecuta, shell_exec("/sbin/ifconfig")
siempre obtendrá, por ejemplo, inet addr
en lugar de inet Adresse
en la salida.
También olvidé cambiar el usuario y el grupo de mi archivo a www-data
with chown
y permitir la ejecución del script con chmod
, aunque no sé si esto es necesario.