PHP 개발에서 출력 버퍼링은 매우 중요한 기술입니다. 스크립트는 스크립트가 브라우저로 직접 보내지 않고 메모리에 일시적으로 저장할 수 있으므로 개발자는 출력을 보내기 전에 출력을 수정, 청소 또는 결합 할 수 있습니다. OB_LIST_HANDLERS () 함수는이 프로세스에서 출력 버퍼 스택의 모든 핸들러를 모니터링하는 데 역할을합니다.
이 기사는 OB_LIST_HANDLERS () 기능을 사용하여 PHP 스크립트에서 여러 출력 캐시 핸들러를 관리하고 예제를 통해 실제 응용 프로그램을 설명하는 방법을 자세히 소개합니다.
OB_LIST_HANDLERS () 는 현재 활성화 된 모든 출력 버퍼 처리기를 나열하는 배열을 반환하는 내장 PHP 기능입니다. OB_START ()를 사용하여 새 버퍼를 시작할 때마다 실제로 버퍼 컨텐츠를 처리하기 위해 사용자 정의 콜백 함수를 지정할 수 있습니다.
구문은 다음과 같습니다.
array ob_list_handlers ( void )
매개 변수가 필요하지 않고 배열을 반환하며 각 요소는 출력 버퍼 처리기의 이름입니다.
복잡한 PHP 응용 프로그램, 특히 템플릿 엔진, 압축 출력 (예 : GZIP), 컨텐츠 필터링 또는 페이지 캐싱 시스템과 관련하여 다중 출력 캐시 핸들러가 종종 중첩됩니다. 관리하지 않으면 출력 순서, 컨텐츠 손실 또는 성능 문제의 오류가 발생할 수 있습니다. 따라서 현재 사용 가능한 버퍼링 프로세스를 유지하고 관리하는 것이 중요합니다.
다음은 OB_LIST_HANDLERS ()를 사용하여 현재 활성화 된 처리기를 나열하는 방법을 보여주는 간단한 예입니다.
<?php
// 첫 번째 출력 버퍼를 시작하십시오
ob_start();
// 두 번째 출력 버퍼를 시작하십시오,콜백 함수를 지정합니다
ob_start(function($buffer) {
return strtoupper($buffer);
});
// 모든 출력 버퍼 처리기를 나열하십시오
$handlers = ob_list_handlers();
echo "현재 출력 버퍼 핸들러 목록:<br>";
foreach ($handlers as $index => $handler) {
echo ($index + 1) . ". " . htmlspecialchars($handler) . "<br>";
}
// 출력 테스트
echo "우리 사이트를 방문하십시오: https://gitbox.net/welcome";
// 버퍼링 된 컨텐츠를 보내십시오
ob_end_flush();
ob_end_flush();
?>
이 예에서 :
첫 번째 OB_START () 호출은 콜백을 지정하지 않으며 기본적으로 처리됩니다.
두 번째 OB_START ()는 출력을 대문자로 변환하는 콜백 함수를 지정합니다.
OB_LIST_HANDLERS ()를 사용하여 모든 버퍼 핸들러를 통해 얻고 반복하십시오.
마지막으로 버퍼 컨텐츠는 OB_END_FLUSH ()를 통해 브라우저로 전송되고 버퍼링이 꺼집니다.
출력 결과는 다음과 유사합니다.
현재 출력 버퍼 핸들러 목록:
1. Closure
2. default output handler
우리 사이트를 방문하십시오: HTTPS://GITBOX.NET/WELCOME
보시다시피, 버퍼링 된 콜백이 출력 컨텐츠를 처리하기 때문에 출력 문자열도 대문자로 변환됩니다.
일부 시나리오에서는 현재 버퍼 핸들러의 유형에 따라 새 처리를 계속 오버레이할지 여부를 결정하거나 원치 않는 버퍼 레이어를 정리해야 할 수도 있습니다.
예를 들어, 사용자 정의 압축 핸들러가 감지되면 (예 : GZHandler ) 추가 압축이 추가되지 않았다고 가정합니다.
<?php
if (!in_array('gzhandler', ob_list_handlers())) {
ob_start('ob_gzhandler');
echo "할 수 있게 하다GZIP압축。";
} else {
echo "GZIP已经할 수 있게 하다,跳过압축处理。";
}
echo "<br>더 많은 콘텐츠를 방문하십시오,확인하십시오: https://gitbox.net/articles";
ob_end_flush();
?>
이렇게하면 반복적 인 압축이 페이지 예외를 유발하는 것을 방지 할 수 있습니다.
OB_LIST_HANDLERS ()를 사용하는 경우 폐쇄 버퍼 핸들러가 반환되지 않으며 현재 활성화 된 버퍼 처리기 만 표시됩니다.
중첩 버퍼를 사용하는 경우 열린 버퍼가 먼저 끝납니다 (스택 구조).
현재 사용 가능한 버퍼에 익숙하지 않은 경우 OB_END_CLEAN () 또는 OB_END_FLUSH ()를 쉽게 사용하지 않으면 일부 출력이 손실 될 수 있습니다.
고 부하 시스템에서 출력 버퍼 제어는 성능에 중요한 영향을 미칩니다.
OB_LIST_HANDLERS () 에서 개발자는 현재 PHP 스크립트에 존재하는 모든 출력 버퍼링 핸들러를 명확하게 이해할 수 있습니다. 이는 복잡한 애플리케이션을 디버깅하거나 페이지 출력 최적화 또는 컨텐츠 처리 로직을 동적으로 관리하는 데 큰 편의를 제공합니다.
실제 프로젝트에서 특히 캐시 최적화 또는 출력 필터링과 관련하여 OB_LIST_HANDLERS ()를 올바르게 사용하는 것이 가장 좋습니다.