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 : 스트림이 파일의 끝에 도달했는지 여부를 나타내는 부울 값.
스트림 유형 (예 : TCP , UDP , 파일 등)을 나타내는 String : String.
WRAPPER_TYPE : 스트림의 캡슐화 유형을 나타내는 문자열.
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 과 같은 스트림을 열 때 모드를 나타냅니다. r은 읽기 전용을 나타내고, w는 쓰기 전용을 나타내고, a는 첨부 쓰기 등을 나타냅니다.
파일 스트림을 처리하는 것 외에도 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 연결을 생성하고 연결의 메타 데이터를 가져옵니다. 반환 된 메타 데이터에는 네트워크 흐름에 대한 추가 정보가 차단되었는지, 시간 초과 등을 포함 할 수 있습니다.
파일 스트림 대 네트워크 스트림 : 파일 스트림 및 네트워크 스트림의 경우 Stream_get_meta_data 에서 반환 한 메타 데이터는 다릅니다. 네트워크 흐름의 경우 메타 데이터는 네트워크 상태에 더 많은주의를 기울이는 반면 파일 흐름의 경우 주로 파일의 개방 모드와 파일 끝에서 식별에 관심이 있습니다.
파일 흐름 정보 가져 오기 : 파일의 EOF (파일 끝) 필드는 파일을 처리 할 때 특히 유용하므로 파일을 읽을 때 파일 범위를 넘어서 콘텐츠를 읽지 않도록 도와줍니다.
성능 : Stream_Get_Meta_Data는 매우 유용한 정보를 제공하지만 자주 호출하면 특히 큰 파일 또는 고주파 네트워크 요청에 대해 추가 성능 오버 헤드를 가져올 수 있습니다. 정상적인 경우에는 필요할 때만 전화하는 것이 좋습니다.
Stream_get_meta_data는 스트림을 처리 할 때 매우 실용적인 기능입니다. 스트림의 메타 데이터를 빠르게 얻고 스트림의 상태를 이해하는 데 도움이 될 수 있습니다. 이 기능을 적절하게 사용함으로써 개발자는 스트림 작업을보다 효율적으로 디버그하여 스트림을 읽거나 쓰는 시점에 프로그램의 안정성과 정확성을 보장 할 수 있습니다. 파일 스트림, 네트워크 스트림 또는 기타 유형의 스트림이든 메타 데이터를 올바르게 얻고 해석하는 방법을 이해하는 것은 효율적인 PHP 프로그램을 작성하는 데 중요합니다.