Проблема с получением информации о текущих настроенных сетевых интерфейсах в Linux - PullRequest
0 голосов
/ 01 ноября 2009

Я столкнулся с проблемой форматирования строки при попытке получить только имена настроенных в данный момент сетевых интерфейсов на компьютере с Linux.

1. <?php
2. $temp = shell_exec("/sbin/ifconfig | cut -b 1-10");
3. echo $temp;                           //Outputs: eth0 lo
4. $arr = explode(" ",$temp);
5. echo "First Location:".$arr[0];         //Outputs: eth0
6. echo "Second Location:".$arr[1];        //Outputs:    
7. echo count($a);                       //Outputs: 165
8. ?>

Как я могу получить $ arr размера = 2, чтобы echo $ arr [0]; // выдает 'eth0' echo $ arr [1]; // дает 'lo'

Большое спасибо

Обновление: Я думаю, что следующая команда сделает магию для меня

ifconfig | grep -o -e "[a-z][a-z]*[0-9]*[ ]*Link" | perl -pe "s|^([a-z]*[0-9]*)[ ]*Link|\1|"

но я делаю что-то не так, выполняя его из php-файла, потому что браузер ничего не показывает.

<?php    
$temp = shell_exec("ifconfig | grep -o -e \"[a-z][a-z]*[0-9]*[ ]*Link\" | perl -pe \"s|^([a-z]*[0-9]*)[ ]*Link|\\1|\"");
echo $temp;
?>

Ответы [ 2 ]

1 голос
/ 01 ноября 2009

Обратите внимание, что вы должны проверить возвращаемое значение, чтобы убедиться, что вызов успешно завершен, но в принципе это можно сделать следующим образом:

exec('/sbin/ifconfig -s|awk \'{print $1}\'', $interfaces, $returnValue);
array_shift($interfaces);
1 голос
/ 01 ноября 2009

Ну, вы можете избавиться от пробелов, например, так:

explode(' ', trim(preg_replace('/\s+/', ' ', $temp)));

Обратите внимание, что в Linux вы можете получить информацию, не выполняя внешнюю команду, прочитав из /proc/net/dev.

$lines = file('/proc/net/dev');
$interfaces = array();
for ($i = 2; $i < count($lines);  $i++) {
    $line = explode(':', $lines[$i]);
    $interfaces[] = trim($line[0]);
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...