Start · Sprachen · PHP · Referenz · stream_filter_remove

stream_filter_remove

Funktion

Entfernt einen zuvor an einen Stream angehängten Filter und gibt die belegten Ressourcen frei.

seit PHP 5.1.0 Kategorie: io

Signatur

stream_filter_remove(resource $stream_filter): bool

Beschreibung

stream_filter_remove() entfernt einen einzelnen Filter, der zuvor mittels stream_filter_append() oder stream_filter_prepend() an einen Stream angehängt wurde. Als Parameter erwartet die Funktion nicht den Stream selbst, sondern das Filter-Ressource-Handle, das beim Anhängen des Filters zurückgegeben wurde.

Das Entfernen eines Filters ist dann sinnvoll, wenn ein Filter nur für einen bestimmten Abschnitt der Stream-Verarbeitung benötigt wird. Beispielsweise kann ein Base64-Encoder gezielt nur für einen Teil der Daten aktiv sein und danach wieder entfernt werden, ohne den gesamten Stream zu schließen.

Nach dem Aufruf werden alle internen Puffer des Filters geleert (flushed), bevor der Filter entfernt wird. Dadurch gehen keine gepufferten Daten verloren. Nicht verarbeitete Daten im Puffer des Filters werden noch in den Stream geschrieben.

Wichtig: Wird das Filter-Handle-Objekt nicht in einer Variable gespeichert, wird der Filter bereits beim nächsten Garbage-Collection-Lauf automatisch entfernt. Daher sollte das Handle stets explizit gespeichert werden, wenn ein kontrolliertes Entfernen gewünscht ist.

Parameter

Name Typ Default Beschreibung
$stream_filter Pflicht resource Das Filter-Ressource-Handle, das von stream_filter_append() oder stream_filter_prepend() zurückgegeben wurde. Nicht der Stream selbst, sondern das Handle des angehängten Filters.

Rückgabewert

Typ
bool
Beschreibung
Gibt true zurück, wenn der Filter erfolgreich entfernt wurde, oder false bei einem Fehler (z. B. wenn das übergebene Handle kein gültiger Stream-Filter ist).

Beispiele

Base64-Filter nur für einen Teilbereich eines Streams verwenden

<?php
// Temporären Stream öffnen
$stream = fopen('php://temp', 'r+');

// Base64-Encode-Filter anhängen und Handle speichern
$filter = stream_filter_append($stream, 'convert.base64-encode', STREAM_FILTER_WRITE);

// Daten durch den Filter schreiben (werden Base64-kodiert)
fwrite($stream, 'Hallo, Welt!');

// Filter entfernen — restliche Puffer werden noch geflusht
stream_filter_remove($filter);

// Weitere Daten unkodiert schreiben
fwrite($stream, ' Klartext');

// Stream-Inhalt lesen
rewind($stream);
echo stream_get_contents($stream);
// Ausgabe: SGFsbG8sIFdlbHQh Klartext

fclose($stream);
SGFsbG8sIFdlbHQh Klartext

ROT13-Filter gezielt auf einen Dateistream anwenden und wieder entfernen

<?php
$stream = fopen('php://memory', 'r+');

// ROT13-Filter anhängen
$filter = stream_filter_append($stream, 'string.rot13', STREAM_FILTER_WRITE);

fwrite($stream, 'Geheim');

// Filter entfernen
$removed = stream_filter_remove($filter);
var_dump($removed); // bool(true)

// Normalen Text anhängen
fwrite($stream, '-Offen');

rewind($stream);
echo stream_get_contents($stream);

fclose($stream);
Trurvy-Offen

// Wichtig · Fallstricke

Achtung bei nicht gespeicherten Handles: Wenn der Rückgabewert von stream_filter_append() nicht in einer Variablen gespeichert wird, kann PHP den Filter beim nächsten Garbage-Collection-Lauf vorzeitig entfernen. Dies führt zu schwer nachvollziehbaren Fehlern. Speichere das Filter-Handle daher immer explizit.

Puffer-Flush: Beim Entfernen eines Filters werden alle noch im internen Puffer des Filters befindlichen Daten automatisch in den Stream geschrieben. Dieses Verhalten ist in der Regel erwünscht, sollte aber bei der Ausgabeplanung berücksichtigt werden.

Reihenfolge: Sind mehrere Filter an einem Stream angehängt, können sie unabhängig voneinander entfernt werden. Die verbleibenden Filter behalten ihre relative Reihenfolge bei.