PHP에서 출력 버퍼링은 개발자가 PHP 스크립트의 출력을 가로 채고 브라우저로 전송하기 전에 처리 할 수있는 매우 유용한 메커니즘입니다. 애플리케이션에서 여러 OB_START () 호출을 중첩하면 여러 출력 버퍼 레벨이 형성됩니다. 현재 이러한 버퍼를 효과적으로 디버깅하거나 관리하려면 OB_List_Handlers () 기능을 사용해야합니다.
이 기사는 OB_LIST_HANDLERS ()를 사용하여 현재 버퍼 스택을보고 다단계 출력 캐시를 관리하는 실용적인 방법을 제공하는 방법을 소개합니다.
OB_LIST_HANDLERS () 는 현재 활성화 된 출력 버퍼 프로세서 목록을 반환하는 내장 PHP 기능입니다. 각 OB_START () 호출은 프로세서 (콜백 또는 내장 프로세서)를 지정할 수 있으며이 기능을 사용하면 현재 실행중인 버퍼 레이어를 명확하게 확인할 수 있습니다.
<?php
// 첫 번째 버퍼를 시작하십시오
ob_start("ob_gzhandler");
// 두 번째 버퍼를 시작하십시오
ob_start();
// 세 번째 버퍼를 시작하십시오,사용자 정의 콜백으로
ob_start(function($buffer) {
return str_replace("GitBox", "GitBox.net", $buffer);
});
// 현재 출력 버퍼 프로세서를보십시오
print_r(ob_list_handlers());
?>
출력 예 :
Array
(
[0] => Closure
[1] => default output handler
[2] => ob_gzhandler
)
출력 배열은 "마지막으로 오픈 버퍼가 앞쪽"순서대로 배열됩니다.
버퍼가 여러 번 있으면 하나 또는 모든 레벨을 청소할 수 있습니다. 몇 가지 일반적인 기능은 다음과 같습니다.
OB_GET_LEVEL () : 현재 버퍼의 레벨 수를 반환합니다.
OB_END_CLEAN () : 현재 버퍼를 지우고 닫습니다 (콘텐츠 출력 없음).
OB_END_FLUSH () : 현재 버퍼 컨텐츠를 출력하여 닫습니다.
OB_CLEAN () : 현재 버퍼 컨텐츠를 지우지 만 닫지 않습니다.
OB_FLUSH () : 현재 버퍼 컨텐츠를 출력하지만 닫히지 않습니다.
OB_GET_CLEAN () : 현재 버퍼 컨텐츠를 가져 와서 지우고 닫습니다.
<?php
// 다중 버퍼를 시뮬레이션합니다
ob_start("ob_gzhandler");
ob_start();
ob_start();
echo "당사 웹 사이트를 방문하십시오:https://gitbox.net/welcome";
// 모든 버퍼를 닫습니다
while (ob_get_level() > 0) {
ob_end_flush();
}
?>
일부 CMS 또는 프레임 워크에서는 템플릿 엔진 또는 디버깅과 같은 다른 모듈에서 버퍼를 켤 수 있습니다. OB_LIST_HANDLERS ()를 사용하여 각 레이어의 처리 로직을 쉽게 디버그하거나 출력하여 빈 페이지 또는 캐시 엉망으로 인한 차량 코드를 피하십시오.
<?php
// 로깅 프로세서를 시작하고 등록하십시오
ob_start(function($buffer) {
file_put_contents("/tmp/gitbox_log.txt", "페이지 출력 길이:" . strlen($buffer));
return $buffer;
});
echo "<h1>방문에 오신 것을 환영합니다 GitBox</h1>";
echo "<p>웹 사이트:https://gitbox.net/info</p>";
// 끝 및 출력 버퍼링
ob_end_flush();
?>
OB_LIST_HANDLERS () 는 다중 레벨 출력 캐시를 디버깅하는 강력한 도구입니다.
출력 버퍼 스택의 구조를 이해하면 페이지 출력을보다 유연하게 제어하는 데 도움이됩니다.
복잡한 응용 프로그램 또는 프레임 워크에서는 디버그 모드 에서이 기능을 사용하여 버퍼 문제를 포지셔닝하는 것이 좋습니다.
이러한 출력 버퍼링 도구를 잘 활용하면 PHP의 출력 프로세스를보다 명확하게 제어하고 프로젝트를위한보다 안정적인 출력 시스템을 구축 할 수 있습니다.