
Я пытаюсь выполнить следующую команду PHP, чтобы получить IP-адрес из eth0.
$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")
то вы всегда получите eg inet addr
вместо inet Adresse
в выводе.
Я также забыл изменить пользователя и группу моего файла на www-data
with chown
и разрешить выполнение скрипта with chmod
, хотя я не знаю, нужно ли это.