PHP에서 Stream은 파일, 네트워크 및 메모리와 같은 다양한 데이터 소스 및 대상을 균일하게 처리하는 데 사용되는 매우 강력한 추상 개념입니다. 스트림을 조작 할 때 필터와 메타 데이터를 이해하는 것이 매우 중요합니다. 이 기사는 스트림에 대한 자세한 정보를 얻기 위해 Stream_get_filters () 및 Stream_get_meta_data ()를 사용하는 방법을 소개합니다.
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 구성에서 지원되는 필터를 알려줍니다.
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] =>
)
우리는 두 가지를 결합하고, 먼저 지원되는 필터를 얻은 다음 스트림을 열고, 메타 정보를보고, 필터를 연결하려고 시도 할 수 있습니다.
샘플 코드 :
<?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);
?>
모든 스트림이 모든 필터를 지원하는 것은 아닙니다. 예를 들어, HTTP 스트림은 Zlib.inflate를 지원하지 않을 수 있으며 상황에 따라 판단해야합니다.
Stream_Filter_Append ()를 사용하기 전에 Filter가 존재하는지 확인하기 위해 Stream_get_filters ()를 사용하는 것이 가장 좋습니다.
stream_get_meta_data ()는 통화 당 현재 상태 만 반환하고 스트림 상태는 읽기 또는 쓰기로 변경 될 수 있습니다.