현재 위치: > 최신 기사 목록> OB_LIST_HANDLERS를 통해 캐시 처리기의 실행 순서를 감지하십시오

OB_LIST_HANDLERS를 통해 캐시 처리기의 실행 순서를 감지하십시오

gitbox 2025-05-28

PHP 개발에서 출력 버퍼링은 스크립트가 HTML을 생성하기 전에 출력을 수정, 압축 또는 캐시 할 수있는 매우 유용한 메커니즘입니다. PHP는 출력 버퍼링과 관련된 다양한 기능을 제공하며, 그 중 OB_List_HANDLERS ()는 매우 실용적이지만 간과되는 도구입니다. 현재 활성화 된 버퍼 핸들러를 볼 수 있으므로 버퍼 캐스케이드의 실행 순서를 더 잘 이해하는 데 도움이됩니다.

이 기사에서는 OB_LIST_HANDLERS ()를 사용하는 방법을 자세히 설명하고 간단한 예제를 사용하여 응용 프로그램 시나리오를 마스터하는 데 도움이됩니다.

OB_LIST_HANDLERS 란 무엇입니까?

OB_LIST_HANDLERS () 는 현재 활성화 된 모든 출력 버퍼 핸들러의 이름 목록을 반환하는 PHP 내장 기능입니다. 각 출력 버퍼에는 핸들러가 연결되어있어 브라우저로 전송되기 전에 출력을 처리하는 데 도움이됩니다.

기본 구문은 다음과 같습니다.

 array ob_list_handlers ( void )

반품 값 :
이 함수는 배열을 반환하고 배열의 각 요소는 활성 출력 버퍼 프로세서의 이름에 해당하는 문자열입니다.

OB_LIST_HANDLERS를 사용하는 이유는 무엇입니까?

PHP 스크립트에서 다중 출력 버퍼가 활성화되면 (예 : GZIP 압축 및 사용자 정의 캐시 메커니즘을 모두 사용하거나) 프레임 워크 및 CMS (예 : WordPress 및 Laravel)를 사용하면 출력 버퍼가 레이어에 의해 겹쳐 질 수 있습니다. 문제를 해결하거나 출력이 처리되는 순서를 이해하려면 OB_LIST_HANDLERS () 는 매우 효과적인 도구입니다.

사용의 예

우리가 몇 가지 다른 출력 버퍼를 켜고 주문을보고 싶다고 가정합니다.

 <?php

// 기본 버퍼를 켜십시오
ob_start();

// 프로세서로 버퍼를 켭니다
ob_start('ob_gzhandler');

// 간단한 버퍼 프로세서를 사용자 정의하십시오
function my_custom_handler($buffer) {
    return str_replace('Hello', 'Hi', $buffer);
}
ob_start('my_custom_handler');

// 현재 활성화 된 모든 버퍼 프로세서를보십시오
print_r(ob_list_handlers());

?>

출력 예 :

 Array
(
    [0] => my_custom_handler
    [1] => ob_gzhandler
    [2] => default output handler
)

출력에서 최근에 활성화 된 버퍼 프로세서가 상단에 있음을 알 수 있으며, 이는 "Last in First Out"스택 로직 (스택 Lifo)을 준수합니다. 즉, 플러시 (플러시) 또는 OB_END_FLUSH (END 및 OUTPUT)를 플러시하면 상단 버퍼가 먼저 데이터를 처리합니다.

실제 전투 : 캐시 출력 체인을 이해하십시오

보다 실용적인 예와 결합합시다. https://gitbox.net/cache/ 에서 호스팅 된 웹 사이트 캐시 시스템이 있다고 가정 해보자 버퍼링을 통해 페이지 컨텐츠를 캡처 한 다음 압축하고 저장합니다.

 <?php

// 할 수 있게 하다Gzip압축 처리
ob_start('ob_gzhandler');

// 할 수 있게 하다自定义缓存捕获
ob_start(function($buffer) {
    file_put_contents('/var/www/gitbox.net/cache/page_cache.html', $buffer);
    return $buffer;
});

// 할 수 있게 하다普通的缓冲区
ob_start();

// 출력 내용
echo "Hello World!";

print_r(ob_list_handlers());

// 모든 버퍼를 새로 고치십시오
ob_end_flush();
ob_end_flush();
ob_end_flush();

?>

출력 처리 순서 :

  1. 일반 버퍼는 먼저 "Hello World!"를받습니다.

  2. 사용자 정의 캐시 프로세서는 컨텐츠를 디스크로 가로 채고 저장합니다.

  3. GZIP 프로세서는 최종 출력을 압축합니다.

  4. 브라우저는 압축 콘텐츠를 수신합니다.

OB_LIST_HANDLERS ()를 사용하여 각 프로세서의 등록 순서를 실시간으로 확인하여 캐시 실패, 출력 갈색 코드 등과 같은 가능한 오류를 찾는 데 도움이됩니다.

주목해야 할 것

  • 스크립트에서 OB_START ()를 자주 사용하고 다른 프로세서의 논리가 복잡한 경우 OB_LIST_HANDLERS () 를 통해 스택 상태를 정기적으로 확인하여 버퍼 누출을 피하십시오.

  • 일부 PHP 확장 (예 : Zlib)은 자동으로 버퍼링을 켜고 OB_LIST_HANDLERS () 도 인식 할 수 있습니다.

  • 다른 프로세서 실행 시퀀스는 최종 출력에 큰 영향을 미치며,이를 이해하는 것은 성능 최적화 및 보안 개선 (예 : 민감한 정보 유출 방지)에 매우 중요합니다.

결론

OB_LIST_HANDLERS () 는 특히 복잡한 출력 캐시 및 압축 시스템에서 간단하고 강력한 도구로 개발자가 각 처리 로직 계층을 명확하게 이해하는 데 도움이 될 수 있습니다. 이를 통해 출력 프로세스를보다 정확하게 제어하고 응용 프로그램 성능 및 안정성을 향상시킬 수 있습니다.

PHP 출력 버퍼링에 대해 자세히 알아 보려면 튜토리얼 페이지 https://gitbox.net/php output-buffering을 방문하십시오.