(PHP 5 >= 5.4.0, PHP 7, PHP 8)
SNMP::walk — Получает поддерево объекта SNMP
$objectId
,$suffixAsKey
= false
,$maxRepetitions
= -1,$nonRepeaters
= -1
SNMP::walk() используется для чтения поддерева SNMP с корнем в указанном objectId
.
objectId
Корень извлекаемого поддерева
suffixAsKey
По умолчанию для ключей в выходном массиве используется полная нотация OID.
Если установлено значение true
, префикс поддерева будет удалён из ключей, останется только суффикс object_id.
nonRepeaters
Определяет количество предоставленных переменных, которые не следует повторять. По умолчанию используется значение из объекта SNMP.
maxRepetitions
Определяет максимальное количество итераций по повторяющимся переменным. По умолчанию используется значение из объекта SNMP.
Возвращает ассоциативный массив идентификаторов объектов SNMP и их значений в случае успешного выполнения или 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) )