PHP에서 Stream은 파일, 네트워크, 장치 등의 입력 및 출력을 처리하는 메커니즘입니다. PHP는 스트림에서 데이터를 필터링하고 수정할 수있는 강력한 스트림 필터를 제공합니다. stream_get_filters 및 stream_filter_remove 는 일반적으로 사용되는 스트림 필터링 기능입니다. 이 기사는이 두 기능을 결합하여 스트림 필터링을 구현하는 방법을 자세히 설명합니다.
스트림 필터는 스트림에 적용되는 메커니즘으로 스트림 데이터를 수정, 변환 및 필터링 할 수 있습니다. 예를 들어 스트림 필터를 사용하여 파일 스트림에서 암호화, 해독, 압축, 압축 압축 및 기타 작업을 수행 할 수 있습니다.
PHP는 다양한 내장 스트림 필터를 제공하며 사용자는 스트림 필터를 사용자 정의 할 수도 있습니다. String.toupper 와 같은 공통 필터는 스트림의 데이터를 대문자로 변환 할 수 있습니다.
stream_get_filters () 함수는 PHP에서 사용 가능한 모든 스트림 필터 목록을 반환합니다. 이 함수는 모든 필터 이름을 포함하는 배열을 반환합니다.
$filters = stream_get_filters();
print_r($filters);
이 코드 실행에는 사용 가능한 모든 필터가 나열됩니다. 이 목록을 통해 모든 PHP 지원 필터를보고 필요에 적합한 필터를 결정할 수 있습니다.
stream_filter_remove () 함수는 스트림에 적용된 필터를 제거하는 데 사용됩니다. 즉, 스트림을 처리하기 위해 더 이상 필터가 필요하지 않으면이 기능을 사용하여 제거 할 수 있습니다. 이 작업은 흐름을 닫지 않지만 흐름 필터링을 중지합니다.
$filter = stream_filter_append($stream, 'string.toupper');
stream_filter_remove($filter);
이 코드에서 Stream_Filter_Append ()는 데이터를 대문자로 변환하는 Stream $ Stream 에 필터를 추가 한 다음 Stream_Filter_Remove () 를 통해이 필터를 제거하는 데 사용됩니다.
텍스트 스트림이 있고 스트림에 필터를 추가하여 모든 텍스트를 대문자로 변환하려고한다고 가정합니다. 특정 조건 에서이 필터를 제거하고 원본 텍스트를 복원하십시오.
<?php
// 텍스트 스트림을 엽니 다
$stream = fopen('php://temp', 'r+');
fwrite($stream, "Hello World! This is a test message.");
rewind($stream);
// 사용 가능한 모든 필터를 얻으십시오
$filters = stream_get_filters();
echo "Available filters:\n";
print_r($filters);
// 필터를 적용하십시오,콘텐츠를 대문자로 변환합니다
$filter = stream_filter_append($stream, 'string.toupper');
// 스트림에서 데이터를 읽고 출력합니다(이미 자본에 있습니다)
rewind($stream);
echo "After applying 'string.toupper' filter:\n";
echo fread($stream); // 산출: HELLO WORLD! THIS IS A TEST MESSAGE.
// 필터를 제거하십시오
stream_filter_remove($filter);
// 重新스트림에서 데이터를 읽고 출력합니다(원본 텍스트를 복원하십시오)
rewind($stream);
echo "\nAfter removing the filter:\n";
echo fread($stream); // 산출: Hello World! This is a test message.
?>
스트림 열기 : fopen ( 'php : // temp', 'r+')을 통해 임시 메모리 스트림을 열고 텍스트 데이터를 작성합니다.
사용 가능한 모든 필터를 가져옵니다 : stream_get_filters ()를 사용하여 등록 된 필터를 모두 가져 와서 인쇄하십시오. 이 목록을 통해 적용하려는 필터를 선택할 수 있습니다.
필터 적용 : stream_filter_append () 함수를 사용하여 String.toupper 필터를 스트림에 추가하여 모든 텍스트를 대문자로 변환합니다.
필터 제거 : Stream_Filter_Remove ()를 사용하여 스트림의 데이터가 원래 상태로 돌아 오도록 필터를 제거하십시오.
출력 데이터 : 필터를 적용하고 제거한 후 Fread ()를 통해 스트림에서 데이터를 출력하여 필터 효과의 변경 사항을 보여줍니다.
Available filters:
Array
(
[0] => string.toupper
[1] => convert.iconv.utf-8.utf-16
[2] => convert.iconv.utf-16.utf-8
[3] => string.rot13
[4] => string.lower
...
)
After applying 'string.toupper' filter:
HELLO WORLD! THIS IS A TEST MESSAGE.
After removing the filter:
Hello World! This is a test message.
stream_get_filters () 함수는 스트림 데이터를 처리하는 데 직접 사용할 수있는 모든 필터를 반환합니다.
String.toupper 필터는 스트림의 모든 것을 대문자로 변환합니다.
stream_filter_remove () 함수가 필터를 제거한 후 스트림의 내용은 원래 상태로 돌아갑니다.
stream_get_filters 및 stream_filter_remove 를 통해 흐름 데이터 프로세스를 유연하게 제어 할 수 있습니다. 이 두 기능은 동적으로 변화하는 유량 필터링이 필요한 시나리오에서 매우 유용합니다. 런타임에 다른 필터를 선택하거나 특정 조건에서 제거하여 원래 데이터를 복원 할 수도 있습니다.