PHP에서 스트림은 파일, 네트워크 연결, 입력 및 출력 작업을 처리하기위한 핵심 메커니즘 중 하나입니다. PHP는 강력한 스트림 처리 인터페이스를 제공하여 스트리밍 데이터를보다 유연하고 효율적으로 만듭니다. 특히 스트림에서 데이터를 필터링하고 처리해야 할 때 두 가지 기능 Stream_get_filters 및 Stream_Filter_Append 기능은 매우 유용한 도구가됩니다.
stream_get_filters 함수는 사용 가능한 모든 스트림 필터 이름을 포함하는 배열을 반환합니다. 스트림 필터는 스트림에서 데이터를 처리하기위한 메커니즘으로, 스트림의 데이터를 다양한 방식으로 읽거나 쓰거나 수정할 수 있습니다.
$filters = stream_get_filters();
print_r($filters);
위의 코드는 등록 된 모든 스트림 필터를 나열합니다. 이 필터를 사용하여 데이터 인코딩 변환, 암호화, 압축 등과 같은 스트리밍 데이터를 다르게 처리 할 수 있습니다.
stream_filter_append 함수를 사용하면 지정된 스트림에 필터를 추가 할 수 있습니다. 이 기능을 사용하면 오픈 스트림에 필터를 적용하여 스트림의 데이터를 실시간으로 처리 할 수 있습니다. 이 함수의 구문은 다음과 같습니다.
stream_filter_append($stream, $filtername, $read_write = STREAM_FILTER_READ, $params = null);
$ stream : 추가 필터가 필요한 스트림 리소스.
$ filtername : 필터의 이름.
$ read_write : 필터가 읽기 스트림, 쓰기 스트림 또는 둘 다에 적용되는지 여부를 지정합니다.
$ params : 추가 매개 변수가 필터로 전달되었습니다.
PHP에서 스트림 데이터를 효율적으로 처리 해야하는 경우 Stream_get_Filters 및 Stream_Filter_Append가 함께 작동하여 다양한 요구에 따라 올바른 필터를 선택하고 오픈 스트림에 적용 할 수 있습니다.
다음은 stream_get_filters 및 stream_filter_append를 사용하여 파일 스트림을 처리하는 예입니다.
<?php
// 사용 가능한 모든 스트림 필터를 얻으십시오
$filters = stream_get_filters();
echo "사용 가능한 필터:\n";
print_r($filters);
// 파일 스트림을 엽니 다
$file = fopen('example.txt', 'r+');
if (!$file) {
die('파일을 열 수 없습니다');
}
// 데이터를 대문자로 변환합니다(이 필터가 존재한다고 가정하십시오)
$filter_name = 'string.toupper';
// 필터가 있는지 확인하십시오
if (in_array($filter_name, $filters)) {
// 필터를 파일 스트림에 첨부하십시오
stream_filter_append($file, $filter_name, STREAM_FILTER_READ);
echo "필터가 추가되었습니다 '$filter_name' 파일 스트림에 첨부하십시오\n";
} else {
echo "필터 '$filter_name' 존재하지 않습니다\n";
}
// 파일 데이터 및 출력을 읽습니다
while (($line = fgets($file)) !== false) {
echo $line;
}
// 파일 스트림을 닫습니다
fclose($file);
?>
위의 코드에서는 먼저 Stream_get_Filters를 사용하여 사용 가능한 모든 스트림 필터를 얻은 다음 String.toupper 라는 필터가 있는지 확인합니다. 필터가 존재하면 스트림_Filter_Append를 사용하여 파일 스트림에 추가하여 파일의 모든 데이터를 대문자로 변환합니다.
스트림 필터를 통해 전체 데이터를 메모리에로드하지 않고 스트리밍하는 동안 데이터를 실시간으로 수정할 수 있으며, 이는 많은 양의 데이터를 처리하는 데 특히 효율적입니다. 예를 들어, 대형 파일을 처리 할 때 스트림 필터를 사용하면 데이터를 한 번씩 읽고 처리 할 수 있으며, 전체 파일을 메모리에 한 번에로드하는 것을 피하고 메모리를 저장하고 처리 효율성을 향상시킬 수 있습니다.
스트림 필터는 파일 스트림뿐만 아니라 네트워크 연결과 같은 다른 스트림에도 적용 할 수 있습니다. 네트워크 스트림에서 데이터를 읽고 암호로 전송해야한다고 가정하면 다음을 수행 할 수 있습니다.
<?php
// 하나를 열어주세요 gitbox.net 네트워크 연결
$fp = fopen("tcp://gitbox.net:80", "r+");
if (!$fp) {
die("서버에 연결할 수 없습니다");
}
// 添加加密필터
$filter_name = 'mcrypt.des';
stream_filter_append($fp, $filter_name, STREAM_FILTER_READ);
// 암호화 된 데이터를 읽습니다
$data = fread($fp, 1024);
echo "암호화 된 데이터: " . $data;
// 연결을 닫으십시오
fclose($fp);
?>
이 예에서는 gitbox.net 에 대한 TCP 연결을 열고 암호화 필터를 스트림에 적용합니다. 이를 통해 네트워크 데이터 전송을 수행 할 때 데이터 보안을 보장합니다.
Stream_get_Filters 와 Stream_Filter_Append 의 조합을 통해 PHP 개발자는 스트리밍 데이터를 유연하고 효율적으로 처리 할 수 있으며, 이는 파일 처리 또는 네트워크 데이터 전송 여부에 관계없이 프로그램의 성능 및 신뢰성을 크게 향상시킬 수 있습니다.