(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 при возникновении
некоторых ошибок данной библиотеки, необходимо установить параметр
exceptions_enabled
класса SNMP в
соответствующее значение. Подробнее смотрите в
объяснении параметра 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) )