출력 버퍼링이란 무엇입니까?

출력 버퍼링이란 무엇이며 왜 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는 브라우저로 데이터를 즉시 전송합니다.

enter image description here

출력 버퍼링이 켜져 있는 경우echo는 출력 버퍼를 브라우저로 전송하기 전에 출력 버퍼로 데이터를 전송합니다.

enter image description here

핀포

출력 버퍼링이 온/오프 되어 있는지 확인하려면 , 코어 섹션의 phpinfo 를 참조해 주세요.output_buffering디렉티브는 출력 버퍼링이 온/오프인지 여부를 알려줍니다.

여기에 이미지 설명 입력 이 경우,output_bufferingvalue는 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

기타 자원:

PHP를 사용한 출력 버퍼링




이름에서 알 수 있듯이 스크립트 출력 방법을 관리하는 데 사용되는 메모리 버퍼입니다.

여기 토픽에 대한 매우 좋은 튜토리얼이 있습니다.