PHP에서 출력 버퍼는 스크립트 출력의 내용을 저장하는 데 사용되는 임시 저장 영역입니다. 일반적으로 PHP는 페이지 컨텐츠를 브라우저로 직접 전송합니다. 그러나 출력 버퍼링이 활성화되면 PHP는 버퍼가 지워지거나 스크립트가 실행될 때까지 버퍼의 모든 출력 (예 : HTML, 텍스트 또는 오류 메시지)을 저장합니다. 출력 버퍼링을 활성화하여 개발자는 출력 컨텐츠의 타이밍, 주문 및 컨텐츠 수정을 제어 할 수 있습니다.
OB_CLEAN 함수는 PHP의 출력 버퍼를 지우는 데 사용됩니다. OB_CLEAN을 호출하면 PHP는 버퍼에 저장된 모든 것을 지우지 만 버퍼를 닫지 않습니다. 버퍼를 지우는 목적은 일반적으로 예상대로 후속 출력을 브라우저로 전송할 수 있도록하는 것입니다.
OB_CLEAN은 출력 버퍼를 지울 수 있지만 버퍼 상태가 올바르게 관리되지 않으면 청소 후 다음과 같은 문제가 발생할 수 있습니다.
출력은 브라우저로 전송되지 않습니다 . 버퍼가 플러시 되지 않았거나 브라우저에 올바르게 출력되지 않으면 페이지를 비워 지거나 아무것도 표시되지 않을 수 있습니다.
후속 출력이 차단됩니다 . 버퍼를 지우린 후 버퍼가 다시 활성화되지 않거나 버퍼 상태가 올바르게 처리되면 후속 출력은 "폐기"되거나 예상대로 전송되지 않을 수 있습니다.
브라우저는 불완전한 응답을 수신합니다 . 버퍼가 올바르게 관리되지 않으면 브라우저는 전체 HTTP 응답을받지 못하여 페이지로드 오류가 발생할 수 있습니다.
버퍼를 청소 한 후에 후속 출력이 정상적으로 표시 될 수 있도록하기 위해서는 다음과 같은 조치를 취해야합니다.
버퍼를 지우기 위해 OB_CLEAN을 호출 한 후에는 일반적으로 버퍼의 내용을 브라우저로 보내려면 OB_FLUSH를 호출해야합니다. 이것은 내용이 올바르게 표시되도록하는 핵심 단계입니다.
<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 content."</span></span><span>;
</span><span><span class="hljs-title function_ invoke__">ob_clean</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-comment">// 버퍼를 새로 고칩니다,브라우저에 콘텐츠를 보내십시오</span></span><span>
</span><span><span class="hljs-keyword">echo</span></span><span> </span><span><span class="hljs-string">"This is the new output after cleaning the buffer."</span></span><span>;
</span></span>버퍼가 계속 작동하고 후속 컨텐츠의 출력이 원활하게 진행되는지 확인하려면 OB_END_CLEAN 또는 OB_END_FLUSH를 호출하지 않으면이 두 기능이 버퍼를 닫습니다.
<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">"This is the first output."</span></span><span>;
</span><span><span class="hljs-title function_ invoke__">ob_clean</span></span><span>(); </span><span><span class="hljs-comment">// 버퍼를 지 웁니다</span></span><span>
</span><span><span class="hljs-comment">// 전화하면ob_end_clean()또는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">"This is the second output after cleaning."</span></span><span>;
</span></span>이전 출력이 브라우저로 전송 된 경우 (예 : OB_END_FLUSH () 를 통해) 버퍼를 지우는 작업이 유효하지 않습니다. 따라서 버퍼를 지우기 전에 출력이 없도록하십시오.
<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">"Initial content."</span></span><span>;
</span><span><span class="hljs-title function_ invoke__">ob_clean</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-comment">// 버퍼를 새로 고칩니다</span></span><span>
</span><span><span class="hljs-keyword">echo</span></span><span> </span><span><span class="hljs-string">"Content after cleaning the buffer."</span></span><span>; </span><span><span class="hljs-comment">// 정상 출력</span></span><span>
</span></span>PHP의 output_buffering 구성 항목은 PHP가 출력 버퍼링을 가능하게하는지 여부를 결정합니다. php.ini 파일에서 출력 버퍼링이 비활성화되면 OB_Clean이 제대로 작동하지 않습니다. 이 경우 PHP의 output_buffering 구성 항목이 "on"또는 적절한 버퍼 크기인지 확인하십시오.
<span><span><span class="hljs-attr">output_buffering</span></span><span> = </span><span><span class="hljs-literal">On</span></span><span>
</span></span>OB_CLEAN을 사용하여 출력 버퍼를 청소 한 후 출력 컨텐츠를 정상적으로 표시 할 수 있는지 확인하십시오. 핵심은 버퍼의 상태를 관리하는 것입니다. OB_FLUSH를 호출하면 버퍼를 지우고 나면 콘텐츠가 브라우저로 올바르게 전송되고 불필요한 버퍼 종료 작업을 피할 수 있습니다. 또한 버퍼를 지우기 전에 컨텐츠가 출력되지 않았는지 확인하여 후속 출력의 정상적인 표시에 영향을 미치지 않도록하십시오. 다음 단계를 따라 출력 버퍼를 사용할 때 PHP 스크립트의 출력 내용을 정상적으로 표시 할 수 있는지 확인하십시오.