PHP 개발 중에는 때때로 출력 버퍼 (출력 버퍼링)를 작동하거나 디버깅해야합니다. OB_LIST_HANDLERS ()는 모든 현재 활동 출력 버퍼 처리기를 보는 데 사용되는 함수입니다. 그러나 많은 개발자 들이이 기능을 사용할 때 빈 배열을 반환하는 상황을 만날 것입니다. 이 기사는이 문제를 깊이 분석하고 효과적인 솔루션을 제공합니다.
OB_LIST_HANDLERS () 는 PHP가 현재 활성 출력 버퍼 프로세서를 나열하는 배열을 반환하는 기능입니다. 공통 프로세서에는 기본 출력 핸들러 , GZIP 핸들러 , MB_OUTPUT_HANDLER 등이 포함됩니다.
구문은 다음과 같습니다.
array ob_list_handlers ( void )
반환 값 : 모든 활성 출력 버퍼 프로세서 이름을 포함하는 배열.
OB_LIST_HANDLERS ()가 빈 배열을 반환하게 할 수있는 몇 가지 일반적인 이유가 있습니다.
OB_LIST_HANDLERS ()를 호출하기 전에 출력 버퍼링이 활성화되지 않으면 자연스럽게 프로세서가없고 빈 배열이 반환됩니다.
예:
print_r(ob_list_handlers()); // 산출:Array ( )
현재 버퍼를 가능하게하는 OB_START () 또는 기타 함수가 없으며 버퍼가 비어 있습니다.
OB_END_CLEAN () , OB_END_FLUSH () 및 기타 함수가 OB_LIST_HANDLERS () 호출하기 전에 버퍼를 지우거나 닫기 전에 호출 된 경우 프로세서를 제거하고 빈 배열을 반환합니다.
때로는 PHP의 출력 버퍼링 메커니즘이 자동으로 활성화되지만 (예 : output_buffering 구성 항목 또는 Zlib 와 같은 다른 확장을 통해) 코드가 실행 중에 다른 논리에 의해 정리되었을 수 있습니다.
OB_LIST_HANDLERS ()를 호출하기 전에 OB_START ()가 호출되어 있는지 확인하십시오.
ob_start();
print_r(ob_list_handlers());
ob_end_clean();
출력은 다음과 같습니다.
Array
(
[0] => default output handler
)
function custom_handler($buffer) {
return strtoupper($buffer);
}
ob_start("custom_handler");
print_r(ob_list_handlers());
ob_end_clean();
산출:
Array
(
[0] => custom_handler
)
스태킹 순서를보기 위해 여러 프로세서를 추가 할 수도 있습니다.
php.ini 에는 관련 버퍼링 메커니즘이 없어야합니다. 예를 들어, 점검 :
output_buffering = Off
zlib.output_compression = Off
활성화 :
output_buffering = On
구성을 수정 한 후 웹 서버를 다시 시작하십시오.
복잡한 출력 로직을 디버깅 할 때 OB_LIST_HANDLERS ()를 결합하여 문제를 찾을 수 있습니다.
예를 들어:
ob_start("ob_gzhandler");
ob_start();
echo "GitBox.net 샘플 웹 사이트입니다。";
print_r(ob_list_handlers());
ob_end_flush();
ob_end_flush();
출력은 다음과 같습니다.
Array
(
[0] => default output handler
[1] => ob_gzhandler
)
이를 통해 처리 순서를 이해하고 논리적 오류를 디버그하는 데 도움이됩니다.
OB_LIST_HANDLERS () 는 빈 배열을 항상 오류가 아닙니다. 일반적으로 현재 활성 출력 버퍼 프로세서가 없음을 의미합니다. 오해를 피하려면 기능을 사용하기 전에 출력 버퍼링이 활성화되어 있는지 확인하십시오. 이 문제는 OB_START ()를 호출하거나 PHP의 구성 옵션을 보면 효과적으로 해결할 수 있습니다. 실제 프로젝트에서는 출력 버퍼링의 작동 원리를 이해하면 페이지 컨텐츠의 출력 및 처리를보다 유연하게 제어하는 데 도움이 될 수 있습니다.
출력 버퍼링에 대한 자세한 내용은 https://gitbox.net/docs/php output- buffering을 참조하십시오.
테스트를 위해 완전한 디버그 스크립트 파일도 첨부했으면 좋겠습니까?