PHPでは、 Stream_Get_Meta_Dataは、ストリームリソースに関するメタデータ情報を取得できる非常に便利な機能です。これらのメタデータには、ステータス、タイプ、およびストリームが開いているかどうかに関する重要な情報が含まれています。この機能を正しく使用する方法を理解することは、特にファイルストリームや他の種類のストリーム(ネットワークストリームなど)を処理する必要がある場合に、開発者にとって不可欠です。
ファイルストリームメタデータとは、ストリーム自体に関するいくつかの追加情報を指します。ストリームのメタデータには、通常、ストリームのステータス、ファイルタイプ、エンコードメソッド、開いているかどうか、オープンモードなどが含まれます。Stream_Get_Meta_Data関数は、この情報を取得するために使用されます。ファイルコンテンツを直接返すのではなく、ストリームの基本的な状態を提供します。
stream_get_meta_data関数の基本的な構文は次のとおりです。
<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>$ streamパラメーターは、有効なファイルストリームリソース( Fopen() 、 stream_socket_client()などの関数を介して作成されたストリームリソースなど)です。
この関数は、ストリームのメタデータを含む配列を返します。一般的なメタデータキーは次のとおりです。
Timed_out :ストリームがタイムアウトしたかどうかを示すブール値。
ブロック:ブール値、ストリームがブロックされた状態にあるかどうかを示します。
EOF :ブール値ストリームがファイルの終了に達したかどうかを示します。
Stream_Type :String、ストリームのタイプ( TCP 、 UDP 、ファイルなど)を表します。
wrapper_type :string、ストリームのカプセル化タイプを表します。
wrapper_data :文字列、カプセル化されたデータ(HTTP応答ヘッダーなど)に関する追加情報が含まれています。
モード:ファイルの開くモード( R 、 W 、 Aなどなど)を示す文字列。
実用的な例を使用して、 Stream_Get_Meta_Dataを使用してファイルストリームのメタデータを取得する方法を理解しましょう。
<span><span><span class="hljs-meta"><?php</span></span><span>
</span><span><span class="hljs-comment">// ファイルストリームを開きます</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">// ファイルストリームのメタデータを取得します</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">// 出力メタデータ</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">// ファイルストリームを閉じます</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>上記の例では、最初にFOPEN()を使用してファイルexample.txtを開き、 stream_get_meta_data()を使用してファイルストリームのメタデータを取得します。返された$メタデータアレイには、次のコンテンツが含まれる場合があります。
<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 :ネットワークストリームの場合、 Timed_outは、タイムアウトのためにストリームが中断されているかどうかを示します。ファイルストリームの場合、このフィールドは通常空です。
ブロック:通常はネットワークストリームに使用されるストリームがブロッキングモードであるかどうかを示します。ファイルストリームは通常、これによって影響を受けません。
EOF :このフィールドは、ファイルの最後まで読み取るとtrueを返します。
Stream_Type :ストリームのタイプを示します。たとえば、通常のファイルストリームの場合、ファイルはここから返されます。ネットワーク接続の場合、 TCPまたはUDPを返す場合があります。
モード: rが読み取り専用を表すなど、ストリームを開くときのモードを表します。
ファイルストリームの処理に加えて、 stream_get_meta_dataを使用して、ネットワークストリームのメタデータを取得することもできます。 HTTPリクエストストリームを例として使用すると、コードの例は次のとおりです。
<span><span><span class="hljs-meta"><?php</span></span><span>
</span><span><span class="hljs-comment">// aを作成します TCP 接続する</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">// 获取接続する流的元数据</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">// 出力メタデータ</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">// ストリームを閉じます</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>この例では、 Stream_Socket_Clientを使用してTCP接続を作成し、接続のメタデータを取得します。返されたメタデータには、ブロックされているか、タイムアウトされているかなど、ネットワークフローに関する詳細情報が含まれている場合があります。
ファイルストリームvsネットワークストリーム:ファイルストリームとネットワークストリームの場合、 stream_get_meta_dataによって返されるメタデータはさまざまです。ネットワークフローの場合、メタデータはネットワーク状態により多くの注意を払いますが、ファイルフローの場合、主にファイルの冒頭モードとファイルの最後の識別を気にします。
ファイルフロー情報の取得: EOF (ファイルの終了)フィールドは、ファイルを処理する場合に特に役立ちます。これにより、ファイルを読み取るときにファイルスコープを超えてコンテンツを読み取ることができません。
パフォーマンス: stream_get_meta_dataは非常に有用な情報を提供しますが、頻繁に通話することで、特に大規模なファイルや高頻度のネットワークリクエストの場合、追加のパフォーマンスが架空のパフォーマンスをもたらす可能性があります。通常の場合は、必要な場合にのみ電話をかけることをお勧めします。
Stream_get_meta_dataは、ストリームを処理する際に非常に実用的な機能です。ストリームのメタデータを迅速に取得し、ストリームの状態を理解するのに役立ちます。この機能を適切に使用することにより、開発者はストリーム操作をより効率的にデバッグでき、ストリームを読み書きするときにプログラムの安定性と正確性を確保できます。ファイルストリーム、ネットワークストリーム、または他の種類のストリームであろうと、メタデータを適切に取得および解釈する方法を理解することは、効率的なPHPプログラムを作成するために重要です。