PHP에서 스트림 필터는 데이터를 읽거나 스트림에 작성하기 전에 처리 할 수있는 강력한 메커니즘입니다. 예를 들어 파일을 읽을 때 컨텐츠를 대문자로 자동 변환하거나 네트워크 요청에 쓸 때 컨텐츠를 자동으로 압축 할 수 있습니다.
현재 PHP 환경에로드 된 모든 필터를 보려면 stream_get_filters () 함수를 사용할 수 있습니다. 이 함수는 등록 된 모든 필터 이름을 포함하는 배열을 반환합니다.
아래의 특정 사용 예를 살펴 보겠습니다.
<?php
$filters = stream_get_filters();
echo "로드 된 필터 목록:\n";
foreach ($filters as $filter) {
echo "- {$filter}\n";
}
?>
이 코드를 실행 한 후에는 PHP 환경에 따라 다음과 유사한 출력이 표시됩니다.
로드 된 필터 목록:
- string.rot13
- string.toupper
- string.tolower
- convert.iconv.*
- convert.*
- zlib.*
- bzip2.*
이 필터는 흐름을 동적으로 처리하기 위해 Stream_Filter_Append () , Stream_Filter_Prepend () 등과 같은 함수에서 직접 사용할 수 있습니다.
텍스트 파일 example.txt 가 있고 내용이 모두 소문자라고 가정합니다. 우리는 그것을 읽고 출력 할 때 자동으로 대문자로 변환하려고합니다.
<?php
$filename = 'example.txt';
$handle = fopen($filename, 'r');
if ($handle) {
stream_filter_append($handle, 'string.toupper');
while (!feof($handle)) {
echo fgets($handle);
}
fclose($handle);
} else {
echo "파일을 열 수 없습니다: {$filename}";
}
?>
이 코드는 strtoupper ()를 수동으로 호출하지 않고 파일을 읽을 때 컨텐츠를 대문자로 자동 변환합니다.
코드가 특정 필터에 의존하는 경우 먼저로드되는지 확인하는 것이 가장 좋습니다.
<?php
$neededFilter = 'string.toupper';
$filters = stream_get_filters();
if (in_array($neededFilter, $filters)) {
echo "필터 {$neededFilter} 짐을 실은,사용할 준비가되었습니다。\n";
} else {
echo "필터 {$neededFilter} 사용할 수 없습니다,확인하세요PHP구성。\n";
}
?>
경우에 따라 Php : // 필터 에 액세스하기 위해 URL을 통해 스트림 필터를 사용할 수 있습니다.
<?php
$url = 'php://filter/read=string.toupper/resource=https://gitbox.net/example.txt';
$content = file_get_contents($url);
if ($content !== false) {
echo $content;
} else {
echo "원격 자원을 읽을 수 없습니다。";
}
?>
이 코드는 https://gitbox.net/example.txt 에서 컨텐츠를 읽을 때 자본화로 직접 변환합니다.