OB_END_CLEAN ()을 사용하기 전에 출력 버퍼가 켜져 있는지 확인해야합니다. PHP는 기본적으로 출력 버퍼링을 활성화하지 않으므로 기능이 버퍼링을 활성화하지 않고 호출되면 프로그램에 경고가 발생합니다. 출력 작업을 수행하기 전에 OB_START () 를 통해 출력 버퍼를 명시 적으로 켜는 것이 일반적입니다.
<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-title function_ invoke__">ob_end_clean</span></span><span>(); </span><span><span class="hljs-comment">// 버퍼를 지우고 닫습니다</span></span><span>
</span></span>
OB_START ()을 호출하지 않으면 OB_END_CLEAN () 만 사용하면 프로그램에 오류가 발생합니다.
<span><span><span class="hljs-built_in">Warning</span></span><span>: ob_end_clean(): failed </span><span><span class="hljs-keyword">to</span></span><span> </span><span><span class="hljs-keyword">delete</span></span><span> buffer. </span><span><span class="hljs-keyword">No</span></span><span> buffer </span><span><span class="hljs-keyword">to</span></span><span> </span><span><span class="hljs-keyword">delete</span></span><span>.
</span></span>
따라서 개발자는 OB_END_CLEAN ()을 호출하기 전에 출력 버퍼링이 올바르게 시작되도록해야합니다.
또 다른 쉬운 실수는 출력없이 버퍼에서 OB_END_CLEAN ()을 호출하는 것입니다. 버퍼가 비어 있으면 기능을 호출하면 프로그램에 아무런 영향을 미치지 않지만 때로는 디버깅에 불필요한 문제가 발생합니다. 버퍼에 내용이 있는지 확인하려면 먼저 OB_GET_CONTENTS ()를 사용하여 버퍼의 내용을 확인한 다음 청소 작업을 수행할지 여부를 결정할 수 있습니다.
<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">if</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_clean</span></span><span>();
}
</span></span>
이는 불필요한 경고 메시지를 피하고 OB_END_CLEAN ()이 버퍼에 내용이있을 때만 실행되도록합니다.
PHP에서 출력 버퍼는 계층 구조로 관리되며 여러 OB_START () 호출은 버퍼 스택을 형성합니다. ob_end_clean ()을 사용하면 상단 버퍼를 지우고 닫습니다. 여러 버퍼가 중첩 된 경우 OB_END_CLEAN () 호출은 가장 안쪽 버퍼에만 영향을 미치는 반면 다른 버퍼는 여전히 존재합니다.
따라서 ob_end_clean ()을 사용할 때 올바른 버퍼를 청소하고 있는지 확인하십시오. 전체 버퍼 스택의 모든 버퍼를 닫으려면 OB_END_FLUSH ()를 사용하여 모든 버퍼를 청소하고 내용을 출력하거나 OB_GET_LEVEL () 을 통해 버퍼의 레이어 수를 확인할 수 있습니다.
<span><span><span class="hljs-comment">// 버퍼 레이어 수를 확인하십시오</span></span><span>
</span><span><span class="hljs-keyword">if</span></span><span> (</span><span><span class="hljs-title function_ invoke__">ob_get_level</span></span><span>() > </span><span><span class="hljs-number">0</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>
OB_END_CLEAN ()은 주로 브라우저로 컨텐츠를 보내지 않으려는 경우, 특히 HTTP 응답 헤더 정보를 처리하기 전에 출력 버퍼를 지우는 데 사용됩니다. 버퍼를 사용하면 응답 헤더를 전송 한 후 예상치 못한 컨텐츠 출력을 방지 할 수있어 잘못되거나 수정되지 않은 응답이 발생할 수 있습니다. 그러나 일부 시나리오에서는 출력 버퍼링이 필요하지 않습니다 (예 : 빠른 작은 스크립트 ) .
예를 들어, 일부 간단한 AJAX 요청 또는 API 응답에서 특정 요구 사항이 없으면 버퍼 관리를 과도하게 사용하면 프로그램 복잡성이 증가 할 수 있습니다. 초보자 개발자는 실제 요구에 따라 버퍼 사용 여부를 결정해야합니다.
출력 버퍼는 일정량의 메모리를 차지합니다. 프로그램이 종종 버퍼를 켜고 끄면 메모리 폐기물로 이어질 수 있습니다. 특히 대규모 PHP 애플리케이션의 경우 빈번한 버퍼 작업이 성능에 영향을 미칠 수 있습니다. OB_END_CLEAN ()을 사용할 때는 메모리 누출을 피할 수있는 쓸모없는 버퍼 잔류 물이 없는지 확인하십시오.
메모리를 더 잘 관리하기 위해 개발자는 OB_GET_LEVEL ()을 사용하여 추가 버퍼가 있는지 여부를 결정하고 제 시간에 정리할 수 있습니다.
<span><span><span class="hljs-comment">// 추가 버퍼를 사용하기 전에 추가 버퍼를 확인하십시오</span></span><span>
</span><span><span class="hljs-keyword">while</span></span><span> (</span><span><span class="hljs-title function_ invoke__">ob_get_level</span></span><span>() > </span><span><span class="hljs-number">1</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>
OB_END_CLEAN () 및 OB_END_FLUSH () 는 버퍼를 닫는 데 사용되지만 다르게 행동합니다. OB_END_CLEAN ()은 버퍼의 내용을 버리고 OB_END_FLUSH ()는 버퍼의 내용을 브라우저 또는 클라이언트에 출력하고 버퍼를 닫습니다.
버퍼의 내용을 출력하여 브라우저로 보내려면 OB_END_FLUSH ()를 사용할 수 있으며, 버퍼를 출력하지 않고 지우려면 OB_END_CLEAN ()을 사용하십시오. 출력 버퍼링을 올바르게 사용하는 데 그 차이를 이해하는 것이 매우 중요합니다.