PHP에서 출력 버퍼링은 개발자가 컨텐츠 출력 타이밍을 제어 할 수있는 강력한 기능입니다. OB_END_FLUSH () 는 출력 버퍼 관련 기능 중 하나이며 출력 버퍼를 닫고 버퍼의 내용을 브라우저로 보냅니다. 이 기사는 OB_END_FLUSH () 의 기본 사용법과 실제 개발에서 PHP 출력 버퍼를 올바르게 사용하는 방법에 대해 자세히 소개합니다.
PHP 실행 중에 모든 출력 컨텐츠 (예 : HTML, 텍스트 등)는 일반적으로 브라우저로 직접 전송됩니다. 그러나 PHP는 출력 전에 일부 기능을 호출 할 때까지 개발자가 먼저 메모리에 컨텐츠를 저장할 수있는 출력 버퍼 메커니즘을 제공합니다. 이 메커니즘에는 다음과 같은 이점이 있습니다.
제어 출력 타이밍 : 콘텐츠가 브라우저로 전송 될 때 제어 할 수 있으며 실행 중에 출력을 수정할 수도 있습니다.
성능 향상 : HTTP 응답 헤더 또는 반복 된 I/O 작업의 다중 전송을 줄여 성능을 최적화하십시오.
유연성 : 특정 조건에서 개발자는 콘텐츠를 출력하지 않거나 출력 전에 캐시 또는 압축과 같은 일부 작업을 수행 할 수 있습니다.
OB_END_FLUSH () 함수의 목적은 출력 버퍼를 닫고 버퍼의 모든 것을 브라우저로 보내는 것입니다. 이 기능은 일반적으로 출력 버퍼를 종료하는 데 사용되며 버퍼링 된 컨텐츠가 사용자에게 올바르게 전달되도록합니다.
<span><span><span class="hljs-title function_ invoke__">ob_end_flush</span></span><span>();
</span></span>반환 값 : 성공하면 진정으로 반환하십시오. 버퍼가 현재 열리지 않은 경우 false를 반환하십시오.
먼저 PHP 스크립트에서 일부 컨텐츠를 출력 버퍼에 버퍼링 한 다음 스크립트가 실행 된 후 한 번에 모든 것을 출력한다고 가정하십시오. 간단한 예는 다음과 같습니다.
<span><span><span class="hljs-meta"><?php</span></span><span>
</span><span><span class="hljs-comment">// 출력 버퍼링을 켭니다</span></span><span>
</span><span><span class="hljs-title function_ invoke__">ob_start</span></span><span>();
</span><span><span class="hljs-comment">// 일부 내용을 출력하십시오,하지만 바로 브라우저로 보내지 않을 것입니다.</span></span><span>
</span><span><span class="hljs-keyword">echo</span></span><span> </span><span><span class="hljs-string">"Hello, this is some buffered content!"</span></span><span>;
</span><span><span class="hljs-comment">// 스크립트 끝에 버퍼 컨텐츠를 출력하고 버퍼를 닫습니다.</span></span><span>
</span><span><span class="hljs-title function_ invoke__">ob_end_flush</span></span><span>();
</span><span><span class="hljs-meta">?></span></span><span>
</span></span>위의 코드에서 OB_START ()는 출력 버퍼를 시작하고 모든 에코 출력은 즉시 브라우저로 전송되지 않고 메모리에 저장됩니다. OB_END_FLUSH ()가 호출 될 때까지 버퍼의 내용은 브라우저로 전송되지 않습니다.
ob_end_flush ()를 사용할 때는 일반적으로 출력 버퍼의 동작을 더 잘 제어해야합니다.
OB_START () : 출력 버퍼를 켭니다. 이 기능은 출력 내용을 보내기 전에 호출됩니다.
<span><span><span class="hljs-title function_ invoke__">ob_start</span></span><span>();
</span></span>OB_GET_CONTENTS () : 현재 버퍼의 내용을 가져 오지만 지우지 마십시오. 이것은 나중에 사용하기 위해 출력을 디버그하거나 얻는 데 사용될 수 있습니다.
<span><span><span class="hljs-variable">$content</span></span><span> = </span><span><span class="hljs-title function_ invoke__">ob_get_contents</span></span><span>();
</span></span>OB_CLEAN () : 버퍼를 지우지 만 콘텐츠를 브라우저에 보내지 마십시오. 이것은 버퍼링 된 컨텐츠를 폐기 할 수 있음을 의미합니다.
<span><span><span class="hljs-title function_ invoke__">ob_clean</span></span><span>();
</span></span>OB_END_CLEAN () : 버퍼의 내용을 브라우저로 보내지 않는 경우를 제외하고 OB_END_FLUSH () 와 유사한 버퍼를 지우고 닫습니다.
<span><span><span class="hljs-title function_ invoke__">ob_end_clean</span></span><span>();
</span></span>페이지 압축 : 출력 버퍼를 사용하여 페이지 컨텐츠를 압축 한 다음 브라우저로 보낼 수있어 페이지의 크기와로드 시간을 효과적으로 줄일 수 있습니다. 다음은 ob_start () 및 ob_end_flush ()를 사용한 페이지 압축의 예입니다.
<span><span><span class="hljs-title function_ invoke__">ob_start</span></span><span>(</span><span><span class="hljs-string">"ob_gzhandler"</span></span><span>);
</span><span><span class="hljs-comment">// 페이지 출력 내용</span></span><span>
</span><span><span class="hljs-keyword">echo</span></span><span> </span><span><span class="hljs-string">"This is a test page."</span></span><span>;
</span><span><span class="hljs-title function_ invoke__">ob_end_flush</span></span><span>(); </span><span><span class="hljs-comment">// 압축 및 출력</span></span><span>
</span></span>위의 코드에서 OB_GZHANDLER 기능은 출력 내용에서 GZIP 압축을 수행하는 데 사용됩니다.
지연된 출력 : PHP 스크립트 실행 중에 일부 컨텐츠 (예 : 계산 결과, 보고서 생성 등)를 처리해야하지만 사용자가 중간 프로세스를 확인하지 않으려면 모든 처리가 완료되고 다시 출력 될 때까지 출력 버퍼를 사용하여 콘텐츠를 캐시 할 수 있습니다.
헤더 정보 충돌을 피하십시오 : PHP에서는 출력을 보내기 전에 HTTP 헤더 정보를 설정해야합니다 (예 : Header () 기능). 헤더 정보를 보내기 전에 출력이 있으면 오류가 발생합니다. 이 문제는 버퍼를 출력하여 피할 수 있습니다. 컨텐츠를 먼저 버퍼링 한 다음 설정 후 헤더 정보를 출력 할 수 있습니다.
<span><span><span class="hljs-title function_ invoke__">ob_start</span></span><span>();
</span><span><span class="hljs-keyword">echo</span></span><span> </span><span><span class="hljs-string">"This is some content"</span></span><span>;
</span><span><span class="hljs-title function_ invoke__">header</span></span><span>(</span><span><span class="hljs-string">"Location: another_page.php"</span></span><span>); </span><span><span class="hljs-comment">// 리디렉션</span></span><span>
</span><span><span class="hljs-title function_ invoke__">ob_end_flush</span></span><span>(); </span><span><span class="hljs-comment">// 출력 내용</span></span><span>
</span></span>출력 버퍼는 특히 버퍼의 내용이 클 때 일부 시나리오에서 메모리 소비가 증가 할 수 있습니다. 이 경우 너무 많은 콘텐츠를 버리지 않도록하십시오.
OB_END_FLUSH () 또는 OB_END_CLEAN ()을 호출하지 않고 PHP는 스크립트 끝에서 출력 버퍼를 자동으로 지우고 콘텐츠를 브라우저로 보냅니다. 그러나 특히 리디렉션과 관련된 더 긴 스크립트 나 시나리오에서는 권장되는 연습이 아닙니다.
OB_END_FLUSH () 는 PHP 출력 버퍼 작동에서 중요한 기능입니다. 출력 버퍼를 닫을뿐만 아니라 버퍼링 된 컨텐츠가 브라우저에 올바르게 출력되도록합니다. 출력 버퍼를 합리적으로 사용하여 개발자는 페이지의 출력 타이밍을보다 유연하게 제어하고 성능을 향상 시키며 오류를 피하며 페이지로드 속도를 최적화 할 수 있습니다.
이러한 기본 작업을 마스터하면 PHP 개발 중 출력 버퍼 기능을 더 잘 활용하고 프로그램 제어 성 및 성능을 향상시키는 데 도움이됩니다.