Aktueller Standort: Startseite> Neueste Artikel> stream_get_filters wird in Verbindung mit stream_get_meta_data verwendet, um detaillierte Informationen über den Fluss zu erhalten

stream_get_filters wird in Verbindung mit stream_get_meta_data verwendet, um detaillierte Informationen über den Fluss zu erhalten

gitbox 2025-05-27

In PHP ist Stream ein sehr leistungsstarkes abstraktes Konzept, mit dem verschiedene Datenquellen und Ziele wie Dateien, Netzwerke und Speicher einheitlich verarbeitet werden. Wenn wir Ströme manipulieren, ist es sehr wichtig, ihre Filter und Metadaten zu verstehen. In diesem Artikel wird vorgestellt, wie Sie stream_get_filters () und stream_get_meta_data () in Kombination verwenden, um detaillierte Informationen zum Stream zu erhalten.

1 ?? Was ist stream_get_filters () ?

Stream_get_filters () ist eine integrierte PHP-Funktion, die alle aktuellen verfügbaren Stream-Filter auflistet. Stream -Filter können verwendet werden, um Daten in Streams wie Komprimierung, Verschlüsselung, Codierung und Konvertierung zu ändern.

 <?php
$filters = stream_get_filters();
print_r($filters);
?>

Führen Sie diesen Code aus und Sie sehen möglicherweise eine solche Ausgabe:

 Array
(
    [0] => string.rot13
    [1] => string.toupper
    [2] => zlib.inflate
    [3] => zlib.deflate
    ...
)

Dadurch werden die in der aktuellen PHP -Konfiguration unterstützten Filter angegeben.

2 ?? Was ist stream_get_meta_data () ?

Stream_get_meta_data () wird verwendet, um Meta -Informationen eines geöffneten Streams zu erhalten. Es gibt ein assoziatives Array zurück, das verschiedene Details enthält, z. B.:

  • Ist der Stream lesbar oder schriftlich?

  • Ob das Ende der Datei (EOF) erreicht ist

  • Kapselungsprotokoll (z. B. HTTP , Datei )

  • Ob es blockiert ist

  • Zeitüberschreitungseinstellung

Beispiel:

 <?php
$fp = fopen('http://gitbox.net/', 'r');
$meta = stream_get_meta_data($fp);
print_r($meta);
fclose($fp);
?>

Die Ausgabe ist ähnlich:

 Array
(
    [wrapper_type] => http
    [stream_type] => tcp_socket/ssl
    [mode] => r
    [unread_bytes] => 0
    [seekable] =>
    [timed_out] =>
    [blocked] => 1
    [eof] =>
)

3 ?? Verwenden Sie in Kombination: Erhalten Sie detaillierte Informationen zum Fluss

Wir können die beiden kombinieren, zuerst den unterstützten Filter erhalten, dann einen Stream öffnen, seine Meta-Information anzeigen und versuchen, einen Filter an ihn zu befestigen.

Beispielcode:

 <?php
// Listen Sie derzeit verfügbare Filter auf
$filters = stream_get_filters();
echo "Liste der verfügbaren Filter:\n";
foreach ($filters as $filter) {
    echo "- $filter\n";
}

// Offen a HTTP fließen
$url = 'http://gitbox.net/';
$fp = fopen($url, 'r');

if (!$fp) {
    die("Nicht öffnen können $url\n");
}

// 查看fließen的元数据
$meta = stream_get_meta_data($fp);
echo "\nfließen的元信息:\n";
print_r($meta);

// Versuchen Sie, einen Filter anzubringen(Wenn unterstützt zlib.inflate)
if (in_array('zlib.inflate', $filters)) {
    stream_filter_append($fp, 'zlib.inflate', STREAM_FILTER_READ);
    echo "Beigefügt zlib.inflate 过滤器到fließen。\n";
} else {
    echo "zlib.inflate Filter nicht verfügbar。\n";
}

fclose($fp);
?>

4 ?? Notizen

  • Nicht alle Streams unterstützen alle Filter. Beispielsweise unterstützen HTTP -Streams Zlib.inflate möglicherweise nicht und müssen anhand des Kontextes beurteilt werden.

  • Bevor Sie Stream_Filter_Append () verwenden, verwenden Sie am besten Stream_get_filters (), um zu überprüfen, ob der Filter existiert.

  • stream_get_meta_data () gibt nur den aktuellen Status pro Anruf zurück, und der Stream -Status kann sich mit Lesen oder Schreiben ändern.