Start · Sprachen · PHP · Referenz · snmp_set_enum_print

snmp_set_enum_print

Funktion

Steuert, ob SNMP-Enum-Werte als menschenlesbare Bezeichnung oder als roher Integer zurückgegeben werden.

seit PHP 5.0.0 Kategorie: http

Signatur

snmp_set_enum_print(bool $enable): bool

Beschreibung

Mit snmp_set_enum_print() kann festgelegt werden, wie SNMP-Enum-Werte in PHP-Abfragen repräsentiert werden. Wird die Funktion mit true aufgerufen, gibt die SNMP-Erweiterung Enum-Werte als sprechende Bezeichnungen (z. B. "up" statt 1) zurück, wie sie in der MIB-Datenbank definiert sind.

Standardmäßig liefert PHP die rohen Integer-Werte der Enums, was für maschinelle Verarbeitung ausreichend, für Menschen aber schwer lesbar ist. Durch Aktivierung des Enum-Prints vereinfacht sich das Debuggen und die Auswertung von SNMP-Antworten erheblich.

Die Einstellung gilt global für alle nachfolgenden SNMP-Abfragen innerhalb des Skripts. Sie wird typischerweise einmalig zu Beginn eines SNMP-Abfrage-Abschnitts gesetzt und kann bei Bedarf wieder deaktiviert werden. Die MIB-Übersetzung muss korrekt geladen sein (z. B. via snmp_read_mib()), damit die Bezeichnungen aufgelöst werden können.

Diese Funktion gehört zur prozeduralen SNMP-API und wirkt sich auf alle Funktionen wie snmpget(), snmpwalk() etc. aus.

Parameter

Name Typ Default Beschreibung
$enable Pflicht bool true aktiviert die Ausgabe von Enum-Werten als Bezeichnungen; false deaktiviert sie und stellt die Ausgabe roher Integer-Werte wieder her.

Rückgabewert

Typ
bool
Beschreibung
Gibt true zurück, wenn die Einstellung erfolgreich gesetzt wurde, andernfalls false.

Beispiele

Enum-Bezeichnungen bei einem SNMP-Get aktivieren

<?php
// Enum-Ausgabe als Bezeichnung aktivieren
snmp_set_enum_print(true);

// SNMP-Abfrage: ifOperStatus gibt z. B. 'up', 'down', 'testing' zurück
$result = snmpget('192.168.1.1', 'public', 'IF-MIB::ifOperStatus.1');

if ($result !== false) {
    echo "Interface-Status: " . $result . PHP_EOL;
    // Ausgabe: Interface-Status: up  (statt: 1)
} else {
    echo "SNMP-Abfrage fehlgeschlagen." . PHP_EOL;
}

// Enum-Ausgabe wieder deaktivieren (rohe Integers)
snmp_set_enum_print(false);
Interface-Status: up

Vergleich mit und ohne Enum-Print

<?php
$host   = '192.168.1.1';
$comm   = 'public';
$oid    = 'IF-MIB::ifOperStatus.1';

// Ohne Enum-Print: roher Integer-Wert
snmp_set_enum_print(false);
$raw = snmpget($host, $comm, $oid);
echo "Roh:        " . $raw . PHP_EOL;   // z. B. INTEGER: 1

// Mit Enum-Print: sprechende Bezeichnung
snmp_set_enum_print(true);
$labeled = snmpget($host, $comm, $oid);
echo "Bezeichnung: " . $labeled . PHP_EOL; // z. B. INTEGER: up
Roh: INTEGER: 1 Bezeichnung: INTEGER: up

// Wichtig · Fallstricke

MIB-Verfügbarkeit: Damit Enum-Bezeichnungen korrekt aufgelöst werden, muss die entsprechende MIB-Datei geladen sein. Dies geschieht entweder über die PHP-Konfiguration (snmp.mib_parse) oder explizit mittels snmp_read_mib(). Fehlt die MIB, werden möglicherweise trotzdem Integers zurückgegeben.

Globale Wirkung: Die Einstellung ist global und beeinflusst alle nachfolgenden SNMP-Funktionsaufrufe im selben PHP-Prozess. In Umgebungen mit persistenten Verbindungen oder gemeinsam genutzten Prozessen (z. B. FastCGI) sollte der Zustand nach der Verwendung zurückgesetzt werden.

OOP-Alternative: Bei Verwendung der objektorientierten SNMP-Klasse (SNMP) steht die Eigenschaft $snmp->enum_print zur Verfügung, die dasselbe steuert, jedoch instanzgebunden ist.