SNMP::walk
(PHP 5 >= 5.4.0, PHP 7, PHP 8)
SNMP::walk — SNMP オブジェクトのサブツリーを取得する
説明
array|string
$objectId
,bool
$suffixAsKey
= false
,int
$maxRepetitions
= -1,int
$nonRepeaters
= -1): array|false
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
の例
suffixAsKey
は、複数の SNMP
サブツリーをひとつにまとめるときに使えます。この例では、インターフェイス名とその型を関連付けます。
<?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) )
参考
- SNMP::getErrno() - 直近のエラーコードを取得する
- SNMP::getError() - 直近のエラーメッセージを取得する