Signatur
Beschreibung
stream_wrapper_unregister() hebt die Registrierung eines Stream-Wrappers für ein bestimmtes Protokoll auf. Nach dem Aufruf ist das Protokoll nicht mehr verfügbar, bis es erneut registriert wird. Das gilt sowohl für benutzerdefinierte Wrapper (registriert via stream_wrapper_register()) als auch für eingebaute PHP-Wrapper (z. B. file://, http://).
Ein typischer Anwendungsfall ist das vorübergehende Deaktivieren eines eingebauten Wrappers, um ihn durch eine eigene Implementierung zu ersetzen – etwa um Dateioperationen in Unit-Tests zu mocken oder zusätzliche Logik (Logging, Verschlüsselung) rund um Standard-Protokolle einzubauen. Mit stream_wrapper_restore() kann ein zuvor deregistrierter eingebauter Wrapper anschließend wiederhergestellt werden.
Soll ein benutzerdefinierter Wrapper lediglich ersetzt werden, empfiehlt sich die Kombination aus stream_wrapper_unregister() und stream_wrapper_register() oder direkt stream_wrapper_restore() für eingebaute Wrapper.
Parameter
| Name | Typ | Default | Beschreibung |
|---|---|---|---|
| $protocol Pflicht | string | Der Name des Protokolls (ohne ://), dessen Wrapper entfernt werden soll, z. B. "file", "http" oder ein benutzerdefiniertes Protokoll wie "myproto". |
Rückgabewert
true bei Erfolg zurück. Gibt false zurück, wenn das angegebene Protokoll nicht registriert ist oder die Deregistrierung fehlschlägt.Beispiele
Benutzerdefinierten Wrapper entfernen
<?php
class MyStreamWrapper {
public function stream_open(string $path, string $mode, int $options, ?string &$opened_path): bool {
return true;
}
// weitere Methoden ...
}
// Wrapper registrieren
stream_wrapper_register('myproto', MyStreamWrapper::class);
// Wrapper wird verwendet ...
// Wrapper wieder entfernen
if (stream_wrapper_unregister('myproto')) {
echo "Wrapper 'myproto' erfolgreich entfernt.\n";
} else {
echo "Fehler beim Entfernen des Wrappers.\n";
}
Eingebauten file://-Wrapper temporär ersetzen
<?php
class MockFileWrapper {
public function stream_open(string $path, string $mode, int $options, ?string &$opened_path): bool {
echo "[Mock] stream_open aufgerufen für: $path\n";
return false;
}
// weitere Methoden ...
}
// Eingebauten Wrapper deaktivieren
stream_wrapper_unregister('file');
// Eigenen Mock-Wrapper registrieren
stream_wrapper_register('file', MockFileWrapper::class);
// Dateioperationen gehen jetzt durch den Mock
@fopen('file:///tmp/test.txt', 'r');
// Eingebauten Wrapper wiederherstellen
stream_wrapper_restore('file');
echo "Eingebauter file://-Wrapper wiederhergestellt.\n";
// Wichtig · Fallstricke
Vorsicht beim Deaktivieren eingebauter Wrapper: Das Entfernen von Wrappern wie file:// oder http:// wirkt sich sofort auf alle laufenden Dateioperationen aus. Wird der ursprüngliche Wrapper nicht mit stream_wrapper_restore() wiederhergestellt, kann dies zu unerwarteten Fehlern im gesamten Skript führen.
Das Entfernen und Ersetzen eines eingebauten Wrappers sollte immer in einem try/finally-Block erfolgen, um sicherzustellen, dass der originale Wrapper auch im Fehlerfall wiederhergestellt wird.