PHP 개발에서 출력 버퍼링 메커니즘 (출력 버퍼링)은 매우 실용적인 기능입니다. 이를 통해 개발자는 출력하기 전에 컨텐츠를 메모리에 임시로 저장할 수 있으므로 데이터가 실제로 브라우저로 전송 될 때 제어 할 수있는 유연성을 제공합니다. 출력 버퍼링은 템플릿 렌더링, 페이지 압축 또는 출력 제어를 처리 할 때 특히 중요합니다.
이 기사에서는 OB_LIST_HANDLERS () 함수를 사용하여 현재 버퍼 상태를보고 OB_END_FLUSH () 와 함께 출력 프로세스를 정확하게 관리하는 방법을 자세히 설명합니다.
PHP의 출력 버퍼링을 사용하면 클라이언트의 출력을 "지연"할 수 있습니다. 일반적으로 Echo , Print , Printf 등과 같은 출력 기능을 사용하면 콘텐츠가 클라이언트로 직접 전송되지만 버퍼링이 활성화되면 컨텐츠가 활성으로 새로 고침되거나 끝날 때까지 버퍼에 일시적으로 저장됩니다.
출력 버퍼링을 활성화하는 몇 가지 방법 :
ob_start(); // 기본 버퍼링을 켭니다
콜백 함수를 전달하거나 GZIP 및 기타 특수 처리를 활성화 할 수도 있습니다.
ob_start('ob_gzhandler'); // 열려 있는 gzip 압축 버퍼링
OB_LIST_HANDLERS () 함수는 현재 열린 모든 출력 버퍼 프로세서 (핸들러)를 볼 수 있습니다. 복잡한 출력 프로세스를 디버깅 할 때 매우 유용합니다.
ob_start(); // 기본 버퍼링
ob_start('ob_gzhandler'); // 버퍼링의 두 번째 층,사용 gzip
print_r(ob_list_handlers());
Array
(
[0] => ob_gzhandler
[1] => default output handler
)
참고 :이 목록은 "첫 번째 및 아웃"(스택 구조)입니다. 즉, 마지막으로 열린 버퍼는 먼저 처리됩니다.
OB_END_FLUSH () 는 "현재 버퍼를 종료하고 컨텐츠를 출력하는 데 사용됩니다. 가장 바깥 쪽 버퍼 (즉, 마지막으로 켜진 마지막 버퍼) 만 종료 할 수 있습니다.
ob_start(); // default buffer
ob_start('ob_gzhandler'); // gzip buffer
echo "Hello, Gitbox!";
// 현재 버퍼 스택을 봅니다
print_r(ob_list_handlers());
// 마치다 gzip 버퍼 및 출력 컨텐츠
ob_end_flush();
// 나머지 버퍼링을 봅니다
print_r(ob_list_handlers());
// 再마치다 default 버퍼 및 출력
ob_end_flush();
레이어별로 버퍼 레이어를 지우는 이러한 방법은 컨텐츠가 예상 순서 및 형식으로 출력되도록합니다.
템플릿 렌더링 시스템
버퍼 캡처 템플릿 조각화 출력을 사용하여 균일 교체 또는 어셈블리를 수행하십시오.
페이지 압축 및 캐싱
OB_GZHANDLER를 사용하여 GZIP 압축을 구현하십시오.
또는 추가 공간 또는 라인 브레이크를 지우는 것과 같은 사용자 정의 핸들러.
디버그 출력 순서
OB_LIST_HANDLERS ()를 사용하면 특정 버퍼링 레이어를 끄는 것을 잊어 버리는지 신속하게 식별 할 수 있습니다.
function compress_output($buffer) {
// 간단한 압축:라인 브레이크와 여분의 공간을 제거하십시오
$buffer = preg_replace('/\s+/', ' ', $buffer);
return $buffer;
}
ob_start('compress_output');
echo "<html>\n";
echo " <body> \n";
echo " Welcome to Gitbox.net! \n";
echo " </body>\n";
echo "</html>";
ob_end_flush();
출력은 경량 HTML 페이지를 생성하는 데 적합한 한 줄로 압축됩니다.
OB_LIST_HANDLERS () 를 통해 쉽게 디버깅 및 제어 할 수 있도록 모든 현재 버퍼 프로세서를 명확하게 볼 수 있습니다. OB_END_FLUSH () 의 도움으로보다 정확하고 계층화 된 출력 제어를 달성하기 위해 필요에 따라 출력 컨텐츠를 해제 할 수 있습니다. 이 두 기능을 결합하면 출력 로직을 처리 할 때 더 편안해질 수 있습니다.
고유 한 템플릿 엔진을 구축하거나 SEO 최적화를 수행하거나 응답 압축 및 캐시 구현에 관계없이 출력 버퍼링 제어는 마스터 할 가치가있는 중요한 도구입니다.