매뉴얼의 ob_flush/flush에 대한 설명은 출력 버퍼를 새로 고치기 위한 것이며, 이 역시 함께 사용해야 하므로 많은 분들에게 혼란을 줄 수 있습니다...
실제로 서로 다른 개체에 대해 작동하는 경우도 있지만 플러시는 전혀 작동하지 않습니다..
ob_* 계열 함수는 PHP 자체의 출력 버퍼를 작동합니다.
그래서 ob_flush는 PHP 자체 버퍼를 새로 고치는 것입니다.
엄밀히 말하면 플러시는 PHP가 Apache 모듈(핸들러 또는 필터)로 설치된 경우에만 실제 효과가 있습니다. 이는 WebServer(구체적으로 Apache로 간주될 수 있음)의 버퍼를 새로 고칩니다.
아파치 모듈의 sapi에서 플러시는 sapi_module의 플러시 멤버 함수 포인터를 호출하여 간접적으로 아파치 API를 호출합니다. ap_rflush는 아파치의 출력 버퍼를 새로 고칩니다. 물론 매뉴얼에는 다른 아파치 모듈도 있다고 나와 있습니다. . 이 작업의 결과가 바뀔 수 있습니다..
mod_gzip과 같은 일부 Apache 모듈은 자체적으로 출력 캐싱을 수행할 수 있으며, 이로 인해 플러시() 함수에 의해 생성된 결과가 즉시 클라이언트 브라우저로 전송되지 않습니다. 브라우저도 수신된 콘텐츠를 표시하기 전에 캐시합니다. 예를 들어, Netscape 브라우저는 줄 바꿈이나 html 태그의 시작 부분을 받을 때까지 콘텐츠를 캐시하고 태그를 받을 때까지 전체 테이블을 표시하지 않습니다.
일부 버전의 Microsoft Internet Explorer는 256바이트를 수신한 후에만 페이지 표시를 시작하므로 이러한 브라우저가 페이지 콘텐츠를 표시할 수 있도록 하려면 일부 추가 공간을 전송해야 합니다. 따라서 두 가지를 사용하는 올바른 순서는 먼저 ob_flush를 사용하는 것입니다. 물론 다른 sapi에서는 플러시를 호출하지 않는 것도 가능하지만 코드의 이식성을 보장하기 위해 사용하는 것이 좋습니다. 함께
flush 및 ob_flush를 사용할 때 출력 버퍼가 새로 고쳐지는 것을 방지하는 몇 가지 특별한 고려 사항이 있습니다.
1. 플러시 및 ob_flush의 올바른 순서는 다음과 같습니다. 먼저 ob_flush를 사용한 다음 플러시합니다.
ob_flush();
플러시();
웹 서버의 운영체제가 Windows 시스템인 경우에는 순서가 바뀌거나 ob_flush()를 사용하지 않아도 문제가 없습니다. 그러나 Linux 시스템에서는 출력 버퍼를 플러시할 수 없습니다.
2. ob_flush()를 사용하기 전에 이전 콘텐츠 크기가 4069자에 충분한지 확인하세요.
인쇄 str_repeat(" ", 4096);
output_buffering 값에 도달했는지 확인합니다.