php에서 stream_filter_append () 함수를 사용하면 스트림에 필터를 연결하여 스트림의 데이터를 실시간으로 처리하고 변환 할 수 있습니다. 이 기사는 Stream_Filter_Append ()를 사용하여 간단한 텍스트 변환 필터를 만들고 스트림에서 데이터를 조작하며 대문자 변환, 소문자 변환 등과 같은 일반적인 텍스트 변환을 수행하는 방법을 소개합니다.
Stream_Filter_Append () 는 PHP 내장 기능으로 필터를 특정 스트림에 추가 할 수 있습니다. 필터의 기능은 수정, 변환, 압축 등과 같은 스트림의 데이터를 처리하는 것입니다. 흐름 필터는 귀하가 내장 또는 사용자 정의 할 수 있습니다.
<span><span><span class="hljs-title function_ invoke__">stream_filter_append</span></span><span>(resource </span><span><span class="hljs-variable">$stream</span></span><span>, </span><span><span class="hljs-keyword">string</span></span><span> </span><span><span class="hljs-variable">$filtername</span></span><span>, </span><span><span class="hljs-keyword">int</span></span><span> </span><span><span class="hljs-variable">$read_write</span></span><span> = STREAM_FILTER_READ, </span><span><span class="hljs-keyword">mixed</span></span><span> </span><span><span class="hljs-variable">$params</span></span><span> = </span><span><span class="hljs-literal">null</span></span><span>): </span><span><span class="hljs-keyword">bool</span></span><span>
</span></span>$ stream : 필터를 부착하는 스트림.
$ filtername : 내장 필터 또는 사용자 정의 필터 일 수있는 필터의 이름입니다.
$ read_write : 스트림을 읽거나 쓸 것인지 지정합니다. Stream_Filter_Read는 읽기 스트림을 나타내고 Stream_Filter_Write는 쓰기 스트림을 나타냅니다.
$ params : 매개 변수가 필터에 전달되었습니다 (선택 사항).
다음은 텍스트 변환 필터를 작성하는 예입니다. 텍스트를 대문자로 변환하는 필터를 구현합니다.
먼저 간단한 필터 클래스를 만들고 php_user_filter 클래스를 상속하고 그 방법을 구현해야합니다. 이 필터는 스트림의 텍스트를 대문자로 변환합니다.
<span><span><span class="hljs-class"><span class="hljs-keyword">class</span></span></span><span> </span><span><span class="hljs-title">UppercaseFilter</span></span><span> </span><span><span class="hljs-keyword">extends</span></span><span> </span><span><span class="hljs-title">php_user_filter</span></span><span> {
</span><span><span class="hljs-keyword">public</span></span><span> </span><span><span class="hljs-function"><span class="hljs-keyword">function</span></span></span><span> </span><span><span class="hljs-title">filter</span></span><span>(</span><span><span class="hljs-params"><span class="hljs-variable">$in</span></span></span><span>, </span><span><span class="hljs-variable">$out</span></span><span>, &</span><span><span class="hljs-variable">$consumed</span></span><span>, </span><span><span class="hljs-variable">$closing</span></span><span>) {
</span><span><span class="hljs-keyword">while</span></span><span> (</span><span><span class="hljs-variable">$bucket</span></span><span> = </span><span><span class="hljs-title function_ invoke__">stream_bucket_make_writeable</span></span><span>(</span><span><span class="hljs-variable">$in</span></span><span>)) {
</span><span><span class="hljs-comment">// 스트림의 데이터를 대문자로 변환합니다</span></span><span>
</span><span><span class="hljs-variable">$bucket</span></span><span>->data = </span><span><span class="hljs-title function_ invoke__">strtoupper</span></span><span>(</span><span><span class="hljs-variable">$bucket</span></span><span>->data);
</span><span><span class="hljs-comment">// 변환 된 데이터를 대상 스트림으로 출력하십시오</span></span><span>
</span><span><span class="hljs-title function_ invoke__">stream_bucket_append</span></span><span>(</span><span><span class="hljs-variable">$out</span></span><span>, </span><span><span class="hljs-variable">$bucket</span></span><span>);
}
</span><span><span class="hljs-keyword">return</span></span><span> PSFS_PASS_ON;
}
}
</span></span>이 클래스에서 필터 () 메소드가 가장 중요한 부분입니다. 입력 스트림의 데이터를 수신하고 대문자로 변환 한 다음 대상 스트림으로 출력합니다.
다음으로 스트림_filter_register () 함수를 사용 하여이 사용자 정의 필터를 PHP 환경에 등록해야합니다.
<span><span><span class="hljs-title function_ invoke__">stream_filter_register</span></span><span>(</span><span><span class="hljs-string">"uppercase"</span></span><span>, </span><span><span class="hljs-string">"UppercaseFilter"</span></span><span>) </span><span><span class="hljs-keyword">or</span></span><span> </span><span><span class="hljs-keyword">die</span></span><span>(</span><span><span class="hljs-string">"Filter registration failed"</span></span><span>);
</span></span>이 단계를 통해 대문자 필터를 스트림 처리에 사용할 수있는 대문자 라는 필터로 등록합니다.
Stream_Filter_Append () 를 통해 등록 된 필터를 스트림에 연결할 수 있습니다. 다음은 스트림 필터를 통해 텍스트 파일을 읽고 내용을 대문자로 변환하는 방법을 보여주는 예입니다.
<span><span><span class="hljs-meta"><?php</span></span><span>
</span><span><span class="hljs-comment">// 레지스터 필터</span></span><span>
</span><span><span class="hljs-title function_ invoke__">stream_filter_register</span></span><span>(</span><span><span class="hljs-string">"uppercase"</span></span><span>, </span><span><span class="hljs-string">"UppercaseFilter"</span></span><span>) </span><span><span class="hljs-keyword">or</span></span><span> </span><span><span class="hljs-keyword">die</span></span><span>(</span><span><span class="hljs-string">"Filter registration failed"</span></span><span>);
</span><span><span class="hljs-comment">// 파일 스트림을 엽니 다</span></span><span>
</span><span><span class="hljs-variable">$stream</span></span><span> = </span><span><span class="hljs-title function_ invoke__">fopen</span></span><span>(</span><span><span class="hljs-string">"example.txt"</span></span><span>, </span><span><span class="hljs-string">"r"</span></span><span>);
</span><span><span class="hljs-comment">// 사용자 정의 변환 필터를 파일 스트림에 연결하십시오</span></span><span>
</span><span><span class="hljs-title function_ invoke__">stream_filter_append</span></span><span>(</span><span><span class="hljs-variable">$stream</span></span><span>, </span><span><span class="hljs-string">"uppercase"</span></span><span>, STREAM_FILTER_READ);
</span><span><span class="hljs-comment">// 파일 내용을 읽고 출력하십시오</span></span><span>
</span><span><span class="hljs-keyword">while</span></span><span> (</span><span><span class="hljs-variable">$line</span></span><span> = </span><span><span class="hljs-title function_ invoke__">fgets</span></span><span>(</span><span><span class="hljs-variable">$stream</span></span><span>)) {
</span><span><span class="hljs-keyword">echo</span></span><span> </span><span><span class="hljs-variable">$line</span></span><span>;
}
</span><span><span class="hljs-comment">// 파일 스트림을 닫습니다</span></span><span>
</span><span><span class="hljs-title function_ invoke__">fclose</span></span><span>(</span><span><span class="hljs-variable">$stream</span></span><span>);
</span><span><span class="hljs-meta">?></span></span><span>
</span></span>위의 예에서는 example.txt 라는 파일을 열고 대문자 필터를 파일 스트림에 첨부합니다. 스트림에서 데이터를 읽을 때마다 필터는 자동으로 대문자로 변환 한 다음 출력합니다.
example.txt 파일의 내용이 다음과 같습니다.
<span><span>hello world
</span><span><span class="hljs-keyword">this</span></span><span> </span><span><span class="hljs-keyword">is</span></span><span> a test.
</span></span>위 코드를 실행하면 출력이 다음과 같습니다.
<span><span>HELLO WORLD
THIS IS </span><span><span class="hljs-selector-tag">A</span></span><span> TEST.
</span></span>보시다시피, 모든 텍스트는 대문자로 변환되었습니다.
stream_filter_append ()를 사용하면 스트림에 필터를 쉽게 추가하여 데이터의 실시간 처리를 달성 할 수 있습니다. 이 기사에서는 입력 텍스트를 대문자로 변환하는 간단한 텍스트 변환 필터를 만들었습니다. 사용자 정의 필터와 스트림의 조합을 통해 PHP는 다양한 복잡한 시나리오 요구를 충족시킬 수있는 강력한 스트림 데이터 처리 기능을 제공합니다.
이 간단한 예제를 사용하면 stream_filter_append ()를 사용하여 자신의 스트림 필터를 만들고 텍스트 처리에 적용하는 방법을 이해할 수 있습니다.