현재 위치: > 최신 기사 목록> PHP의 OB_FLUSH와 플러시의 차이점은 무엇입니까? 사용법 비교 분석

PHP의 OB_FLUSH와 플러시의 차이점은 무엇입니까? 사용법 비교 분석

gitbox 2025-06-24

1. 기본 개념

PHP에서 출력 버퍼링 메커니즘은 스크립트에서 생성 된 출력을 캐시하는 데 사용되며 스크립트가 실행될 때까지 브라우저로 전송되지 않습니다. 이를 수행하는 데 두 가지 주요 이점이 있습니다.

  1. 페이지가 렌더링 될 때 일부 처리가 수행되도록 콘텐츠가 출력되는시기를 제어 할 수 있습니다.

  2. 경우에 따라 성능이 향상되고 브라우저와의 상호 작용 수를 줄일 수 있습니다.

ob_flush () :

OB_FLUSH () 는 출력 버퍼의 내용을 브라우저로 전송하는 출력 버퍼 함수이며 버퍼의 내용을 지우지는 않습니다. 따라서 OB_FLUSH ()를 호출 한 후에 버퍼의 내용이 여전히 유지되어 계속 사용될 수 있습니다.

플러시 () :

Flush () 는 시스템 출력 버퍼를 강제로 새로 고치는 데 사용되는 기능입니다. 모든 것을 브라우저로 보내려고하지만 OB_FLUSH () 와 달리 PHP의 출력 버퍼가 포함되지 않으며 PHP의 내부 버퍼 만 플러시합니다. Flush ()가 호출되면 PHP는 버퍼의 내용을 브라우저로 푸시하여 사용자 가이 데이터를 볼 때까지 기다립니다.


2. OB_FLUSH ()FLUSH () 의 차이

OB_FLUSH ()flush () 는 출력을 브라우저로 보낼 수 있지만 사용 시나리오와 효과는 다르지만 특정 차이점은 다음과 같습니다.

특성 ob_flush () 플러시()
행동의 대상 PHP 출력 버퍼 시스템 출력 버퍼
버퍼를 제거할지 여부 버퍼를 지우지 않습니다 버퍼를 지 웁니다
출력 버퍼링에 의존할지 여부 출력 버퍼링 메커니즘에 따라 다릅니다 출력 버퍼링 메커니즘에 의존하지 않습니다
일반적인 시나리오 일반적으로 OB_START () 와 함께 사용되는 출력 버퍼링 작업 장기 실행 스크립트에 종종 사용되는 브라우저에 새로 고침 및 출력을 강제로 출력합니다.
  • OB_FLUSH ()는 PHP 출력 버퍼가 켜져있을 때 버퍼의 내용을 브라우저로 전송하는 데 사용되며 버퍼 자체가 지워지지 않습니다.

  • Flush () 는 PHP 출력 버퍼링 메커니즘에 의존하지 않는 상황에 적합한 버퍼 컨텐츠를 브라우저로 보내는 시스템 수준의 출력 새로 고침 기능입니다.


3. 예와 응용 프로그램

1. OB_FLUSH () 예제

 <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-title function_ invoke__">ob_start</span></span><span>();

</span><span><span class="hljs-keyword">echo</span></span><span> </span><span><span class="hljs-string">"1 부 데이터 출력,보내기를 기다립니다..."</span></span><span>;

</span><span><span class="hljs-comment">// 브라우저에 콘텐츠를 보내십시오,그러나 버퍼는 여전히 남아 있습니다</span></span><span>
</span><span><span class="hljs-title function_ invoke__">ob_flush</span></span><span>();
</span><span><span class="hljs-title function_ invoke__">flush</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-title function_ invoke__">ob_end_flush</span></span><span>();
</span><span><span class="hljs-meta">?&gt;</span></span><span>
</span></span>

위의 예에서 OB_START ()는 출력 버퍼링 메커니즘을 활성화합니다. OB_FLUSH ()는 버퍼의 데이터를 브라우저에 출력하지만 버퍼를 지우지 않으므로 스크립트가 완료 될 때까지 출력의 두 번째 부분이 계속 버퍼링됩니다.

2. 플러시 () 예제

 <span><span><span class="hljs-meta">&lt;?php</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-title function_ invoke__">flush</span></span><span>();

</span><span><span class="hljs-comment">// 장기 실행 작업을 시뮬레이션합니다</span></span><span>
</span><span><span class="hljs-title function_ invoke__">sleep</span></span><span>(</span><span><span class="hljs-number">2</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-meta">?&gt;</span></span><span>
</span></span>

이 예에서 Flush ()는 출력 버퍼를 강제하여 브라우저가 "처리 시작 데이터 ..."의 컨텐츠를 즉시 수신하고 다음 "작업 완료"의 내용을 즉시 수신 할 수 있도록합니다. 2 초 후에 표시됩니다. 이 방법은 사용자가 실시간 진행 상황을 인식 해야하는 시나리오에 특히 적합합니다.


4. 일반적인 시나리오 및 응용 프로그램

  1. 장기 실행 스크립트 (예 : 다운로드, 파일 처리)
    완료하는 데 시간이 오래 걸리는 작업을 수행하는 경우 (예 : 파일 업로드 또는 다운로드) OB_FLUSH ()FLUSH ()를 사용하여 사용자가 진행 상황을 느끼고 브라우저 타임 아웃을 피할 수 있습니다.

  2. 실시간 데이터 푸시 <br> 예를 들어, 실시간 데이터 디스플레이, 채팅 시스템 및 기타 시나리오에서 Flush () 는 데이터를 실시간으로 사용자의 브라우저로 푸시 할 수 있도록하고 사용자가 지연 또는 빈 페이지를 보지 않도록합니다.

  3. 페이지 렌더링 최적화 <br> 페이지 렌더링 프로세스 중에 OB_FLUSH ()FLUSH ()를 사용하면 사용자가 스크립트가 여전히 실행중인 동안 페이지 컨텐츠의 일부를 볼 수 있으므로 사용자 경험이 향상됩니다.