Я пытаюсь выполнить следующую команду 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

Но я все еще ничего не получаю обратно

2 ответа2

0

Я нашел решение. Это потому, что shell_exec всегда получает вывод на английском языке, даже если ОС установлена на немецкий язык, если вы выполните shell_exec("/sbin/ifconfig") вы всегда будете получать, например, inet addr вместо inet Adresse в выходных данных.

Я также забыл изменить пользователя и группу моего файла на www-data с помощью chown и разрешить выполнение сценария с помощью chmod , хотя я не знаю, необходимо ли это.

0

Ваш шаблон grep не соответствует выводу ifconfig и поэтому grep не производит вывод, попробуйте:

$ip = trim(shell_exec("/sbin/ifconfig eth0 | grep -i 'inet Adresse:' | awk '{ print $2 }'"));

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .