PHP에서 스트림을 처리 할 때는 맞춤형 버퍼링을 구현하기 위해 데이터 블록 (버킷)과 같은 스트림에서 더 많은 기본 레이어를 작동해야합니다. PHP의 스트림 필터 메커니즘은 강력한 인터페이스를 제공합니다. 여기서 stream_bucket_make_wwritable은 스트림의 버퍼에서 데이터 블록을 얻고 읽고 작동 할 수있는 핵심 기능입니다.
이 기사는 Stream_Bucket_make_writable 의 역할, PHP 스트림에서 데이터 블록을 읽는 방법을 자세히 소개하고 실제 예를 통해 특정 응용 프로그램을 시연합니다.
stream_bucket_make_writable 은 PHP 스트림 필터 관련 기능이며 php_stream_bucket 구조의 작동 인터페이스에 속합니다. 이 기능은 스트림의 내부 버퍼에서 데이터 블록 (버킷)을 "가져 오기"하고 쓰기 가능한 버킷 객체를 반환하는 것입니다. 이 버킷에는 현재 사용 가능한 데이터가 포함되어 있으며 직접 읽거나 수정할 수 있습니다.
이 기능은 일반적으로 사용자 정의 스트림 필터 구현에 사용되며, 개발자가 압축, 암호화, 디코딩 및 기타 작업과 같은 스트리밍 된 데이터를 미세하게 제어 할 수 있도록 도와줍니다.
stream_bucket_make_writable을 사용하여 데이터 블록을 읽으려면 다음 단계가 필요합니다.
사용자 정의 흐름 필터를 생성하고 등록하십시오 . <br> 흐름 필터 클래스는 php_user_filter를 상속하고 필터 메소드를 무시해야합니다.
CALL_BUCKET_MAKE_WRITEBLE 내부 필터 메소드를 호출합니다
이 기능을 통해 버킷을 가져와 데이터를 읽으십시오.
읽기 데이터 블록 처리 <br> 데이터를 다음 필터로 읽거나 수정 또는 전달할 수 있습니다.
처리 결과를 반환하고 필터 작업을 완료하십시오
다음 예제는 간단한 사용자 정의 스트림 필터를 정의하고 필터 메소드에서 Stream_Bucket_Make_Writable을 통해 데이터 블록을 읽고 내용을 인쇄하는 방법을 보여줍니다.
<?php
class MyReadFilter extends php_user_filter {
public function filter($in, $out, &$consumed, $closing) {
// 모든 데이터 블록을 반복합니다
while ($bucket = stream_bucket_make_writeable($in)) {
// 읽다 bucket 데이터
$data = $bucket->data;
// 这里我们简单打印읽다到的数据
echo "읽다数据块内容: " . $data . "\n";
// 마커에 의해 소비되는 바이트 수
$consumed += $bucket->datalen;
// 할 것이다 bucket 다음 필터 또는 출력 스트림으로 전달하십시오
stream_bucket_append($out, $bucket);
}
return PSFS_PASS_ON;
}
}
// 사용자 정의 필터를 등록하십시오
stream_filter_register("myreadfilter", "MyReadFilter") or die("Failed to register filter");
// 사용의 예:从文件流中읽다数据并应用过滤器
$fp = fopen("gitbox.net/sample.txt", "r");
// 스트림에 사용자 정의 필터를 연결하십시오
stream_filter_append($fp, "myreadfilter", STREAM_FILTER_READ);
// 읽다文件内容,필터를 트리거합니다 filter 방법
while (!feof($fp)) {
fread($fp, 8192);
}
fclose($fp);
?>
stream_bucket_make_writable ($ in) : 입력 버킷 목록에서 버킷을 꺼내서 반환하십시오. 반환 된 버킷 객체에는 속성 데이터 (문자열 데이터) 및 Datalen (데이터 길이)이 포함되어 있습니다.
데이터를 읽은 후 Stream_Bucket_append ($ out, $ 버킷) 를 호출하여 버킷을 출력 체인으로 전달하여 스트림 처리 체인의 정상적인 실행을 보장해야합니다.
$ 소비 된 소비는 스트림 필터에 소비 된 데이터 블록 수를 알려주는 데 사용됩니다.
필터 리턴 값은 일반적으로 PSFS_PASS_ON을 사용하여 정상 데이터 전송을 표시하는 데 사용됩니다.
stream_bucket_make_writable 은 PHP 스트림 필터 메커니즘에서 스트림 데이터 블록을 읽는 핵심 인터페이스이며 개발자는 스트림 버퍼에서 데이터를 직접 조작 할 수 있습니다. 사용자 정의 스트림 필터를 통해 실시간 압축, 암호화, 로그 모니터링 등과 같은 복잡한 데이터 처리 로직을 구현할 수 있습니다.
스트림의 기본 데이터 블록 작업을 마스터하면 대형 파일 및 네트워크 스트리밍 데이터를 처리 할 때 유연성과 성능을 향상시키는 데 도움이 될 수 있습니다.
개발 중 스트림 작업에서 성능 병목 현상을 직면하거나 스트림에서 미세한 데이터 처리를 수행 해야하는 경우 Stream_Bucket_Make_writable 및 관련 스트림 필터 API를 깊이 배우고 적용하는 것이 좋습니다.