(PHP 5 >= 5.4.0, PHP 7, PHP 8)
SNMP::set — 设置 SNMP 对象的值
请求远程 SNMP 代理,设置由 objectId
指定的一个或多个 SNMP 对象的值。
如果 objectId
是 string,则 type
和 value
也必须是 string。如果 objectId
是 array,则 value
必须是大小相等的数组,包含相应的 value,type
可以是 string(其值将用于所有 objectId
-value
对)或大小相等的数组,包含每个 OID 的值。当使用任何其他参数组合时,可能会显示许多 E_WARNING 消息,并附带详细描述。
objectId
SNMP 对象 ID
当 object_id 数组中的 OID 数量大于 max_oids 对象属性时,set 方法必须使用多个查询来执行请求的值更新。在这种情况下,类型和值的检查是按块进行的,因此由于请求的 OID 的类型或值错误,第二个或后续请求可能会失败。为了标记这一点,当 object_id 数组中的 OID 数量大于 max_oids 时,会发出警告。
type
MIB 定义了每个对象 ID 的类型。它必须从下面的列表中指定为单个字符。
= | 类型来自 MIB |
i | INTEGER |
u | INTEGER |
s | STRING |
x | HEX STRING |
d | DECIMAL STRING |
n | NULLOBJ |
o | OBJID |
t | TIMETICKS |
a | IPADDRESS |
b | BITS |
如果在编译 SNMP 库时定义了 OPAQUE_SPECIAL_TYPES
,则以下内容也是有效的
U | unsigned int64 |
I | signed int64 |
F | float |
D | double |
大多数这些将使用明显的对应 ASN.1 类型。's'、'x'、'd' 和 'b' 都是指定 OCTET STRING 值的不同方式,而 'u' 无符号类型也用于处理 Gauge32 值。
如果 MIB 文件通过 "snmp_read_mib" 加载到 MIB 树中,或在 libsnmp 配置中指定,则 " =" 可以用作所有对象 ID 的 type
参数,因为类型可以从 MIB 中自动读取。
注意,有两种方法可以设置 BITS 类型的变量,例如 "SYNTAX BITS {telnet(0), ftp(1), http(2), icmp(3), snmp(4), ssh(5), https(6)}"
有关更多详细信息,请参见示例部分。
value
新值。
默认情况下,此方法不抛出任何异常。要启用在出现某些库错误时抛出 SNMPException 异常,应将 SNMP 类参数 exceptions_enabled
设置为相应的值。有关更多详细信息,请参见 SNMP::$exceptions_enabled
解释。
示例 #1 设置单个 SNMP 对象 ID
<?php
$session = new SNMP(SNMP::VERSION_2C, "127.0.0.1", "private");
$session->set('SNMPv2-MIB::sysContact.0', 's', "Nobody");
?>
示例 #2 使用单个 SNMP::set() 调用设置多个值
<?php
$session = new SNMP(SNMP::VERSION_2C, "127.0.0.1", "private");
$session->set(array('SNMPv2-MIB::sysContact.0', 'SNMPv2-MIB::sysLocation.0'), array('s', 's'), array("Nobody", "Nowhere"));
// 或者
$session->set(array('SNMPv2-MIB::sysContact.0', 'SNMPv2-MIB::sysLocation.0'), 's', array("Nobody", "Nowhere"));
?>
示例 #3 使用 SNMP::set() 设置 BITS SNMP 对象 ID
<?php
$session = new SNMP(SNMP::VERSION_2C, "127.0.0.1", "private");
$session->set('FOO-MIB::bar.42', 'b', '0 1 2 3 4');
// 或者
$session->set('FOO-MIB::bar.42', 'x', 'F0');
?>