출력 버퍼링이란 무엇이며 왜 PHP에서 그것을 사용하는가?
질문에 대한 답변
웹 개발자용 출력 버퍼링, 초보자 가이드:
출력 버퍼링(기본값)을 사용하지 않으면 HTML은 PHP가 스크립트를 처리할 때 조각으로 브라우저에 전송됩니다.출력 버퍼링을 사용하면 HTML이 변수에 저장되고 스크립트의 마지막에 하나로 브라우저로 전송됩니다.
웹 개발자를 위한 출력 버퍼링의 이점
- 출력 버퍼링만 켜면 PHP가 HTML을 처리할 때 HTML이 조각으로 브라우저로 전송되지 않기 때문에 HTML을 다운로드하고 렌더링하는 데 걸리는 시간이 줄어듭니다.
- PHP 문자열로 할 수 있는 모든 화려한 작업을 이제는 HTML 페이지 전체를 하나의 변수로 사용할 수 있습니다.
- 쿠키를 설정하는 동안 “경고: 머리글 정보를 수정할 수 없습니다 – 이미 (출력)에서 보낸 머리글”이라는 메시지가 나타나면 출력 버퍼링이 정답임을 알게 됩니다.
출력 버퍼링은 성능을 향상시키고 몇 가지 트릭을 수행하기 위해 PHP에 의해 사용됩니다.
PHP가 모든 출력을 버퍼에 저장하고 네트워크 성능을 향상시키도록 할 수 있습니다.
특정 상황에서는 버퍼 콘텐츠를 브라우저에 다시 보내지 않고 버퍼 콘텐츠에 액세스할 수 있습니다.
다음 예를 생각해 보겠습니다.
<?php
ob_start( );
phpinfo( );
$output = ob_get_clean( ); ?>
위의 예에서는 출력을 브라우저로 전송하지 않고 변수에 캡처합니다.output_dischering은 디폴트로 오프되어 있습니다.
- 출력 버퍼링은 콘텐츠를 전송한 후 헤더를 수정하려는 경우에 사용할 수 있습니다.
다음 예를 생각해 보겠습니다.
<?php
ob_start( );
echo "Hello World";
if ( $some_error )
{
header( "Location: error.php" );
exit( 0 );
} ?>
오래된 질문인 건 알지만 시각 학습자를 위해 답을 쓰고 싶었어요.worldwide-web에서 출력 버퍼링을 설명하는 그림을 찾을 수 없었기 때문에 Windows에서 직접 그림을 만들었습니다.mspaint.exe
.
출력 버퍼링이 꺼진 경우echo
는 브라우저로 데이터를 즉시 전송합니다.
출력 버퍼링이 켜져 있는 경우echo
는 출력 버퍼를 브라우저로 전송하기 전에 출력 버퍼로 데이터를 전송합니다.
핀포
출력 버퍼링이 온/오프 되어 있는지 확인하려면 , 코어 섹션의 phpinfo 를 참조해 주세요.그output_buffering
디렉티브는 출력 버퍼링이 온/오프인지 여부를 알려줍니다.
이 경우,
output_buffering
value는 4096으로 버퍼 사이즈가 4KB임을 의미합니다.또한 웹 서버에서 출력 버퍼링이 켜져 있음을 의미합니다.
php.ini
의 값을 변경하여 버퍼 크기를 설정/해제하거나 변경할 수 있습니다.output_buffering
지시.에서 찾을 수 있습니다.php.ini
를 선택한 설정으로 변경하고 웹 서버를 재시작합니다.제 샘플이 있습니다.php.ini
아래.
; Output buffering is a mechanism for controlling how much output data ; (excluding headers and cookies) PHP should keep internally before pushing that ; data to the client. If your application's output exceeds this setting, PHP ; will send that data in chunks of roughly the size you specify. ; Turning on this setting and managing its maximum buffer size can yield some ; interesting side-effects depending on your application and web server. ; You may be able to send headers and cookies after you've already sent output ; through print or echo. You also may see performance benefits if your server is ; emitting less packets due to buffered output versus PHP streaming the output ; as it gets it. On production servers, 4096 bytes is a good setting for performance ; reasons. ; Note: Output buffering can also be controlled via Output Buffering Control ;
functions. ; Possible Values: ;
On = Enabled and buffer is unlimited. (Use with caution) ;
Off = Disabled ;
Integer = Enables the buffer and sets its maximum size in bytes. ; Note: This directive is hardcoded to Off for the CLI SAPI ; Default Value: Off ; Development Value: 4096 ; Production Value: 4096 ; http://php.net/output-buffering output_buffering = 4096
지시문output_buffering
출력 버퍼링에 관한 설정 가능한 디렉티브는 이뿐만이 아닙니다.설정 가능한 다른 출력 버퍼링 디렉티브는, http://php.net/manual/en/outcontrol.configuration.php 를 참조해 주세요.
예: ob_get_clean()
아래에서는, 다음의 정보를 캡쳐 하는 방법을 나타냅니다.echo
브라우저로 전송하기 전에 조작할 수 있습니다.
// Turn on output buffering
ob_start();
echo 'Hello World';
// save to output buffer
$output = ob_get_clean();
// Get content from the output buffer, and discard the output buffer ... $output = strtoupper($output); // manipulate the output
echo $output;
// send to output stream / Browser
// OUTPUT:
HELLO WORLD
예:Hackingwithphp.com
출력 버퍼에 대한 자세한 내용은 다음 URL을 참조하십시오.
http://www.hackingwithphp.com/13/0/0/output-buffering
출력 제어 기능을 사용하면 스크립트에서 출력이 전송되는 시기를 제어할 수 있습니다.이 기능은 특히 스크립트가 데이터 출력을 시작한 후 브라우저로 헤더를 전송해야 하는 경우에 유용합니다.출력 제어 함수는 header() 또는 setcookie()를 사용하여 전송되는 헤더에는 영향을 주지 않으며 echo()와 같은 함수 및 PHP 코드 블록 간의 데이터에만 영향을 줍니다.
http://php.net/manual/en/book.outcontrol.php
기타 자원:
이름에서 알 수 있듯이 스크립트 출력 방법을 관리하는 데 사용되는 메모리 버퍼입니다.