현재 위치: > 최신 기사 목록> Stream_get_filters는 흐름에 대한 자세한 정보를 얻기 위해 Stream_get_meta_data와 함께 사용됩니다.

Stream_get_filters는 흐름에 대한 자세한 정보를 얻기 위해 Stream_get_meta_data와 함께 사용됩니다.

gitbox 2025-05-27

PHP에서 Stream은 파일, 네트워크 및 메모리와 같은 다양한 데이터 소스 및 대상을 균일하게 처리하는 데 사용되는 매우 강력한 추상 개념입니다. 스트림을 조작 할 때 필터와 메타 데이터를 이해하는 것이 매우 중요합니다. 이 기사는 스트림에 대한 자세한 정보를 얻기 위해 Stream_get_filters ()Stream_get_meta_data ()를 사용하는 방법을 소개합니다.

1 ??? stream_get_filters () 란 무엇입니까?

Stream_get_filters () 는 현재 사용 가능한 모든 스트림 필터를 나열하는 PHP 내장 기능입니다. 스트림 필터는 압축, 암호화, 인코딩 및 변환과 같은 스트림에서 데이터를 수정하는 데 사용될 수 있습니다.

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

이 코드를 실행하면 다음과 같은 출력이 표시 될 수 있습니다.

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

이것은 현재 PHP 구성에서 지원되는 필터를 알려줍니다.

2 ?? stream_get_meta_data () 란 무엇입니까?

stream_get_meta_data ()는 오픈 스트림의 메타 정보를 얻는 데 사용됩니다. 다음과 같은 다양한 세부 사항을 포함하는 연관 배열을 반환합니다.

  • 스트림은 읽기 쉬운가 또는 쓰기 가능합니까?

  • 파일의 끝 (EOF)에 도달하는지 여부

  • 캡슐화 프로토콜 (예 : HTTP , 파일 )

  • 차단 여부

  • 시간 초과 설정

예:

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

출력은 비슷합니다.

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

3 ???? 조합으로 사용 : 흐름에 대한 자세한 정보를 얻으십시오

우리는 두 가지를 결합하고, 먼저 지원되는 필터를 얻은 다음 스트림을 열고, 메타 정보를보고, 필터를 연결하려고 시도 할 수 있습니다.

샘플 코드 :

 <?php
// 현재 사용 가능한 필터를 나열합니다
$filters = stream_get_filters();
echo "사용 가능한 필터 목록:\n";
foreach ($filters as $filter) {
    echo "- $filter\n";
}

// a HTTP 흐름
$url = 'http://gitbox.net/';
$fp = fopen($url, 'r');

if (!$fp) {
    die("열 수 없습니다 $url\n");
}

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

// 필터를 부착 해보십시오(지원되는 경우 zlib.inflate)
if (in_array('zlib.inflate', $filters)) {
    stream_filter_append($fp, 'zlib.inflate', STREAM_FILTER_READ);
    echo "첨부된 zlib.inflate 过滤器到흐름。\n";
} else {
    echo "zlib.inflate 필터를 사용할 수 없습니다。\n";
}

fclose($fp);
?>

4 ?? 메모

  • 모든 스트림이 모든 필터를 지원하는 것은 아닙니다. 예를 들어, HTTP 스트림은 Zlib.inflate를 지원하지 않을 수 있으며 상황에 따라 판단해야합니다.

  • Stream_Filter_Append ()를 사용하기 전에 Filter가 존재하는지 확인하기 위해 Stream_get_filters ()를 사용하는 것이 가장 좋습니다.

  • stream_get_meta_data ()는 통화 당 현재 상태 만 반환하고 스트림 상태는 읽기 또는 쓰기로 변경 될 수 있습니다.