파일 및 네트워크 스트림을 처리 할 때 PHP는 강력한 기능 Stream_Get_Filters를 제공하여 현재 사용 가능한 스트림 필터를 얻을 수 있습니다. 이 필터를 사용하면 스트림을 읽을 때 추가 오류 처리 메커니즘을 추가 할 수 있습니다. 이는 프로그램 견고성 및 오류 모니터링을 향상시키는 데 매우 도움이됩니다.
이 기사에서는 스트림을 읽을 때 Stream_get_Filters 기능을 사용하여 스트림을 읽을 때 사용자 정의 오류 처리를 추가하고 스트림에서 오류 정보를 캡처하고 처리 할 수 있는지 확인합니다.
PHP에서 스트림 필터는 스트림 데이터를 처리 할 수있는 도구입니다. 읽기 및 쓸 때 데이터를 변환하거나 필터링 할 수 있습니다. 스트림 필터는 일반적으로 압축, 암호화, 캐릭터 인코딩 변환 및 기타 시나리오에 사용됩니다.
예를 들어, Zlib.inflate 필터는 데이터를 압축 할 수 있습니다. String.rot13은 13 Rot13 암호화 문자열 등을 사용할 수 있습니다. 흐름 필터를 사용하면 대류 작동 이보다 유연해질 수 있습니다.
stream_get_filters 함수는 현재 사용 가능한 스트림 필터 목록을 반환합니다. 이 기능은 스트림 데이터 디버깅, 처리 및 수정에 매우 유용합니다.
문법:
array stream_get_filters(void)
함수는 매개 변수가없고 배열을 반환하며 배열의 각 요소는 사용 가능한 스트림 필터를 나타냅니다.
스트림의 작동을보다 오류에 불쾌하게 만들기 위해 스트림 필터를 사용하여 스트림을 읽을 때 오류 처리를 추가 할 수 있습니다. 예를 들어, Stream_Filter_Append 함수를 통해 사용자 정의 오류 필터를 추가하여 스트림을 읽는 동안 오류를 포착하고 처리 할 수 있습니다.
HTTP 스트림을 읽어야한다고 가정하지만 스트림 읽기 중에 오류 처리를 추가하여 네트워크 실패, 연결 시간 초과 등과 같은 문제를 포착하기 위해 오류 처리를 추가하려고합니다. 여기에는 구체적인 구현이 있습니다.
<?php
// 사용 stream_get_filters 함수 현재 사용 가능한 스트림 필터를 봅니다
$filters = stream_get_filters();
print_r($filters);
// 오류 처리로 사용자 정의 필터를 만듭니다
class ErrorHandlingFilter extends php_user_filter {
public function filter($in, $out, &$consumed, $closing) {
// 입력 스트림을 가로 지르고 있습니다
while ($bucket = stream_bucket_make_writeable($in)) {
// 스트림에 오류 메시지가있는 경우,처리를 수행하십시오
if (strpos($bucket->data, 'error') !== false) {
$bucket->data = "Error encountered: " . $bucket->data;
}
// 출력 스트림에 데이터를 작성하십시오
stream_bucket_append($out, $bucket);
}
return PSFS_PASS_ON;
}
}
// 사용자 정의 오류 처리 필터를 등록하십시오
stream_filter_register("error_handling", "ErrorHandlingFilter");
// 열린 스트림
$stream = fopen("http://gitbox.net/somefile", "r");
// 이 스트림에 오류 처리 필터를 추가하십시오
stream_filter_append($stream, "error_handling");
// 데이터를 읽습니다
while (!feof($stream)) {
$line = fgets($stream);
echo $line;
}
// 스트림을 닫으십시오
fclose($stream);
?>
사용 가능한 필터보기 : Stream_get_filters () 함수를 사용하여 현재 환경에서 사용 가능한 모든 스트림 필터를 나열합니다. 이를 통해 스트리밍 데이터를 처리하는 데 사용할 수있는 기성품 필터를 이해하는 데 도움이됩니다.
사용자 정의 필터를 만듭니다 : ErrorHandlingFilter 클래스는 php_user_filter 에서 상속하고 필터 메소드를 재정의합니다. 이 방법에서는 각 입력 데이터 블록 (버킷)에 오류 정보가 포함되어 있는지 확인하고 해당 처리를 수행하는지 확인합니다.
사용자 정의 필터 등록 및 사용 : Stream_Filter_Register를 통해 사용자 정의 필터를 등록한 다음 스트림에서 Stream_Filter_Append를 통해 필터를 추가 할 수 있습니다.
스트림 및 출력을 읽으십시오 : fgets () 를 통해 스트림 데이터 라인을 라인별로 읽으십시오. 스트림에 오류 정보가 포함 된 경우 해당 오류 프롬프트를 출력에 추가합니다.
때로는 다른 스트림 필터를 동적으로 추가하거나 제거해야 할 수도 있습니다. stream_get_filters를 사용하면 시스템에 설치된 필터를 실시간으로보고 필요에 따라 오류 처리 메커니즘을 조정할 수 있습니다.
<?php
// 필터를 동적으로로드하고 스트림에 추가하십시오
$filters = stream_get_filters();
if (in_array('error_handling', $filters)) {
// 오류 처리 필터가 이미 존재하는 경우,추가하다
stream_filter_append($stream, 'error_handling');
} else {
echo "Error handling filter not available.\n";
}
// 열린 스트림并继续读取...
?>
이런 식으로, 동적 환경에서도 오류 처리 필터를 여전히로드하고 적용 할 수 있는지 확인할 수 있습니다.
Stream_get_filters 기능은 PHP 개발자에게 스트림 필터를보고 조작 할 수있는 유연한 방법을 제공합니다. 파일 스트림 또는 HTTP 스트림 등을 처리 할 때 스트림 필터를 사용하면 읽기 프로세스 중에 오류 처리 메커니즘을 향상시키는 데 도움이 될 수 있습니다. 사용자 정의 필터를 사용하면 오류를 잡고 처리 할 수있을뿐만 아니라 다른 요구에 따라 스트림 처리 방법을 유연하게 조정할 수 있습니다.
흐름 필터를 사용하면 코드의 유지 관리 및 견고성을 크게 향상시킬 수 있습니다. 특히 외부 데이터 소스 또는 네트워크 통신과 관련된 시나리오에서 오류 처리는 특히 중요합니다.