Signatur
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
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;
}
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.