현재 위치: > 최신 기사 목록> 출력 캐시 체인에 사용자 정의 핸들러를 삽입하는 방법

출력 캐시 체인에 사용자 정의 핸들러를 삽입하는 방법

gitbox 2025-05-13

PHP에서 메커니즘을 사용하면 스크립트로 데이터 출력을 가로 채거나 수정하거나 전송을 지연시킬 수 있습니다. 일반적으로 OB_START ()를 사용하여 콜백 함수를 전달하여 캐시를 활성화하고 출력 컨텐츠의 처리를 사용자 정의합니다.
OB_LIST_HANDLERS () 함수는 모든 현재 활동 출력 처리기를 보는 데 사용될 수 있습니다.

이 기사는 실제 예제를 사용하여 OB_LIST_HANDLERS 기능을 통해 캐시 체인을 이해하는 방법을 보여주고 자체 처리기를 삽입합니다.

1. OB_LIST_HANDLERS를 이해하십시오

OB_LIST_HANDLERS ()는 현재 활성화 된 모든 출력 버퍼 프로세서를 목록에 반환합니다. 예를 들어 GZIP 압축 모듈을 활성화 한 경우 OB_GZHANDLER 와 같은 프로세서 이름이 표시 될 수 있습니다.

예:

 <?php
// 기본 출력 캐시를 켜십시오
ob_start();

// 현재 출력 핸들러를 확인하십시오
print_r(ob_list_handlers());

ob_end_flush();
?>

출력은 다음과 유사 할 수 있습니다.

 Array
(
    [0] => default output handler
)

다른 사용자 정의 프로세서가없는 경우 일반적으로 기본 출력 핸들러 만 표시됩니다.

2. 사용자 정의 출력 프로세서를 삽입하십시오

OB_START ()를 사용하고 사용자 정의 콜백 함수를 전달할 수 있으며 출력이 브라우저로 전송되기 전에 처리됩니다.

간단한 예는 다음과 같습니다. 모든 출력 소문자를 대문자로 바꾸는 프로세서를 정의합니다.

 <?php
// 사용자 정의 처리기를 정의합니다
function custom_uppercase_handler($buffer) {
    // 출력 내용을 처리하십시오,예를 들어, 모든 소문자를 대문자로 바꾸십시오
    return strtoupper($buffer);
}

// 캐시 체인에 사용자 정의 핸들러를 삽입하십시오
ob_start('custom_uppercase_handler');

// 아날로그 출력
echo "방문에 오신 것을 환영합니다 https://gitbox.net 테스트 페이지!";

ob_end_flush();
?>

출력 결과 :

 방문에 오신 것을 환영합니다 HTTPS://GITBOX.NET 테스트 페이지!

보시다시피, 모든 소문자는 URL의 도메인 이름 gitbox.net을 포함하여 대문자로 변환되었습니다.

3. 여러 프로세서를 삽입하십시오

PHP의 출력 캐시는 다층 둥지를 지원합니다. OB_START ()를 여러 번 호출 할 수 있으며 각 레이어는 다른 처리 기능을 지정할 수 있습니다.

예:

 <?php
// 첫 핸들러:콘텐츠를 자본으로 변환합니다
function handler_upper($buffer) {
    return strtoupper($buffer);
}

// 중고품 핸들러:특정 단어를 대체하십시오
function handler_replace($buffer) {
    return str_replace('GITBOX.NET', 'gitbox.net', $buffer);
}

// 첫 번째 프로세서를 켭니다
ob_start('handler_upper');

// 두 번째 프로세서를 켭니다
ob_start('handler_replace');

// 출력 내용
echo "방문에 오신 것을 환영합니다 https://gitbox.net 테스트 페이지!";

// 상단 프로세서와 출력을 끄십시오
ob_end_flush();

// 하단 프로세서를 끕니다
ob_end_flush();
?>

이 예에서 :

  1. handler_replace가 먼저 실행되고 문자열을 대체합니다.

  2. handler_upper를 실행 한 후 처리 된 컨텐츠는 대문자로 변환됩니다.

그래서 최종 출력은 다음과 같습니다.

 방문에 오신 것을 환영합니다 HTTPS://gitbox.net 테스트 페이지!

handler_replace는 handler_upper 앞에서 실행되므로 대체 작업은 대문자 변환의 영향을받지 않습니다.

4. OB_LIST_HANDLERS와 결합 된 동적 감지 ()

OB_LIST_HANDLERS ()를 사용하여 디버깅 중에 사용자 정의 프로세서가 올바르게 삽입되는지 여부를 결정하는 등 프로그램의 출력 처리 체인을 동적으로 확인할 수 있습니다.

 <?php
ob_start('custom_uppercase_handler');

$handlers = ob_list_handlers();
print_r($handlers);

ob_end_flush();
?>

산출:

 Array
(
    [0] => custom_uppercase_handler
)

사용자 정의 프로세서가 성공적으로 삽입되었다는 지침.

요약

  • OB_START ()를 사용하여 출력 캐시 체인에 사용자 정의 처리기를 삽입하십시오.

  • OB_LIST_HANDLERS ()는 현재 활성화 된 모든 캐시 프로세서를보고 캐시 체인을 디버그하는 데 사용됩니다.

  • OB_START ()는 다층 처리 체인을 형성하여 프로세서 호출 순서에주의를 기울일 수 있습니다.

  • 출력을 처리 할 때는 예상치 못한 문제를 일으키지 않도록 인코딩 형식 및 컨텐츠의 사례 변경에주의하십시오.

출력 캐시 메커니즘을 합리적으로 사용함으로써 컨텐츠 필터링, 동적 압축, 지연된 출력 및 기타 기능과 같은 PHP 프로그램의 유연성을 크게 향상시킬 수 있습니다.