현재 위치: > 최신 기사 목록> PHP에서 OB_START를 사용하여 출력 버퍼링을 구현하는 방법은 무엇입니까? 자세한 단계 분석

PHP에서 OB_START를 사용하여 출력 버퍼링을 구현하는 방법은 무엇입니까? 자세한 단계 분석

gitbox 2025-09-11

<span><span><span class="hljs-meta">&lt;?php</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">"이 튜토리얼을 읽을 수 있습니다!\n"</span></span><span>;
</span><span><span class="hljs-meta">?&gt;</span></span><span>
</span></span>

PHP 개발에서는 압축, 캐싱, HTML 컨텐츠 수정 등과 같은 브라우저로 컨텐츠를 보내기 전에 출력을 처리해야합니다. OB_START () 는 PHP가 제공하는 매우 강력한 출력 버퍼링 기능으로 개발자가 출력 스트림을 유연하게 제어하는 ​​데 도움이 될 수 있습니다. 이 기사에서는 PHP에서 OB_START를 사용하여 출력 버퍼링을 구현하는 방법에 대해 자세히 설명합니다.

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

기본적으로 PHP는 Echo 또는 Print 와 같은 출력 문을 실행할 때 즉시 브라우저에 컨텐츠를 전송합니다. 출력 버퍼링을 사용하면 PHP가 버퍼가 지워 지거나 전송 될 때까지 먼저 버퍼에 출력을 저장할 수 있습니다. 이를 통해 개발자는 다음을 수행 할 수 있습니다.

  • 브라우저로 전송하기 전에 출력을 수정하십시오.

  • 출력 순서를 제어합니다.

  • 콘텐츠 압축 또는 캐싱 메커니즘을 구현합니다.

  • "헤더가 이미 보낸"오류를 피하십시오.

2. 기본 사용

PHP에서는 ob_start ()를 사용하여 출력 버퍼링을 활성화하는 것이 매우 간단합니다.

 <span><span><span class="hljs-meta">&lt;?php</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">"이 섹션은 먼저 버퍼에 저장됩니다,즉시 출력하는 대신。"</span></span><span>;

</span><span><span class="hljs-comment">// 버퍼링 된 콘텐츠를 얻으십시오</span></span><span>
</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><span class="hljs-keyword">echo</span></span><span> </span><span><span class="hljs-string">"버퍼의 내용은입니다: "</span></span><span> . </span><span><span class="hljs-variable">$content</span></span><span>;

</span><span><span class="hljs-comment">// 버퍼링을 제거하고 끕니다</span></span><span>
</span><span><span class="hljs-title function_ invoke__">ob_end_clean</span></span><span>(); </span><span><span class="hljs-comment">// 버퍼링 된 컨텐츠 출력이 없습니다,직접 지우십시오</span></span><span>
</span><span><span class="hljs-meta">?&gt;</span></span><span>
</span></span>

설명하다

  1. OB_START () : 출력 버퍼링을 시작합니다.

  2. OB_GET_CONTENTS () : 현재 버퍼의 내용을 가져옵니다.

  3. OB_END_CLEAN () : 컨텐츠를 출력하지 않고 버퍼를 지우고 버퍼를 닫습니다.

  4. 버퍼링 된 컨텐츠를 지우지 않고 출력하려면 OB_END_FLUSH ()를 사용할 수 있습니다.

3. 콜백 함수를 사용하여 버퍼링 된 컨텐츠를 처리하십시오

OB_START ()는 출력을 브라우저로 전송하기 전에 출력을 처리 할 수있는 콜백 함수를 수락 할 수 있습니다. 예를 들어 HTML을 압축합니다.

 <span><span><span class="hljs-meta">&lt;?php</span></span><span>
</span><span><span class="hljs-comment">// 콜백 함수 압축 HTML</span></span><span>
</span><span><span class="hljs-function"><span class="hljs-keyword">function</span></span></span><span> </span><span><span class="hljs-title">compress_output</span></span><span>(</span><span><span class="hljs-params"><span class="hljs-variable">$buffer</span></span></span><span>) {
    </span><span><span class="hljs-variable">$search</span></span><span> = [</span><span><span class="hljs-string">'/&gt;\s+/'</span></span><span>,</span><span><span class="hljs-string">'/\s+&lt;/'</span></span><span>,</span><span><span class="hljs-string">'/\s{2,}/'</span></span><span>];
    </span><span><span class="hljs-variable">$replace</span></span><span> = [</span><span><span class="hljs-string">'&gt;'</span></span><span>,</span><span><span class="hljs-string">'&lt;'</span></span><span>,</span><span><span class="hljs-string">' '</span></span><span>];
    </span><span><span class="hljs-keyword">return</span></span><span> </span><span><span class="hljs-title function_ invoke__">preg_replace</span></span><span>(</span><span><span class="hljs-variable">$search</span></span><span>, </span><span><span class="hljs-variable">$replace</span></span><span>, </span><span><span class="hljs-variable">$buffer</span></span><span>);
}

</span><span><span class="hljs-title function_ invoke__">ob_start</span></span><span>(</span><span><span class="hljs-string">"compress_output"</span></span><span>);

</span><span><span class="hljs-keyword">echo</span></span><span> </span><span><span class="hljs-string">"&lt;html&gt;   &lt;body&gt;    &lt;h1&gt;  환영 PHP 출력 버퍼링  &lt;/h1&gt;  &lt;/body&gt; &lt;/html&gt;"</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><span class="hljs-meta">?&gt;</span></span><span>
</span></span>

이 예에서 콜백 함수 compress_output은 HTML에서 불필요한 공백 및 라인 파괴를 제거하여 전송 된 데이터의 양이 줄어 듭니다.

4. 다단계 버퍼링 및 중첩 사용

PHP는 다단계 버퍼링을 지원하므로 하나의 버퍼에서 다른 버퍼를 켤 수 있습니다.

 <span><span><span class="hljs-meta">&lt;?php</span></span><span>
</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">"버퍼링의 첫 번째 층"</span></span><span>;

</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">"버퍼링의 두 번째 층"</span></span><span>;

</span><span><span class="hljs-keyword">echo</span></span><span> </span><span><span class="hljs-string">"버퍼링의 두 번째 층内容: "</span></span><span> . </span><span><span class="hljs-title function_ invoke__">ob_get_contents</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><span class="hljs-keyword">echo</span></span><span> </span><span><span class="hljs-string">"버퍼링의 첫 번째 층内容: "</span></span><span> . </span><span><span class="hljs-title function_ invoke__">ob_get_contents</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><span class="hljs-meta">?&gt;</span></span><span>
</span></span>

다단계 버퍼링을 사용하여 다른 모듈에 대한 다른 캐시 전략과 같은 레이어의 다른 출력을 처리 할 수 ​​있습니다.

5. 일반적인 예방 조치

  1. 출력이 전송 된 후에 헤더 정보를 보내지 마십시오 . 출력 버퍼링을 사용하면 "이미 전송 된 헤더"오류를 피할 수 있습니다.

  2. 캐시 제어 : 페이지를 캐시하거나 압축 해야하는 경우 버퍼가 너무 일찍 지워지지 않도록하십시오.

  3. 성능 고려 사항 : 대형 파일 버퍼는 메모리를 점유 할 수 있으며주의해서 사용해야합니다.

6. 요약

OB_START () 를 통해 PHP 개발자는 출력 전송 시간과 컨텐츠 처리 방법을 완전히 제어 할 수 있습니다. 페이지 압축, 캐싱 정책 또는 헤더 정보 오류 방지에 관계없이 출력 버퍼링은 매우 실용적인 도구입니다. OB_START () 및 관련 함수 (예 : OB_GET_CONTENTS () , OB_END_FLUSH () , OB_END_CLEAN () )를 마스터 한 후 PHP 출력 관리 기능이 크게 향상됩니다.