현재 위치: > 최신 기사 목록> OB_LIST_HANDLERS의 도움으로 캐시 핸들러의 통화 스택을 추적하는 방법

OB_LIST_HANDLERS의 도움으로 캐시 핸들러의 통화 스택을 추적하는 방법

gitbox 2025-05-20

PHP에서 OB_LIST_HANDLERS 기능은 현재 출력 버퍼 관리자 (OB)에서 모든 캐시 핸들러를 가져 오는 도구입니다. 이를 통해 캐시 핸들러의 통화 스택을 추적하여 출력 캐시의 실행 프로세스를 더 잘 디버깅하고 이해할 수 있습니다. 이 기사에서는 OB_LIST_HANDLERS를 사용하여 PHP 캐시 처리기의 통화 스택을 디버깅하고 샘플 코드를 제공하는 방법을 설명합니다.

PHP 출력 캐시 란 무엇입니까?

PHP에서 출력 캐시는 출력 컨텐츠를 메모리에 임시로 저장하는 메커니즘으로 브라우저로 직접 보내지 않고 스크립트 실행 중 출력을 캡처 할 수 있습니다. 이는 여러 출력 작업의 성능 오버 헤드를 줄이거 나 컨텐츠 처리 (예 : 압축, 수정 등)에 매우 유용합니다. PHP는 OB_START () , OB_END_FLUSH () , OB_FLUSH () 등과 같은 출력 캐시의 동작을 제어하기위한 여러 기능을 제공합니다.

OB_LIST_HANDLERS를 사용한 디버그 출력 캐시

OB_LIST_HANDLERS 기능의 기능은 모든 현재 출력 캐시 처리기를 반환하는 것입니다. 이 처리기에는 OB_START () 가 만든 캐시 처리기가 포함됩니다. 이 기능을 사용하여 캐시 스택 목록을 가져 와서 캐시가 순서대로 처리되는 방법을 이해할 수 있습니다.

샘플 코드 : 캐시 핸들러 추적

 <?php

// 출력 캐시를 시작하십시오
ob_start();

// 사용자 정의 캐시 핸들러를 추가하십시오
ob_start(function($buffer) {
    return strtoupper($buffer);  // 출력을 대문자로 변환합니다
});

// 통과하다 ob_list_handlers 현재 캐시 핸들러 목록을 가져옵니다
$handlers = ob_list_handlers();
echo "현재 캐시 핸들러:\n";
print_r($handlers);

// 일부 내용을 출력하십시오
echo "이것은 테스트 문자열입니다。";

// 모든 핸들러를 얻고 인쇄하십시오
$handlers = ob_list_handlers();
echo "현재 캐시 핸들러(다시 전화하십시오 ob_list_handlers):\n";
print_r($handlers);

// 최종 캐시 및 출력
ob_end_flush();

// 엔드 캐시
ob_end_clean();
?>

코드 구문 분석

  1. OB_START () : 출력 캐시를 시작합니다. 핸들러가 지정되지 않으면 PHP는 기본 캐싱 메커니즘을 사용합니다.

  2. OB_START (function ($ buffer) {...}) : 출력 컨텐츠를 대문자로 변환하기위한 사용자 정의 캐시 핸들러를 지정합니다.

  3. OB_LIST_HANDLERS () : 모든 현재 출력 캐시 핸들러의 목록을 반환하고 현재 캐시 된 처리 스택을 볼 수 있습니다.

  4. OB_END_FLUSH () : 엔드 캐시 및 버퍼의 내용을 브라우저에 출력합니다.

  5. OB_END_CLEAN () : 엔드 캐시 및 버퍼 컨텐츠 폐기.

위 코드에서는 OB_LIST_HANDLERS ()를 사용하여 현재 출력 캐시 처리기 목록을 볼 수 있습니다. 함수가 호출 될 때마다 현재 활성화 된 모든 캐시 핸들러가 포함 된 배열이 표시됩니다.

출력 예 :

 현재 캐시 핸들러:
Array
(
    [0] => no-processor
    [1] => closure
)

현재 캐시 핸들러(다시 전화하십시오 ob_list_handlers):
Array
(
    [0] => closure
)

위의 예에서는 현재 캐시 핸들러의 스택을 볼 수 있습니다. OB_LIST_HANDLERS () 에 대한 첫 번째 호출은 기본 "No-Processor"( No-Processor )를 반환하고 두 번째 호출은 우리가 추가 한 핸들러 ( 폐쇄 )를 보여줍니다. 즉, 캐시 스택은 통화 순서에 따라 변경됩니다.

OB_LIST_HANDLERS를 통해 통화 스택 추적

복잡한 PHP 응용 프로그램에서 여러 캐시 핸들러가 순서대로 호출 될 수 있습니다. OB_LIST_HANDLERS를 사용하면 캐시 핸들러의 순서를 실시간으로 볼 수있어 캐시 문제를 디버그 할 수 있습니다. 예를 들어, 캐시 컨텐츠가 예상대로 처리되지 않은 경우 캐시 핸들러 스택을 확인하여 핸들러가 누락되었는지 또는 실행 오류가 있는지 확인할 수 있습니다.

디버깅 시나리오 예 :

PHP 웹 사이트를 개발하고 동적 컨텐츠를 캐시한다고 가정하십시오. 그러나 캐시 된 컨텐츠는 정확하게 압축되거나 수정되지 않은 것처럼 예상대로 처리되지 않는다는 것을 알게됩니다. 이 시점에서 OB_LIST_HANDLERS ()를 사용하여 캐시 스택을 인쇄하고 여러 출력 캐시 핸들러가 있는지 확인하거나 일부 처리기가 올바르게 적용되지 않는지 확인할 수 있습니다.

 <?php
// 출력 캐시를 시작하고 여러 핸들러를 적용하십시오
ob_start(function($buffer) {
    return strrev($buffer);  // 출력 컨텐츠를 뒤집습니다
});
ob_start(function($buffer) {
    return strtoupper($buffer);  // 출력을 대문자로 변환합니다
});

// 현재 캐시 핸들러를 봅니다
$handlers = ob_list_handlers();
print_r($handlers);

// 출력 내용
echo "이것은 테스트 문자열입니다。";

// 최종 캐시 및 출력
ob_end_flush();
?>

이 예에서는 OB_LIST_HANDLERS ()가 반전 및 대문자 처리기의 순서를 표시합니다. 이렇게하면 PHP 출력 캐시의 처리기를 쉽게 확인하고 디버깅 할 수 있습니다.