Position actuelle: Accueil> Derniers articles> Comment utiliser Stream_get_Filters en combinaison avec Stream_get_Meta_Data pour obtenir des informations détaillées du flux?

Comment utiliser Stream_get_Filters en combinaison avec Stream_get_Meta_Data pour obtenir des informations détaillées du flux?

gitbox 2025-05-27

Dans PHP, Stream est un concept abstrait très puissant utilisé pour traiter uniformément diverses sources de données et cibles telles que les fichiers, les réseaux et la mémoire. Lorsque nous manipulons les flux, il est très important de comprendre leurs filtres et leurs métadonnées. Cet article présentera comment utiliser stream_get_filters () et stream_get_meta_data () en combinaison pour obtenir des informations détaillées sur le flux.

1 ?? Qu'est-ce que Stream_get_Filters () ?

Stream_get_Filters () est une fonction intégrée PHP qui répertorie tous les filtres de flux disponibles actuels. Les filtres de flux peuvent être utilisés pour modifier les données dans les flux, tels que la compression, le chiffrement, le codage et la conversion.

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

Exécutez ce code et vous pouvez voir la sortie comme ceci:

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

Cela nous indique les filtres pris en charge dans la configuration PHP actuelle.

2 ?? Qu'est-ce que Stream_get_meta_data () ?

Stream_get_meta_data () est utilisé pour obtenir des méta-informations d'un flux ouvert. Il renvoie un tableau associatif contenant divers détails, tels que:

  • Le flux est-il lisible ou écrite?

  • Si la fin du fichier (EOF) est atteinte

  • Protocole d'encapsulation (comme HTTP , fichier )

  • Si elle est bloquée

  • Délai d'expiration

Exemple:

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

La sortie est similaire:

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

3 ?? Utiliser en combinaison: obtenir des informations détaillées sur le flux

Nous pouvons combiner les deux, obtenir d'abord le filtre pris en charge, puis ouvrir un flux, afficher sa méta-information et essayer de lui attacher un filtre.

Exemple de code:

 <?php
// Liste des filtres actuellement disponibles
$filters = stream_get_filters();
echo "Liste des filtres disponibles:\n";
foreach ($filters as $filter) {
    echo "- $filter\n";
}

// Ouvrir un HTTP couler
$url = 'http://gitbox.net/';
$fp = fopen($url, 'r');

if (!$fp) {
    die("Impossible d&#39;ouvrir $url\n");
}

// 查看couler的元数据
$meta = stream_get_meta_data($fp);
echo "\ncouler的元信息:\n";
print_r($meta);

// Essayez de fixer un filtre(Si vous êtes soutenu zlib.inflate)
if (in_array('zlib.inflate', $filters)) {
    stream_filter_append($fp, 'zlib.inflate', STREAM_FILTER_READ);
    echo "Ci-joint zlib.inflate 过滤器到couler。\n";
} else {
    echo "zlib.inflate Filtre non disponible。\n";
}

fclose($fp);
?>

4 ?? Notes

  • Tous les flux ne prennent pas en charge tous les filtres. Par exemple, les flux HTTP peuvent ne pas prendre en charge Zlib.inflate et doivent être jugés en fonction du contexte.

  • Avant d'utiliser stream_filter_append (), il est préférable d'utiliser Stream_get_Filters () pour vérifier si le filtre existe.

  • Stream_get_meta_data () Renvoie uniquement l'état actuel par appel, et l'état de flux peut changer avec la lecture ou l'écriture.