Signatur
Beschreibung
radius_close() gibt alle internen Ressourcen frei, die mit einem über radius_auth_open() oder radius_acct_open() erzeugten RADIUS-Handle verbunden sind. Nach dem Aufruf ist das Handle ungültig und darf nicht mehr verwendet werden.
Die Funktion gehört zur PECL-Erweiterung radius und wird typischerweise am Ende eines RADIUS-Authentifizierungs- oder Accounting-Vorgangs aufgerufen, um Speicher und sonstige Betriebssystemressourcen ordnungsgemäß freizugeben.
In langlebigen Prozessen (z. B. Daemons oder Anwendungen unter PHP-FPM) ist ein expliziter Aufruf von radius_close() besonders wichtig, da andernfalls Ressourcen-Leaks entstehen können. In kurzlebigen Skripten werden die Ressourcen zwar beim Skript-Ende automatisch freigegeben, ein expliziter Aufruf gilt jedoch als saubere Programmierpraxis.
Parameter
| Name | Typ | Default | Beschreibung |
|---|---|---|---|
| $radius_handle Pflicht | resource | Ein gültiges RADIUS-Ressourcen-Handle, wie es von radius_auth_open() oder radius_acct_open() zurückgegeben wurde. |
Rückgabewert
true bei Erfolg zurück, false wenn das übergebene Handle ungültig ist oder die Ressource nicht freigegeben werden konnte.Beispiele
Einfacher RADIUS-Authentifizierungsablauf mit radius_close
<?php
// RADIUS-Handle für Authentifizierung öffnen
$radius = radius_auth_open();
if (!$radius) {
die('Fehler: RADIUS-Handle konnte nicht erzeugt werden.');
}
// Server konfigurieren
if (!radius_add_server($radius, 'radius.example.com', 1812, 'geheimespasswort', 3, 3)) {
echo 'Fehler beim Hinzufügen des Servers: ' . radius_strerror($radius);
radius_close($radius);
exit(1);
}
// Authentifizierungsanfrage aufbauen
radius_create_request($radius, RADIUS_ACCESS_REQUEST);
radius_put_attr($radius, RADIUS_USER_NAME, 'testuser');
radius_put_attr($radius, RADIUS_USER_PASSWORD, 'geheimesUserPasswort');
// Anfrage senden und Ergebnis prüfen
$result = radius_send_request($radius);
if ($result === RADIUS_ACCESS_ACCEPT) {
echo 'Authentifizierung erfolgreich.';
} else {
echo 'Authentifizierung fehlgeschlagen. Code: ' . $result;
}
// Ressourcen freigeben
radius_close($radius);
?>
Ressource-freigabe im Fehlerfall (try/finally-Muster)
<?php
$radius = radius_auth_open();
if (!$radius) {
die('RADIUS konnte nicht initialisiert werden.');
}
try {
if (!radius_add_server($radius, 'radius.example.com', 1812, 's3cr3t', 5, 3)) {
throw new RuntimeException('Server hinzufügen fehlgeschlagen: ' . radius_strerror($radius));
}
radius_create_request($radius, RADIUS_ACCESS_REQUEST);
radius_put_attr($radius, RADIUS_USER_NAME, 'admin');
radius_put_attr($radius, RADIUS_USER_PASSWORD, 'adminpass');
$result = radius_send_request($radius);
echo 'RADIUS-Antwort-Code: ' . $result . PHP_EOL;
} catch (RuntimeException $e) {
echo 'Fehler: ' . $e->getMessage() . PHP_EOL;
} finally {
// Sicherstellung der Ressourcenfreigabe auch im Fehlerfall
radius_close($radius);
echo 'RADIUS-Ressource freigegeben.' . PHP_EOL;
}
?>
// Wichtig · Fallstricke
Verfügbarkeit: radius_close() ist keine eingebaute PHP-Funktion, sondern Teil der PECL-Erweiterung radius. Diese muss separat installiert sein (pecl install radius) und in der php.ini aktiviert werden (extension=radius).
Nach dem Aufruf von radius_close() darf das Handle nicht mehr an andere RADIUS-Funktionen übergeben werden, da dies zu undefiniertem Verhalten führen kann. Setzen Sie das Handle nach dem Schließen am besten auf null.
Die PECL-Erweiterung radius gilt seit längerer Zeit als wenig aktiv gepflegt. Für neue Projekte empfiehlt sich die Prüfung alternativer Bibliotheken oder moderner Composer-Pakete für RADIUS-Kommunikation.