현재 위치: > 최신 기사 목록> 스트림에서 데이터 블록을 읽으려면 stream_bucket_make_writable을 사용하십시오.

스트림에서 데이터 블록을 읽으려면 stream_bucket_make_writable을 사용하십시오.

gitbox 2025-05-29

PHP에서 스트림을 처리 할 때는 맞춤형 버퍼링을 구현하기 위해 데이터 블록 (버킷)과 같은 스트림에서 더 많은 기본 레이어를 작동해야합니다. PHP의 스트림 필터 메커니즘은 강력한 인터페이스를 제공합니다. 여기서 stream_bucket_make_wwritable은 스트림의 버퍼에서 데이터 블록을 얻고 읽고 작동 할 수있는 핵심 기능입니다.

이 기사는 Stream_Bucket_make_writable 의 역할, PHP 스트림에서 데이터 블록을 읽는 방법을 자세히 소개하고 실제 예를 통해 특정 응용 프로그램을 시연합니다.


1. stream_bucket_make_writable이란 무엇입니까?

stream_bucket_make_writable 은 PHP 스트림 필터 관련 기능이며 php_stream_bucket 구조의 작동 인터페이스에 속합니다. 이 기능은 스트림의 내부 버퍼에서 데이터 블록 (버킷)을 "가져 오기"하고 쓰기 가능한 버킷 객체를 반환하는 것입니다. 이 버킷에는 현재 사용 가능한 데이터가 포함되어 있으며 직접 읽거나 수정할 수 있습니다.

이 기능은 일반적으로 사용자 정의 스트림 필터 구현에 사용되며, 개발자가 압축, 암호화, 디코딩 및 기타 작업과 같은 스트리밍 된 데이터를 미세하게 제어 할 수 있도록 도와줍니다.


2. 데이터 블록을 읽는 기본 프로세스

stream_bucket_make_writable을 사용하여 데이터 블록을 읽으려면 다음 단계가 필요합니다.

  1. 사용자 정의 흐름 필터를 생성하고 등록하십시오 . <br> 흐름 필터 클래스는 php_user_filter를 상속하고 필터 메소드를 무시해야합니다.

  2. CALL_BUCKET_MAKE_WRITEBLE 내부 필터 메소드를 호출합니다
    이 기능을 통해 버킷을 가져와 데이터를 읽으십시오.

  3. 읽기 데이터 블록 처리 <br> 데이터를 다음 필터로 읽거나 수정 또는 전달할 수 있습니다.

  4. 처리 결과를 반환하고 필터 작업을 완료하십시오


3. 실제 예 : 사용자 정의 스트림 필터는 데이터 블록을 읽습니다

다음 예제는 간단한 사용자 정의 스트림 필터를 정의하고 필터 메소드에서 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);
?>

4. 키 노트

  • stream_bucket_make_writable ($ in) : 입력 버킷 목록에서 버킷을 꺼내서 반환하십시오. 반환 된 버킷 객체에는 속성 데이터 (문자열 데이터) 및 Datalen (데이터 길이)이 포함되어 있습니다.

  • 데이터를 읽은 후 Stream_Bucket_append ($ out, $ 버킷) 를 호출하여 버킷을 출력 체인으로 전달하여 스트림 처리 체인의 정상적인 실행을 보장해야합니다.

  • $ 소비 된 소비는 스트림 필터에 소비 된 데이터 블록 수를 알려주는 데 사용됩니다.

  • 필터 리턴 값은 일반적으로 PSFS_PASS_ON을 사용하여 정상 데이터 전송을 표시하는 데 사용됩니다.


5. 요약

stream_bucket_make_writable 은 PHP 스트림 필터 메커니즘에서 스트림 데이터 블록을 읽는 핵심 인터페이스이며 개발자는 스트림 버퍼에서 데이터를 직접 조작 할 수 있습니다. 사용자 정의 스트림 필터를 통해 실시간 압축, 암호화, 로그 모니터링 등과 같은 복잡한 데이터 처리 로직을 구현할 수 있습니다.

스트림의 기본 데이터 블록 작업을 마스터하면 대형 파일 및 네트워크 스트리밍 데이터를 처리 할 때 유연성과 성능을 향상시키는 데 도움이 될 수 있습니다.

개발 중 스트림 작업에서 성능 병목 현상을 직면하거나 스트림에서 미세한 데이터 처리를 수행 해야하는 경우 Stream_Bucket_Make_writable 및 관련 스트림 필터 API를 깊이 배우고 적용하는 것이 좋습니다.