Start · Sprachen · PHP · Referenz · swoole_load_module

swoole_load_module

Funktion

Lädt eine Swoole-Erweiterung (ein natives PHP-Modul im <code>.so</code>-Format) zur Laufzeit.

Kategorie: misc

Signatur

swoole_load_module(string $filename): bool

Beschreibung

swoole_load_module() ermöglicht es, ein natives PHP-Erweiterungsmodul (shared library, .so-Datei unter Linux/macOS) dynamisch zur Laufzeit zu laden, ohne dass ein Neustart des PHP-Prozesses oder eine Änderung der php.ini erforderlich ist. Dies ist besonders nützlich in langlebigen Swoole-Server-Prozessen, bei denen ein Neustart des Prozesses vermieden werden soll.

Die Funktion ist Bestandteil der Swoole-Erweiterung und verhält sich ähnlich wie die PHP-Standardfunktion dl(). Im Gegensatz zu dl() ist swoole_load_module() jedoch auch in Umgebungen nutzbar, in denen dl() deaktiviert ist (z. B. in FPM- oder CLI-SAPI-Einschränkungen).

Der Pfad zum Modul kann absolut oder relativ zur aktuellen extension_dir-Einstellung angegeben werden. Nach erfolgreichem Laden steht die Erweiterung im gesamten Prozess zur Verfügung.

Hinweis: Die Funktion ist primär für fortgeschrittene Einsatzszenarien gedacht, etwa beim dynamischen Nachladen von Treibern oder Protokollmodulen in einem laufenden Swoole-HTTP- oder TCP-Server.

Parameter

Name Typ Default Beschreibung
$filename Pflicht string Absoluter oder relativer Pfad zur nativen PHP-Erweiterungsdatei (.so unter Linux/macOS, .dll unter Windows). Wird ein relativer Pfad angegeben, wird er relativ zum konfigurierten extension_dir aufgelöst.

Rückgabewert

Typ
bool
Beschreibung
Gibt true zurück, wenn die Erweiterung erfolgreich geladen wurde. Bei einem Fehler (z. B. Datei nicht gefunden oder ungültiges Modul) wird false zurückgegeben.

Beispiele

Swoole-Modul zur Laufzeit laden

<?php
// Absoluten Pfad zur Erweiterung angeben
$result = swoole_load_module('/usr/lib/php/extensions/my_extension.so');

if ($result) {
    echo "Modul erfolgreich geladen." . PHP_EOL;
} else {
    echo "Fehler beim Laden des Moduls." . PHP_EOL;
}
Modul erfolgreich geladen.

Dynamisches Laden in einem Swoole-HTTP-Server

<?php
// Sicherstellen, dass Swoole verfügbar ist
if (!extension_loaded('swoole')) {
    die('Swoole ist nicht geladen.');
}

// Erweiterung dynamisch laden, bevor der Server startet
$modulePath = ini_get('extension_dir') . '/my_driver.so';
if (!swoole_load_module($modulePath)) {
    echo "Warnung: Modul konnte nicht geladen werden: {$modulePath}" . PHP_EOL;
}

$server = new Swoole\HTTP\Server('0.0.0.0', 9501);

$server->on('request', function ($request, $response) {
    $response->header('Content-Type', 'text/plain');
    $response->end('Hello from Swoole!' . PHP_EOL);
});

$server->start();

// Wichtig · Fallstricke

Sicherheitshinweis: Laden Sie niemals Erweiterungen aus nicht vertrauenswürdigen oder benutzergesteuerten Quellen. Ein kompromittiertes .so-Modul kann beliebigen nativen Code auf Systemebene ausführen und stellt ein erhebliches Sicherheitsrisiko dar.

Kompatibilität: swoole_load_module() ist eine proprietäre Funktion der Swoole-Erweiterung und steht nur zur Verfügung, wenn Swoole installiert und aktiv ist. Sie ist kein Bestandteil des PHP-Kerns.

Einschränkung: Bereits geladene Erweiterungen können nicht erneut geladen oder entladen werden. Ein doppelter Ladeversuch derselben Erweiterung führt in der Regel zu einem Fehler oder einer Warnung.