In PHP ist stream_get_meta_data eine sehr nützliche Funktion, mit der Metadateninformationen zu Stream -Ressourcen erhalten werden können. Diese Metadaten enthalten wichtige Informationen über den Status, den Typ und die Frage, ob der Stream geöffnet ist. Zu verstehen, wie diese Funktion korrekt verwendet werden kann, ist für Entwickler unerlässlich, insbesondere wenn es erforderlich ist, mit Dateiströmen oder anderen Stream -Arten (z. B. Netzwerkströmen) umzugehen.
Datei -Stream -Metadaten bezieht sich auf einige zusätzliche Informationen über den Stream selbst. Die Metadaten eines Streams enthält normalerweise den Status des Streams, der Dateityp, der Codierungsmethode, unabhängig davon, ob er geöffnet wurde, offener Modus usw. Die Funktion Stream_get_Meta_Data wird verwendet, um diese Informationen zu erhalten. Es gibt den Dateiinhalt nicht direkt zurück, sondern bietet einen grundlegenden Status des Streams.
Die grundlegende Syntax der Funktion Stream_get_meta_data lautet wie folgt:
<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>Der Parameter $ stream ist eine gültige Dateistrom -Ressource (z. B. Stream -Ressource, die durch Funktionen wie fopen () , stream_socket_client () usw. erstellt wurden.
Diese Funktion gibt ein Array zurück, das die Metadaten des Streams enthält. Zu den gängigen Metadatenschlüssel gehören:
Timed_out : Booleaner Wert, der angibt, ob der Stream zeitlich festgelegt ist.
Blockiert : Boolescher Wert, der angibt, ob sich der Stream in einem blockierten Zustand befindet.
EOF : Booleaner Wert, der angibt, ob der Stream das Ende der Datei erreicht hat.
Stream_type : String, der den Typ des Streams darstellt (z. B. TCP , UDP , Datei usw.).
Wraper_type : String, die den Kapselungstyp des Streams darstellt.
Wrapper_Data : String, mit zusätzlichen Informationen zu eingekapselten Daten (z. B. HTTP -Antwortheader usw.).
Modus : Eine Zeichenfolge, die den Dateiöffnungsmodus angibt (z. B. R , W , A usw.).
Verwenden wir ein praktisches Beispiel, um zu verstehen, wie Sie Stream_get_Meta_Data verwenden, um die Metadaten eines Dateistroms zu erhalten.
<span><span><span class="hljs-meta"><?php</span></span><span>
</span><span><span class="hljs-comment">// Öffnen Sie einen Dateistrom</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">// Holen Sie sich die Metadaten des Dateistroms</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">// Ausgangsmetadaten</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">// Schließen Sie den Dateistrom</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>Verwenden Sie im obigen Beispiel zuerst fopen () , um ein Dateibeispiel zu öffnen. Das zurückgegebene $ metadata -Array kann den folgenden Inhalt enthalten:
<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 : Wenn es sich um einen Netzwerkstrom handelt, wird Ihnen Timed_out erfahren, ob der Stream aufgrund eines Auszeits unterbrochen wird. Für Dateiströme ist dieses Feld normalerweise leer.
Blockiert : Gibt an, ob sich der Stream im Blockierungsmodus befindet und normalerweise für Netzwerkströme verwendet wird. Dateiströme sind im Allgemeinen nicht davon betroffen.
EOF : Dieses Feld gibt true zurück, wenn sie am Ende der Datei gelesen werden, ansonsten falsch .
Stream_type : Zeigt den Typ des Streams an. Beispielsweise wird für normale Dateiströme die Datei hier zurückgegeben. Wenn es sich um eine Netzwerkverbindung handelt, kann dies TCP oder UDP zurückgeben.
Modus : Repräsentiert den Modus beim Öffnen des Streams, wie z. B. R als nur schreibgeschützte, w ist nur Schreibschreiber, A repräsentiert append write usw.
Zusätzlich zu den Verarbeitungsdateiströmen kann Stream_get_meta_data auch verwendet werden, um Metadaten von Netzwerkströmen zu erhalten. Wenn Sie den HTTP -Anforderungsstrom als Beispiel übernehmen, lautet das Code -Beispiel wie folgt:
<span><span><span class="hljs-meta"><?php</span></span><span>
</span><span><span class="hljs-comment">// Erstellen a TCP verbinden</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">// 获取verbinden流的元数据</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">// Ausgangsmetadaten</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">// Schließen Sie den Strom</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>Verwenden Sie in diesem Beispiel Stream_Socket_Client , um eine TCP -Verbindung zu erstellen und die Metadaten der Verbindung zu erhalten. Die zurückgegebenen Metadaten können weitere Informationen über den Netzwerkfluss enthalten, z.
Dateistrom vs Netzwerkstrom : Für Dateiströme und Netzwerkströme wird die von Stream_Get_Meta_Data zurückgegebene Metadaten variieren. Bei Netzwerkströmen schenkt Metadata dem Netzwerkstatus mehr Aufmerksamkeit, während es für Dateiflüsse hauptsächlich um den Öffnungsmodus der Datei und die Identifizierung am Ende der Datei kümmert.
Dateiflussinformationen abrufen : Das Feld EOF (Ende der Datei) ist besonders nützlich, wenn Sie Dateien verarbeiten, sodass Sie das Lesen von Inhalten über den Dateiumfang beim Lesen von Dateien vermeiden können.
Leistung : Während stream_get_meta_data sehr nützliche Informationen liefert, können häufige Anrufe zusätzliche Leistungsaufwand mit sich bringen, insbesondere für große Dateien oder Hochfrequenznetzwerkanforderungen. In normalen Fällen wird empfohlen, nur bei Bedarf anzurufen.
stream_get_meta_data ist eine sehr praktische Funktion bei der Verarbeitung von Streams. Es kann Ihnen helfen, die Metadaten des Stroms schnell zu erhalten und den Zustand des Stroms zu verstehen. Durch die angemessene Verwendung dieser Funktion können Entwickler Stream -Operationen effizienter debuggen und die Stabilität und Richtigkeit des Programms beim Lesen oder Schreiben von Streams sicherstellen. Unabhängig davon, ob es sich um einen Dateistrom, einen Netzwerkstrom oder andere Streams -Arten handelt, ist es entscheidend zu verstehen, wie Metadaten richtig erhalten und interpretiert werden können, um effiziente PHP -Programme zu schreiben.