SNMP オブジェクトのサブツリーを取得する

# SNMP::walk

(PHP 5 >= 5.4.0, PHP 7, PHP 8)

SNMP::walk — SNMP オブジェクトのサブツリーを取得する

### 説明

public function SNMP::walk(
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() - 直近のエラーメッセージを取得する

`↑` and `↓` to navigate • `Enter` to select • `Esc` to close • `/` to open