2011-11-05 38 views
1

我从运行ifconfig命令的Linux机器获取输出。我通过运行shell_exec命令来完成。我找到了一个例子,但我似乎无法进一步处理它。PHP从复杂字符串中选择文本

这是我现在的代码。

public function get_network_interfaces() { 

    // Run the command. 
    $cmd_exec = shell_exec("/sbin/ifconfig"); 

    // Get the pattern. 
    $pattern = '/inet addr:([\d]{1,3}\.[\d]{1,3}\.[\d]{1,3}\.[\d]{1,3})/'; 

    if (preg_match_all($pattern, $cmd_exec, $matches)) { 
     $interfaces = $matches[1]; 
     return $interfaces;   
    } 

} 

这个(在foreach之后)的输出很简单; 192.168.1.1/127.0.0.1,因为它有两个网络适配器,ifconfig的输出是;

eth0  Link encap:Ethernet HWaddr 00:16:3e:38:b8:1c 
     inet addr:192.168.1.1 Bcast:192.168.1.255 Mask:255.255.255.0 
     inet6 addr: 2a02:2308::216:3eff:fe38:b81c/64 Scope:Global 
     inet6 addr: fe80::216:3eff:fe38:b81c/64 Scope:Link 
     UP BROADCAST RUNNING MULTICAST MTU:1500 Metric:1 
     RX packets:10612623 errors:0 dropped:0 overruns:0 frame:0 
     TX packets:151855 errors:0 dropped:0 overruns:0 carrier:0 
     collisions:0 txqueuelen:1000 
     RX bytes:539434883 (514.4 MiB) TX bytes:37861938 (36.1 MiB) 
     Interrupt:30 
lo  Link encap:Local Loopback 
     inet addr:127.0.0.1 Mask:255.0.0.0 
     inet6 addr: ::1/128 Scope:Host 
     UP LOOPBACK RUNNING MTU:16436 Metric:1 
     RX packets:6662 errors:0 dropped:0 overruns:0 frame:0 
     TX packets:6662 errors:0 dropped:0 overruns:0 carrier:0 
     collisions:0 txqueuelen:0 
     RX bytes:768641 (750.6 KiB) TX bytes:768641 (750.6 KiB) 

我想获得像,其次是RX字节,字节TX接口(eth0和LO)的名称,与INET增加了沿(这是工作的话)。 如果名字太难得,那就这样吧。但任何人都可以解释我如何获得RX字节和TX字节?

谢谢。

+2

如果您有接口,您可以使用'cat/proc/net/dev'获取您的设备列表和rec/tr字节统计信息,您可以使用'ip addr show eth0 | grep inet'来为ip本身获得一个简单的解析字符串。 – Rufinus

+0

[在Linux上获取当前配置的网络接口信息的问题]的可能重复(http://stackoverflow.com/questions/1656806/problem-with-getting-information-of-currently-configured-network-interfaces-on- l) –

回答

1

对于接口的名称,这应该工作:

$pattern = '/^(\w*)\s*Link encap.*$/'; 

对于RX和TX字节:

$pattern = '/RX packets:(\d*) /'; 
$pattern = '/TX packets:(\d*) /'; 

你应该为了进行测试,以确保您有全部信息对于每个接口:

  1. 测试接口的名称。
  2. 测试IP号码。
  3. 测试RX字节。
  4. 测试TX字节。

当你有他们四个,然后去另一个周期(例如与continue)。

P.S.注意你在系统中使用的语言,因为用西班牙语你会得到“Paquetes RX:”。为了确保,为了使代码更加健壮,您应该尝试使shell_exec将环境变量LC_MESSAGES设置为en_us.utf-8

+0

谢谢你。除名字外,这个不起作用。我自己尝试了一些东西,但似乎并不奏效。 谢谢,我会考虑改变这个设置。 – Roel