PHP에서 Stream은 파일, 네트워크 연결, 메모리 데이터 등과 같은 다양한 유형의 데이터를 처리 할 수있는 매우 강력하고 유연한 기능입니다. 스트림은 데이터 읽기, 쓰기 및 변환과 같은 작업을 처리하는 데 매우 편리한 API를 제공합니다. 이러한 작업에서 Stream_get_Filters 및 Stream_Wrapper_Register 함수는 사용자 정의 스트림 처리 기능을 구현하는 키입니다. 이 기사는이 두 기능의 조합을 통해 사용자 정의 스트림 처리 기능을 구현하는 방법을 자세히 소개합니다.
PHP에서 스트림 필터를 사용하면 스트림에서 읽거나 쓰기 전에 데이터를 수정할 수 있습니다. 스트림 필터는 텍스트 인코딩, 암호화 및 암호 해독, 데이터 압축 및 데이터 형식 변환과 같은 작업을 처리하는 데 사용될 수 있습니다. PHP는 String.toupper (문자열 변환) 등과 같은 여러 내장 스트림 필터를 제공합니다.
stream_get_filters 함수는 현재 사용 가능한 스트림 필터 목록을 반환하는 데 사용됩니다. 이 기능을 통해 시스템에서 지원되는 스트림 필터를 확인한 다음 스트림에 적용 할 적절한 필터를 선택할 수 있습니다.
array stream_get_filters(void)
이 함수는 현재 등록 된 모든 스트림 필터 이름을 포함하는 배열을 반환합니다.
$filters = stream_get_filters();
print_r($filters);
이 코드는 현재 지원되는 모든 스트림 필터의 이름을 출력합니다.
stream_wrapper_register 함수는 사용자 정의 스트림 래퍼를 등록하는 데 사용됩니다. 이 기능을 사용하면 PHP가 특정 유형의 스트림을 처리 할 수 있도록 사용자 정의 프로토콜을 만들 수 있습니다. 사용자 정의 스트림 래퍼는 스트림 필터와 함께 사용하여 완전히 사용자 정의 된 데이터 처리 흐름을 생성 할 수 있습니다.
bool stream_wrapper_register ( string $protocol , string $classname )
$ 프로토콜 : 파일 , http 등 등록 할 프로토콜 이름.
$ className : StreamWrapper 인터페이스를 구현하는 클래스 이름입니다.
class MyStreamWrapper {
// 사용자 정의 스트림 처리 로직을 구현하십시오
}
stream_wrapper_register("myprotocol", "MyStreamWrapper");
위의 예에서는 MyProtocol 이라는 프로토콜을 등록하여 Custom MyStreamWrapper 클래스와 연결합니다. 현재 MyProtocol : // 로 시작하는 모든 URL은 처리를 위해 MyStreamWrapper 클래스에 양도됩니다.
Stream_get_Filters 및 Stream_Wrapper_Register를 사용하여 사용자 정의 스트림 처리 중에 스트림 필터를 유연하게 추가, 제거 또는 선택하여 특정 요구 사항을 충족시킬 수 있습니다.
사용자 정의 스트림 프로토콜 MyProtocol을 작성하고 스트림 필터를 적용해야한다고 가정하십시오. 우리는 다음과 같이 할 수 있습니다.
class MyStreamWrapper {
private $stream;
public function stream_open($path, $mode, $options, &$opened_path) {
// 열린 스트림
$this->stream = fopen($path, $mode);
return $this->stream !== false;
}
public function stream_read($count) {
return fread($this->stream, $count);
}
public function stream_write($data) {
return fwrite($this->stream, $data);
}
public function stream_close() {
fclose($this->stream);
}
}
// 사용자 정의 스트림 래퍼를 등록하십시오
stream_wrapper_register("myprotocol", "MyStreamWrapper");
// 흐름 필터 사용
$filters = stream_get_filters();
if (in_array('string.toupper', $filters)) {
stream_filter_append($this->stream, 'string.toupper');
}
// 사용자 정의 프로토콜 파일을 엽니 다
$file = fopen("myprotocol://example.txt", "r+");
$content = fread($file, 100);
echo $content;
fclose($file);
위의 예에서는 myProtocol 이라는 사용자 정의 스트림 프로토콜과 String.toupper 스트림 필터가 사용 가능한지 확인하기 위해 myProtocol과 사용하였습니다. 사용 가능한 경우 Stream_Filter_Append를 통해 필터를 적용하여 읽기 내용이 자동으로 대문자로 변환됩니다.
Stream_get_Filters 및 Stream_Wrapper_Register 를 사용하여 특정 데이터 처리 요구를 충족시키기 위해 유연한 사용자 정의 스트림 처리 기능을 만들 수 있습니다. Stream_get_Filters는 스트림 필터 관리 기능을 제공하는 반면 Stream_Wrapper_Register를 사용하면 사용자 지정 프로토콜에 맞춤형 스트림 작업을 구현할 수 있습니다. 이 둘의 조합은 스트림 처리에서 PHP의 기능을 크게 확장하고 코드의 확장 성과 유연성을 향상시킬 수 있습니다.