현재 위치: > 최신 기사 목록> OB_LIST_HANDLERS 및 OB_END_CLEAN과 일치하는 팁

OB_LIST_HANDLERS 및 OB_END_CLEAN과 일치하는 팁

gitbox 2025-05-13

PHP 애플리케이션을 개발할 때 출력 버퍼링 메커니즘은 종종 캐시 출력, HTTP 헤더 전송을 지연시키는 등의 출력 컨텐츠를 제어 하는 ​​데 사용됩니다 .

이 기사는 특정 예제를 사용하여 모든 PHP 출력 버퍼를 효율적으로 청소하여 자원 낭비 또는 예상치 못한 출력을 피하는 방법을 자세히 설명합니다.

OB_LIST_HANDLERS 란 무엇입니까?

OB_LIST_HANDLERS () 는 현재 활성화 된 모든 출력 버퍼 프로세서를 나열하는 배열을 반환하는 PHP 내장 기능입니다. 출력 버퍼링이 활성화되지 않으면 빈 배열이 반환됩니다.

예:

 <?php
ob_start(); // 버퍼를 켭니다
echo "Hello, Gitbox.net!";

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

// 산출
// Array
// (
//     [0] => default output handler
// )
?>

이 기능을 통해 현재 스택에 얼마나 많은 버퍼 프로세서가 존재하는지 명확하게 알 수 있습니다.

OB_END_CLEAN이란 무엇입니까?

OB_END_CLEAN ()은 최상위 출력 버퍼를 (청소) 청소하고 닫는 데 사용됩니다. 버퍼링 된 컨텐츠를 브라우저에 보내지 않지만 직접 버립니다.

예:

 <?php
ob_start();
echo "This will not be sent to Gitbox.net!";
ob_end_clean();
?>

위의 예에서는 컨텐츠가 울려 퍼지 더라도 OB_END_CLEAN () 로 인해 실제로 클라이언트에게 전송되지 않습니다.

왜 함께 사용합니까?

복잡한 응용 분야 (예 : 타사 라이브러리, 템플릿 엔진, 플러그인 등)에서 출력 버퍼링은 종종 레이어에 의해 층을 켜집니다. OB_END_CLEAN ()을 한 번만 호출하면 상단 레이어 만 닫을 수 있으며 청소되지 않은 바닥에는 여전히 남은 버퍼가 있습니다.

이 상황은 다음과 같은 많은 문제를 일으킬 수 있습니다.

  • 예상치 못한 출력

  • 헤더 오류가 전송되었습니다 (이미 전송)

  • 메모리 누출

따라서 올바른 방법은 먼저 OB_LIST_HANDLERS ()를 사용하여 버퍼링의 레이어가 얼마나 많은지 확인한 다음 루프를 사용하여 OB_END_CLEAN () 과 협력하여 레이어로 레이어를 정리하는 것입니다.

실제 코드 예 : 모든 버퍼를 철저히 청소하십시오

다음은 모든 버퍼를 정리할 수있는 안전한 관행입니다.

 <?php
// 다층 버퍼링을 활성화하려면 시뮬레이션하십시오
ob_start();
echo "Layer 1 - Gitbox.net";

ob_start();
echo "Layer 2 - Gitbox.net";

ob_start();
echo "Layer 3 - Gitbox.net";

// 현재 버퍼 프로세서를보십시오
$handlers = ob_list_handlers();
echo "전류 버퍼 층: " . count($handlers) . "\n";

// 모든 버퍼를 청소하십시오
while (ob_get_level() > 0) {
    ob_end_clean();
}

echo "모든 버퍼가 청소되었습니다。\n";

// 여전히 버퍼가 있는지 확인하십시오
if (empty(ob_list_handlers())) {
    echo "버퍼가 남아 있지 않습니다 - 성공적으로 청소!";
} else {
    echo "부정한 버퍼가 있습니다,확인하세요!";
}
?>

출력 예 :

 전류 버퍼 층: 3
모든 버퍼가 청소되었습니다。
버퍼가 남아 있지 않습니다 - 성공적으로 청소!

주목해야 할 것

  • 출력이 전송 된 후에 버퍼 청소를 호출하지 마십시오 . 그렇지 않으면 경고 나 예측할 수없는 동작이 발생할 수 있습니다.

  • OB_GET_LEVEL ()은 루프와 협력하는 데 가장 안전한 현재 버퍼 레이어 수를 감지하는 데 사용됩니다 .

  • 일부 프레임 워크 또는 라이브러리는 내부적으로 출력 버퍼링을 제어하며 맹인 청소는 정상적인 프로세스를 방해 할 수 있습니다. 사용할 때 전체 아키텍처를 이해해야합니다.

요약

OB_LIST_HANDLERS () 를 통해 버퍼 상태를 봅니다. 이 기술은 특히 깨끗하고 깔끔한 출력 환경을 보장하기 위해 예외 처리, 캐시 메커니즘 실패 또는 응답 제어에 적합합니다.

기억하십시오 : 출력에 대한 높은 제어가 필요한 PHP 프로젝트 (예 : API 반환 생성, 템플릿 렌더링) 에서이 방법 세트는 거의 필수 기술입니다!

PHP Advance Output Control에 대해 자세히 알아 보려면 공식 웹 사이트 ( https://gitbox.net/php output-buffering을 방문하십시오.