Start · Sprachen · PHP · Referenz · radius_acct_open

radius_acct_open

Funktion

Erstellt ein RADIUS-Handle für Accounting-Anfragen und gibt eine Ressource zurück, die für nachfolgende <code>radius_*</code>-Funktionen verwendet wird.

Kategorie: misc

Signatur

radius_acct_open(): resource|false

Beschreibung

radius_acct_open() initialisiert eine neue RADIUS-Client-Ressource, die speziell für Accounting-Zwecke (RFC 2866) ausgelegt ist. Der Rückgabewert ist ein Handle, das bei allen weiteren Aufrufen der RADIUS-Erweiterung (z. B. radius_add_server(), radius_create_request(), radius_send_request()) als erstes Argument übergeben werden muss.

Accounting-Handles unterscheiden sich von Authentifizierungs-Handles (die mit radius_auth_open() erzeugt werden) insofern, als sie typischerweise an Port 1813 kommunizieren und Informationen über Sitzungsbeginn, -dauer und -ende an einen RADIUS-Server übermitteln. Dies ist nützlich für Abrechnungs- und Nutzungsprotokollierungssysteme.

Nach Beendigung der Arbeit mit dem Handle sollte die Ressource mit radius_close() freigegeben werden, um Ressourcenlecks zu vermeiden.

Hinweis: Diese Funktion setzt die PECL-Erweiterung radius voraus, die separat installiert werden muss und nicht Teil des PHP-Kerns ist.

Rückgabewert

Typ
resource|false
Beschreibung
Bei Erfolg wird eine RADIUS-Ressource (Handle) zurückgegeben, die für nachfolgende RADIUS-Accounting-Aufrufe benötigt wird. Im Fehlerfall wird false zurückgegeben.

Beispiele

Accounting-Handle erstellen und Server hinzufügen

<?php
// RADIUS-Accounting-Handle öffnen
$radius = radius_acct_open();

if ($radius === false) {
    die('Konnte kein RADIUS-Accounting-Handle erstellen.');
}

// RADIUS-Server für Accounting hinzufügen (Host, Secret, Port, Timeout, Max-Versuche)
if (!radius_add_server($radius, '192.168.1.10', 1813, 'geheim', 3, 3)) {
    die('Fehler beim Hinzufügen des RADIUS-Servers: ' . radius_strerror($radius));
}

// Accounting-Start-Anfrage erstellen
if (!radius_create_request($radius, RADIUS_ACCOUNTING_REQUEST)) {
    die('Fehler beim Erstellen der Anfrage: ' . radius_strerror($radius));
}

// Attribute setzen
radius_put_attr($radius, RADIUS_ACCT_STATUS_TYPE, RADIUS_START);
radius_put_attr($radius, RADIUS_USER_NAME, 'max.mustermann');
radius_put_int($radius, RADIUS_ACCT_SESSION_TIME, 0);

// Anfrage absenden
$result = radius_send_request($radius);
if ($result == RADIUS_ACCOUNTING_RESPONSE) {
    echo 'Accounting-Start erfolgreich übermittelt.' . PHP_EOL;
} else {
    echo 'Fehler: ' . radius_strerror($radius) . PHP_EOL;
}

radius_close($radius);
?>
Accounting-Start erfolgreich übermittelt.

Fehlerbehandlung beim Öffnen des Handles

<?php
$radius = radius_acct_open();

if ($radius === false) {
    error_log('radius_acct_open() schlug fehl – PECL-Erweiterung installiert?');
    // Alternativen-Logik oder Abbruch
    exit(1);
}

echo 'RADIUS-Accounting-Handle erfolgreich erstellt.' . PHP_EOL;

// ... weitere Operationen ...

radius_close($radius);
?>
RADIUS-Accounting-Handle erfolgreich erstellt.

// Wichtig · Fallstricke

Voraussetzung: Die PECL-Erweiterung radius muss installiert und in der php.ini aktiviert sein (extension=radius). Ohne diese Erweiterung ist die Funktion nicht verfügbar.

Sicherheit: Der gemeinsame geheime Schlüssel (Shared Secret), der mit radius_add_server() übergeben wird, sollte sicher und ausreichend lang sein. Er sollte niemals im Klartext in versionierten Dateien gespeichert werden, sondern aus Umgebungsvariablen oder geschützten Konfigurationsdateien gelesen werden.

Ressourcen: Jedes geöffnete Handle belegt Systemressourcen. Rufen Sie stets radius_close() auf, wenn das Handle nicht mehr benötigt wird, um Lecks zu vermeiden – insbesondere in langlaufenden Prozessen.