매일 PHP 개발에서 우리는 종종 페이지의 갈색 코드, 출력 예외 또는 헤더와 같은 출력 버퍼링에 문제가 종종 발생합니다. 현재 현재 스크립트에서 출력 캐시 상태를 빠르게 보는 것이 매우 중요합니다.
OB_LIST_HANDLERS () 함수는 출력 버퍼가 작동하는 한눈에 이해하는 데 도움이되는 매우 실용적인 가제트입니다.
OB_LIST_HANDLERS () 는 PHP의 내장 기능입니다. 현재 활성화 된 모든 출력 버퍼의 프로세서 이름 (핸들러 이름)을 나열하는 배열을 반환합니다.
이러한 프로세서는 OB_START () 에 의해 수동으로 시작될 수 있거나 PHP 자체 또는 일부 확장 (예 : GZIP 압축)에 의해 자동으로 등록 될 수 있습니다.
공식 문서 참조 : https://www.gitbox.net/manual/zh/function.ob-list handlers.php
실제로 사용하기가 매우 간단합니다. 샘플 코드는 다음과 같습니다.
<?php
// 간단한 출력 버퍼를 시작하십시오
ob_start();
// 콜백 함수로 다른 출력 버퍼를 시작하십시오
ob_start(function ($buffer) {
return strtoupper($buffer);
});
// 사용 ob_list_handlers 현재 버퍼 상태를 확인하십시오
print_r(ob_list_handlers());
// 모든 출력 버퍼를 청소하고 끕니다
while (ob_get_level() > 0) {
ob_end_flush();
}
?>
출력 결과는 비슷합니다.
Array
(
[0] => Closure
[1] => default output handler
)
보시다시피, Closure 는 익명 함수가 버퍼 컨텐츠를 처리하고 기본 출력 핸들러는 PHP의 기본 출력 프로세서입니다.
대규모 프로젝트, 특히 복잡한 템플릿 엔진, 타사 라이브러리 또는 GZIP 압축이 포함 된 웹 사이트를 디버깅 할 때 :
컨텐츠 관리 시스템 (CMS)
전자 상거래 플랫폼
API 인터페이스는 데이터 전처리를 반환합니다
스크립트의 주요 위치에 다음 코드를 삽입하여 실시간으로 볼 수 있습니다.
<?php
if (!function_exists('debug_ob_handlers')) {
function debug_ob_handlers() {
echo '<pre>';
print_r(ob_list_handlers());
echo '</pre>';
}
}
// 어딘가에 디버깅
debug_ob_handlers();
?>
이것은 GZIP 또는 템플릿 엔진의 캐시 메커니즘에 의해 영향을받는 것과 같은 예기치 않은 버퍼링이 있는지 신속하게 발견 할 수 있습니다.
OB_LIST_HANDLERS ()는 활성 프로세서 만 나열하며 각 버퍼의 특정 컨텐츠를 알려주지 않습니다.
스크립트에서 출력 버퍼링이 활성화되지 않으면 빈 배열이 반환됩니다.
일부 확장 (예 : Zlib )이 활성화되면 OB_GZHANDLER 와 같은 추가 출력 프로세서가 자동으로 추가 될 수 있으며 충돌에주의해야합니다.
OB_LIST_HANDLERS ()는 출력 버퍼링 관련 문제를 디버깅 할 때 포지셔닝 속도를 크게 향상시킬 수있는 가볍지 만 매우 실용적인 기능입니다.
모든 PHP 개발자는 특히 복잡한 출력 스트림을 다루거나 위치에 어려운 문제를 디버깅 할 때 필요한 경우 IT를 마스터하고 유연하게 사용하는 것이 좋습니다.