Start · Sprachen · PHP · Referenz · stream_wrapper_unregister

stream_wrapper_unregister

Funktion

Entfernt die Registrierung eines zuvor registrierten URL-Wrappers (Stream-Wrapper) für das angegebene Protokoll.

seit PHP 5.1.0 Kategorie: io

Signatur

stream_wrapper_unregister(string $protocol): bool

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

Typ
bool
Beschreibung
Gibt 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";
}
Wrapper 'myproto' erfolgreich entfernt.

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";
[Mock] stream_open aufgerufen für: file:///tmp/test.txt Eingebauter file://-Wrapper wiederhergestellt.

// 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.