(PHP 5 >= 5.4.0, PHP 7, PHP 8)
SNMP::set — 設定 SNMP 物件的值
請求遠端 SNMP 代理程式設定由 objectId
指定的一個或多個 SNMP 物件的值。
如果 objectId
是 字串,則 type
和 value
也必須是 字串。如果 objectId
是 陣列,value
必須是包含對應值的等大小陣列,type
可以是 字串(其值將用於所有 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 | 物件 ID (OBJID) |
t | 時間刻度 (TIMETICKS) |
a | IP 位址 (IPADDRESS) |
b | 位元 (BITS) |
如果在編譯 SNMP 程式庫時定義了 OPAQUE_SPECIAL_TYPES
,則以下類型也適用
U | 無號 int64 (unsigned int64) |
I | 有號 int64 (signed int64) |
F | 浮點數 (float) |
D | 雙精度浮點數 (double) |
其中大多數將使用明顯對應的 ASN.1 類型。「s」、「x」、「d」和「b」都是指定 OCTET STRING 值的不同方式,而「u」無號類型也用於處理 Gauge32 值。
如果 MIB 檔案是透過「snmp_read_mib」或在 libsnmp 設定檔中指定載入到 MIB 樹中的,則可以使用「=」作為所有物件 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');
?>