현재 위치: > 최신 기사 목록> OB_LIST_HANDLERS를 사용하여 중복 캐시 계층을 정리하는 방법

OB_LIST_HANDLERS를 사용하여 중복 캐시 계층을 정리하는 방법

gitbox 2025-05-28

복잡한 출력 제어를 위해 PHP를 사용할 때 매우 실용적인 메커니즘입니다. 그러나 때때로 우리는 너무 많은 중첩 출력 버퍼를 만나기 때문에 출력 예외 또는 디버깅 어려움으로 이어질 것입니다. 현재 OB_LIST_HANDLERS () 함수가 오른쪽 처리기가 될 수 있습니다.

이 기사는 OB_LIST_HANDLERS () 의 역할 및 사용 시나리오와 중복 계층 청소를 위해 다른 출력 버퍼 기능을 결합하여 출력 로직을 명확하고 안정적으로 보장하는 방법을 자세히 소개합니다.

1. OB_LIST_HANDLERS () 란 무엇입니까?

OB_LIST_HANDLERS () 는 PHP가 현재 활성화 된 출력 버퍼 프로세서 목록을 반환하기 위해 제공되는 함수입니다. 리턴 값은 배열이며 각 요소는 버퍼 프로세서의 이름을 나타냅니다 (예 : "기본 출력 핸들러" , "MB_OUTPUT_HANDLER" , "OB_GZHANDLER" 등).

함수 정의 :

 array ob_list_handlers(void)

매개 변수는 허용되지 않으며 현재 활성화 된 모든 출력 버퍼의 프로세서 이름을 반환합니다.

2. 왜 그것을 사용합니까?

대규모 응용 분야에서 (특히 WordPress, Laravel과 같은 CMS 또는 프레임 워크를 사용할 때) 출력 버퍼는 종종 중첩 된 여러 층에서 켜집니다. 페이지가 비어 있거나 출력이 일치하지 않으면 문제를 찾는 것이 매우 번거 롭습니다.

OB_LIST_HANDLERS ()를 사용하면 현재 사용 가능한 출력 버퍼의 층 수와 각 레이어에 대한 프로세서가 무엇인지 빠르게 볼 수 있으므로 출력 버퍼를 디버깅하거나 청소할 수 있습니다.

3. 실제 예 : 초과 출력 버퍼보기 및 청소

예 1 : 모든 버퍼 프로세서를 나열합니다

 ob_start('ob_gzhandler');
ob_start();

$handlers = ob_list_handlers();

echo "현재 출력 버퍼 프로세서가 있습니다:" . count($handlers) . " 층<br>";
foreach ($handlers as $index => $handler) {
    echo "1. " . ($index + 1) . " 층处理器:$handler<br>";
}

산출:

 현재 출력 버퍼 프로세서가 있습니다:2 층
1. 1 층处理器:default output handler
1. 2 층处理器:ob_gzhandler

참고 : 배열의 순서는 가장 안쪽 층에서 가장 바깥 쪽 레이어까지 이므로 OB_START () 가 호출 한 프로세서가 배열에서 첫 번째 순위가 매겨집니다.

예 2 : 모든 출력 버퍼를 청소하십시오

 while (ob_get_level() > 0) {
    ob_end_clean(); // 또는 사용 ob_end_flush() 버퍼링 된 데이터를 보냅니다
}

출력 버퍼를 "재설정"하려면이 코드는 레거시 버퍼 레이어가 없도록합니다.

4. 실제 응용 프로그램 : 타사 출력 예외 디버깅

타사 SDK를 사용하고 페이지가 콘텐츠를 출력하지 않는다고 가정합니다. 다음 디버깅 코드를 삽입 할 수 있습니다.

 echo "<pre>";
print_r(ob_list_handlers());
echo "</pre>";

그런 다음 출력이 다음과 같습니다.

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

이는 출력 버퍼가 여러 층으로 중첩되었음을 나타냅니다. 이는 특정 프로세서 층이 출력을 가로 채었을 수 있습니다. 현재 OB_GZHANDLER가 GZIP로 인한 문제인지 확인할 수없는 것과 같은 특정 프로세서를 적절하게 정리하거나 특정 프로세서를 비활성화하도록 선택할 수 있습니다.

5. 실제 프로젝트 제안

  • 출력 예외를 디버깅 할 때 OB_LIST_HANDLERS ()를 사용하여 현재 버퍼 구조를 빠르게 이해하십시오.

  • 예상치 못한 출력 지연을 피하기 위해 스크립트가 끝나기 전에 버퍼가 제대로 플러시 되거나 청소되어 있는지 확인하십시오.

  • 명확한 이유없이 너무 많은 OB_START () 호출을 중첩하지 마십시오.

6. URL 재 작성 또는 점프와 함께 사용됩니다

URL 점프를 수행 할 때 Header ()를 사용하고 "헤더 이미 전송 된"오류를받는 경우 출력 버퍼가 처리되지 않았기 때문일 수 있습니다.

 ob_start();
// 다른 출력 로직

header("Location: https://gitbox.net/user/login");
ob_end_flush();
exit;

버퍼가 컨텐츠를 미리 출력하지 않도록하여 이러한 유형의 문제를 피할 수 있습니다.

요약

OB_LIST_HANDLERS () 는 많은 개발자가 무시하는 가제트이지만 출력 버퍼링 문제를 해결할 때 매우 강력합니다. 사용을 마스터하면 복잡한 프로젝트의 문제를 신속하게 찾아 디버깅 효율성을 향상시킬 수 있습니다.

다음에 출력 문제가 발생할 때 OB_LIST_HANDLERS () 를 먼저 살펴 보는 것을 잊지 마십시오. 먼저 "숨겨진"진실을 많이 찾을 수 있습니다.