Dans PHP, Stream_get_Meta_Data est une fonction très utile qui peut obtenir des informations sur les métadonnées sur les ressources du flux. Ces métadonnées contiennent des informations importantes sur l'état, le type et si le flux est ouvert. Comprendre comment utiliser cette fonction correctement est essentiel pour les développeurs, en particulier lorsqu'il est nécessaire de traiter les flux de fichiers ou d'autres types de flux (tels que les flux de réseau).
Les métadonnées de flux de fichiers se réfèrent à certaines informations supplémentaires sur le flux lui-même. Les métadonnées d'un flux incluent généralement l'état du flux, le type de fichier, la méthode de codage, qu'il ait été ouvert, mode ouvert, etc. La fonction Stream_get_meta_data est utilisée pour obtenir ces informations. Il ne renvoie pas directement le contenu du fichier, mais fournit un état de base du flux.
La syntaxe de base de la fonction Stream_get_Meta_Data est la suivante:
<span><span><span class="hljs-title function_ invoke__">stream_get_meta_data</span></span><span>(resource </span><span><span class="hljs-variable">$stream</span></span><span>): </span><span><span class="hljs-keyword">array</span></span><span>
</span></span>Le paramètre $ Stream est une ressource de flux de fichiers valide (tel que la ressource Stream créée via des fonctions telles que fopen () , stream_socket_client (), etc.).
Cette fonction renvoie un tableau contenant les métadonnées du flux. Les clés de métadonnées courantes comprennent:
TIMED_OUT : Valeur booléenne indiquant si le flux a expiré.
Bloqué : valeur booléenne, indiquant si le flux est dans un état bloqué.
EOF : valeur booléenne indiquant si le flux a atteint la fin du fichier.
Stream_Type : String, représentant le type de flux (tel que TCP , UDP , fichier , etc.).
wrapper_type : String, représentant le type d'encapsulation du flux.
wrapper_data : chaîne, contenant des informations supplémentaires sur les données encapsulées (telles que l'en-tête de réponse HTTP, etc.).
Mode : une chaîne, indiquant le mode d'ouverture du fichier (tel que R , W , A , etc.).
Utilisons un exemple pratique pour comprendre comment utiliser stream_get_meta_data pour obtenir les métadonnées d'un flux de fichiers.
<span><span><span class="hljs-meta"><?php</span></span><span>
</span><span><span class="hljs-comment">// Ouvrez un flux de fichiers</span></span><span>
</span><span><span class="hljs-variable">$stream</span></span><span> = </span><span><span class="hljs-title function_ invoke__">fopen</span></span><span>(</span><span><span class="hljs-string">"example.txt"</span></span><span>, </span><span><span class="hljs-string">"r"</span></span><span>);
</span><span><span class="hljs-comment">// Obtenez les métadonnées du flux de fichiers</span></span><span>
</span><span><span class="hljs-variable">$metadata</span></span><span> = </span><span><span class="hljs-title function_ invoke__">stream_get_meta_data</span></span><span>(</span><span><span class="hljs-variable">$stream</span></span><span>);
</span><span><span class="hljs-comment">// Métadonnées de sortie</span></span><span>
</span><span><span class="hljs-title function_ invoke__">print_r</span></span><span>(</span><span><span class="hljs-variable">$metadata</span></span><span>);
</span><span><span class="hljs-comment">// Fermez le flux de fichiers</span></span><span>
</span><span><span class="hljs-title function_ invoke__">fclose</span></span><span>(</span><span><span class="hljs-variable">$stream</span></span><span>);
</span><span><span class="hljs-meta">?></span></span><span>
</span></span>Dans l'exemple ci-dessus, utilisez d'abord fopen () pour ouvrir un fichier Exemple.txt , puis utilisez Stream_get_Meta_Data () pour obtenir les métadonnées du flux de fichiers. Le tableau de métadonnées $ retourné peut contenir le contenu suivant:
<span><span><span class="hljs-title function_ invoke__">Array</span></span><span>
(
[timed_out] =>
[blocked] =>
[eof] =>
[stream_type] => file
[wrapper_type] =>
[wrapper_data] =>
[mode] => r
[seekable] => </span><span><span class="hljs-number">1</span></span><span>
[uri] => example.txt
)
</span></span>TIMED_OUT : S'il s'agit d'un flux de réseau, TIMED_OUT vous dira si le flux est interrompu en raison d'un délai d'attente. Pour les flux de fichiers, ce champ est généralement vide.
Bloqué : indique si le flux est en mode de blocage, généralement utilisé pour les flux de réseau. Les flux de fichiers ne sont généralement pas affectés par cela.
EOF : Ce champ renvoie True lors de la lecture à la fin du fichier, sinon faux .
Stream_Type : indique le type de flux. Par exemple, pour les flux de fichiers ordinaires, le fichier est renvoyé ici; S'il s'agit d'une connexion réseau, il peut renvoyer TCP ou UDP .
MODE : représente le mode lors de l'ouverture du flux, comme R représente la lecture seule, W représente l'écriture uniquement, A représente APPEND WRITE, etc.
En plus du traitement des flux de fichiers, Stream_get_Meta_Data peut également être utilisé pour obtenir des métadonnées des flux de réseau. Prenant l'exemple du flux de demande HTTP, l'exemple de code est le suivant:
<span><span><span class="hljs-meta"><?php</span></span><span>
</span><span><span class="hljs-comment">// Créer un TCP connecter</span></span><span>
</span><span><span class="hljs-variable">$stream</span></span><span> = </span><span><span class="hljs-title function_ invoke__">stream_socket_client</span></span><span>(</span><span><span class="hljs-string">"tcp://www.example.com:80"</span></span><span>, </span><span><span class="hljs-variable">$errno</span></span><span>, </span><span><span class="hljs-variable">$errstr</span></span><span>, </span><span><span class="hljs-number">30</span></span><span>);
</span><span><span class="hljs-comment">// 获取connecter流的元数据</span></span><span>
</span><span><span class="hljs-variable">$metadata</span></span><span> = </span><span><span class="hljs-title function_ invoke__">stream_get_meta_data</span></span><span>(</span><span><span class="hljs-variable">$stream</span></span><span>);
</span><span><span class="hljs-comment">// Métadonnées de sortie</span></span><span>
</span><span><span class="hljs-title function_ invoke__">print_r</span></span><span>(</span><span><span class="hljs-variable">$metadata</span></span><span>);
</span><span><span class="hljs-comment">// Fermer le ruisseau</span></span><span>
</span><span><span class="hljs-title function_ invoke__">fclose</span></span><span>(</span><span><span class="hljs-variable">$stream</span></span><span>);
</span><span><span class="hljs-meta">?></span></span><span>
</span></span>Dans cet exemple, utilisez Stream_Socket_Client pour créer une connexion TCP et obtenir les métadonnées de la connexion. Les métadonnées retournées peuvent contenir plus d'informations sur le flux de réseau, par exemple s'il est bloqué, expiré, etc.
Stream de fichiers vs flux de réseau : pour les flux de fichiers et les flux de réseau, les métadonnées renvoyées par Stream_get_Meta_Data varieront. Pour les flux de réseau, les métadonnées accordent plus d'attention à l'état du réseau, tandis que pour les flux de fichiers, il se soucie principalement du mode d'ouverture du fichier et de l'identification à la fin du fichier.
Obtenez des informations sur le flux de fichiers : le champ EOF (fin du fichier) est particulièrement utile lors du traitement des fichiers, ce qui vous aide à éviter de lire le contenu au-delà de la portée du fichier lors de la lecture de fichiers.
Performances : Bien que Stream_get_Meta_data fournisse des informations très utiles, les appels fréquents peuvent apporter des frais généraux supplémentaires, en particulier pour les fichiers volumineux ou les demandes de réseau haute fréquence. Dans les cas normaux, il est recommandé d'appeler uniquement en cas de besoin.
Stream_get_meta_data est une fonction très pratique lors du traitement des flux. Il peut vous aider à obtenir rapidement les métadonnées du flux et à comprendre l'état du flux. En utilisant de manière appropriée cette fonction, les développeurs peuvent déboguer les opérations de flux plus efficacement, garantissant la stabilité et l'exactitude du programme lors de la lecture ou de l'écriture de flux. Qu'il s'agisse d'un flux de fichiers, d'un flux de réseau ou d'autres types de flux, de comprendre comment obtenir et interpréter correctement les métadonnées est crucial pour rédiger des programmes PHP efficaces.