Signatur
Beschreibung
SNMPException ist die spezialisierte Ausnahmeklasse der PHP-SNMP-Erweiterung. Sie wird geworfen, wenn bei SNMP-Operationen – beispielsweise beim Verbindungsaufbau, beim Lesen oder Schreiben von OIDs – ein Fehler auftritt. Da sie von RuntimeException erbt, kann sie mit dem üblichen try/catch-Mechanismus abgefangen werden.
Typische Ursachen für das Werfen einer SNMPException sind ungültige Host-Adressen, falsche Community-Strings, Timeouts, nicht erreichbare SNMP-Agenten oder ungültige OID-Angaben. Die Klasse liefert über die geerbten Methoden wie getMessage() und getCode() Informationen über die Art des Fehlers.
Die Klasse wird ausschließlich von der SNMP-Klasse (objektorientierter Stil) verwendet. Beim prozeduralen Stil der SNMP-Funktionen (z. B. snmpget()) werden stattdessen Warnungen ausgegeben und false zurückgegeben.
Um SNMPException-Objekte zu erhalten, muss die SNMP-Instanz entsprechend konfiguriert sein. Standardmäßig ist SNMP::$exceptions_enabled gesetzt, sodass Ausnahmen automatisch geworfen werden, wenn Fehler auftreten.
Beispiele
Abfangen einer SNMPException bei ungültigem Host
<?php
try {
$snmp = new SNMP(SNMP::VERSION_2C, 'ungueltigerhost.example.com', 'public', 1000000, 1);
$result = $snmp->get('.1.3.6.1.2.1.1.1.0');
echo $result;
} catch (SNMPException $e) {
echo 'SNMP-Fehler: ' . $e->getMessage() . PHP_EOL;
echo 'Fehlercode: ' . $e->getCode() . PHP_EOL;
}
Fehlerbehandlung beim Lesen einer ungültigen OID
<?php
try {
$snmp = new SNMP(SNMP::VERSION_2C, '127.0.0.1', 'public', 1000000, 1);
// Exceptions explizit aktivieren
$snmp->exceptions_enabled = SNMP::ERRNO_ANY;
$result = $snmp->get('ungueltige.oid.hier');
echo $result;
} catch (SNMPException $e) {
echo 'Fehler beim OID-Zugriff: ' . $e->getMessage() . PHP_EOL;
} finally {
echo 'SNMP-Abfrage abgeschlossen.' . PHP_EOL;
}
// Wichtig · Fallstricke
Exceptions aktivieren: Damit SNMPException geworfen wird, muss die Eigenschaft SNMP::$exceptions_enabled gesetzt sein. Mit der Konstante SNMP::ERRNO_ANY werden alle Fehlertypen als Ausnahmen behandelt. Es ist möglich, nur bestimmte Fehlerklassen (z. B. SNMP::ERRNO_TIMEOUT) als Ausnahmen zu konfigurieren.
Sicherheit: Community-Strings sollten niemals im Klartext in Logdateien landen. Achte darauf, in catch-Blöcken keine sensiblen Verbindungsdetails unkontrolliert auszugeben.
Verfügbarkeit: Die SNMP-Erweiterung und damit SNMPException ist nicht in jeder PHP-Installation standardmäßig aktiv. Sie muss beim Kompilieren mit --with-snmp aktiviert werden.