2011-11-05 66 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