매뉴얼의 ob_flush/flush에 대한 설명에는 둘 다 출력 버퍼를 새로 고치고 함께 사용해야 하므로 많은 사람들에게 혼동을 줄 수 있다고 되어 있습니다...
실제로 Operation 개체는 어떤 경우에는 플러시가 전혀 수행하지 않습니다.
ob_* 일련의 함수는 PHP 자체의 출력 버퍼를 작동합니다.
그래서 ob_flush는 버퍼를 새로 고칩니다. PHP 자체입니다.
엄밀히 말하면 플러시는 PHP가 Apache 모듈(핸들러 또는 필터)로 설치된 경우에만 실제 효과가 있습니다. 이는 WebServer의 버퍼를 새로 고칩니다(특히 Apache로 간주할 수 있음).
Apache 모듈의 sapi에서 플러시는 sapi_module의 플러시 멤버 함수 포인터를 호출하여 간접적으로 apache api를 호출합니다. ap_rflush는 apache의 출력 버퍼를 새로 고칩니다. 물론 매뉴얼에는 다른 모듈도 있다고 나와 있습니다. apache.이 작업의 결과가 변경될 수 있습니다.
mod_gzip과 같은 일부 Apache 모듈은 자체적으로 출력 캐싱을 수행할 수 있으며, 이로 인해 플러시() 함수에 의해 생성된 결과가 즉시 클라이언트 브라우저. 브라우저도 수신된 콘텐츠를 표시하기 전에 캐시합니다. 예를 들어, Netscape 브라우저는 개행 문자나 html 태그의 시작 부분을 받을 때까지 콘텐츠를 캐시하고 f16b1740fad44fb09bfe928bcc527e08 태그를 받을 때까지 전체 테이블을 표시하지 않습니다.
일부 버전의 Microsoft Internet Explorer는 256바이트를 수신한 후에만 페이지 표시를 시작하므로 이러한 브라우저가 페이지 콘텐츠를 표시할 수 있도록 하려면 일부 추가 공간을 전송해야 합니다. 따라서 두 가지를 사용하는 올바른 순서는 먼저 ob_flush를 사용하는 것입니다. 물론 다른 sapi에서는 플러시를 호출하지 않아도 괜찮습니다. 그러나 코드의 이식성을 보장하기 위해 사용하는 것이 좋습니다.
플러시 및 ob_flush를 사용할 때는 출력 버퍼가 플러시되는 것을 방지하는 몇 가지 특별한 고려 사항이 있습니다.
1. 플러시 및 ob_flush의 올바른 순서는 다음과 같습니다.
ob_flush();
flush();
운영 체제가 다음과 같습니다. 웹 서버는 Windows 시스템이므로 순서가 바뀌거나 ob_flush()를 사용하지 않아도 문제가 없습니다. 그러나 Linux 시스템에서는 출력 버퍼를 플러시할 수 없습니다.
2. ob_flush()를 사용하기 전에 이전 콘텐츠 크기가 4069자인지 확인하세요.
일부 웹 서버의 기본 출력 버퍼링은 4069자 이상입니다. 즉, 플러시가 효과적인지 확인하려면 서버가 출력 버퍼를 플러시하기 전에 출력 콘텐츠가 4069자에 도달해야 합니다. ob_flush() 함수 앞에 오는 것이 가장 좋습니다. 다음 명령문이 있습니다:
print str_repeat(" ", 4096);
output_buffering 값에 도달했는지 확인합니다.
<?php for ($i=1; $i<20; $i++) { echo "<font size='10' color='red'>".$i."</font>"; echo '<br>'; ob_flush(); flush(); sleep(1); } ob_end_flush(); ?>
PHP에서 ob_flush와 플러시의 차이점에 대한 더 많은 관련 기사를 보려면 PHP 중국어 웹사이트를 주목하세요!