출력 버퍼링(Output Buffering)은 PHP 엔진에게 브라우저로 데이터를 보내기 전에 출력 내용을 임시로 저장하도록 지시하는 기술입니다. 일반적으로 PHP는 출력 데이터를 조각조각 나누어 브라우저에 전송하지만, 출력 버퍼링을 활용하면 출력 데이터가 변수(버퍼)에 저장되고 스크립트 실행이 끝나는 시점에 한 번에 브라우저로 전달됩니다.
출력 버퍼링 예제
간단한 예제를 통해 동작 방식을 살펴보겠습니다.
<?php
ob_start();
echo "Hello";
$ob1 = ob_get_contents();
echo "Tutorials Point";
$ob2 = ob_get_contents();
ob_end_clean();
var_dump($ob1, $ob2);
?>
실행 결과
string(5) "Hello" string(20) "HelloTutorials Point"
코드 설명
위 예제에서 ob_start()가 호출된 이후 생성된 모든 출력은 버퍼에 누적됩니다. ob_get_contents() 함수는 이 시점까지 버퍼에 쌓인 모든 데이터를 가져오며, 마지막에는 모아둔 출력 데이터를 한 번에 처리하게 됩니다.
주요 함수들을 정리하면 다음과 같습니다:
- ob_start(): 출력 버퍼링을 시작합니다.
- ob_get_contents(): 현재 버퍼에 저장된 내용을 문자열로 반환합니다.
- ob_end_clean(): 버퍼의 내용을 삭제하고 출력 버퍼링을 종료합니다.
출력 버퍼링의 장점
- 출력 버퍼링만 활성화해도 HTML을 브라우저에서 다운로드하고 렌더링하는 데 걸리는 시간이 줄어들며, 결과적으로 PHP 스크립트의 실행 시간도 단축됩니다.
- 쿠키 설정 시 "Warning: Cannot modify header information - headers already sent by (output)"와 같은 경고 메시지를 경험해 본 적이 있다면, 출력 버퍼링으로 이 문제를 해결할 수 있습니다. 헤더 정보는 본문 출력보다 먼저 전송되어야 하기 때문에, 출력을 버퍼에 임시 보관하면 헤더 수정이 가능해집니다.