(PHP 5 >= 5.4.0, PHP 7, PHP 8)
SNMP::walk — 擷取 SNMP 物件子樹
$objectId
,$suffixAsKey
= false
,$maxRepetitions
= -1,$nonRepeaters
= -1
SNMP::walk() 用於讀取以指定 objectId
為根的 SNMP 子樹。
objectId
要擷取的子樹根
suffixAsKey
預設情況下,輸出陣列中的鍵使用完整的 OID 表示法。如果設為 true
,子樹前綴將從鍵中移除,僅留下 object_id 的後綴。
nonRepeaters
這指定了不應迭代的提供的變數數量。預設值是使用來自 SNMP 物件的值。
maxRepetitions
這指定了對重複變數迭代的最大次數。預設值是使用來自 SNMP 物件的值。
成功時傳回 SNMP 物件 ID 及其值的關聯陣列,錯誤時傳回 false
。當發生 SNMP 錯誤時,可以使用 SNMP::getErrno() 和 SNMP::getError() 分別擷取錯誤號碼(特定於 SNMP 擴充,請參閱類常數)和錯誤訊息。
預設情況下,此方法不會拋出任何例外。要啟用在發生某些程式庫錯誤時拋出 SNMPException 例外,SNMP 類別參數 exceptions_enabled
應設為對應的值。有關更多詳細資訊,請參閱 SNMP::$exceptions_enabled
的說明。
範例 #1 SNMP::walk() 範例
<?php
$session = new SNMP(SNMP::VERSION_1, "127.0.0.1", "public");
$fulltree = $session->walk(".");
print_r($fulltree);
$session->close();
?>
上述範例將輸出類似以下的內容
Array ( [SNMPv2-MIB::sysDescr.0] => STRING: Test server [SNMPv2-MIB::sysObjectID.0] => OID: NET-SNMP-MIB::netSnmpAgentOIDs.8 [DISMAN-EVENT-MIB::sysUpTimeInstance] => Timeticks: (1150681750) 133 days, 4:20:17.50 [SNMPv2-MIB::sysContact.0] => STRING: Nobody [SNMPv2-MIB::sysName.0] => STRING: server.localdomain ... )
範例 #2 suffixAsKey
範例
當將多個 SNMP 子樹合併為一個時,可以使用 suffixAsKey
。此範例將介面名稱對應到其類型。
<?php
$session = new SNMP(SNMP::VERSION_1, "127.0.0.1", "public");
$session->valueretrieval = SNMP_VALUE_PLAIN;
$ifDescr = $session->walk(".1.3.6.1.2.1.2.2.1.2", TRUE);
$session->valueretrieval = SNMP_VALUE_LIBRARY;
$ifType = $session->walk(".1.3.6.1.2.1.2.2.1.3", TRUE);
print_r($ifDescr);
print_r($ifType);
$result = array();
foreach($ifDescr as $i => $n) {
$result[$n] = $ifType[$i];
}
print_r($result);
?>
上述範例將輸出類似以下的內容
Array ( [1] => igb0 [2] => igb1 [3] => ipfw0 [4] => lo0 [5] => lagg0 ) Array ( [1] => INTEGER: ieee8023adLag(161) [2] => INTEGER: ieee8023adLag(161) [3] => INTEGER: ethernetCsmacd(6) [4] => INTEGER: softwareLoopback(24) [5] => INTEGER: ethernetCsmacd(6) ) Array ( [igb0] => INTEGER: ieee8023adLag(161) [igb1] => INTEGER: ieee8023adLag(161) [ipfw0] => INTEGER: ethernetCsmacd(6) [lo0] => INTEGER: softwareLoopback(24) [lagg0] => INTEGER: ethernetCsmacd(6) )