ob_flush/flush는 매뉴얼에 출력 버퍼를 플러시하는 것으로 설명되어 있으며, 이 역시 함께 사용해야 하므로 많은 사람들에게 혼동을 줄 수 있습니다... 실제로는 다른 개체에서 작동하는 경우도 있습니다.
ob_* 일련의 함수는 PHP 자체의 출력 버퍼를 작동합니다.
그래서 ob_flush는 PHP 자체 버퍼를 새로 고칩니다.
그리고 엄밀히 말하면 이는 PHP에서 Apache 모듈로만 사용할 수 있습니다. (핸들러) 또는 필터)가 설치되면 실제 효과가 있습니다.
WebServer의 버퍼를 새로 고치는 것입니다(아파치만을 지칭한다고 볼 수 있음).
아파치 모듈의 sapi 아래에서 플러시는 플러시 멤버를 호출합니다. sapi_module의 함수 포인터,
Apache의 API를 간접적으로 호출: ap_rflush는 Apache의 출력 버퍼를 새로 고칩니다. 물론 설명서에는 이 작업의 결과를 변경할 수 있는 다른 Apache 모듈도 있다고 나와 있습니다.
는 256바이트를 수신한 후에만 페이지 표시를 시작하므로 이러한 브라우저가 페이지 콘텐츠를 표시할 수 있도록 하려면 일부 추가 공간을 전송해야 합니다.
<?php // set_time_limit(0); header('Content-Type: text/event-stream'); header('Cache-Control: no-cache'); // ob_end_flush(); // ini_set('output_buffering', 0); // ini_set('implicit_flush', 1); if (ob_get_level() == 0) ob_start(); echo str_repeat(' ' ,4096); $long = 60; while($long > 0) { $time = date('r'); echo "data: The server time is: {$time}\n\n"; ob_flush(); flush();//break; sleep(1); $long --; } // var source=new EventSource("http://localhost:18000/sse.php");source.onmessage=function(event){console.info(event.data)}; ?>
이렇게 하면 Proxy_buffering과 (nginx가 있는 경우) 둘 다 제거됩니다. >= 1.5.6), fastcgi_buffering. php-fpm을 사용하는 경우 헤더는 필요에 따라 수행하는 것이 훨씬 더 편리합니다.
X-Accel-Buffering http: //nginx.org/en/docs/http/ngx_http_fastcgi_module.html#fastcgi_buffering ;
<?php // set_time_limit(0); header('Content-Type: text/event-stream'); header('Cache-Control: no-cache'); header('X-Accel-Buffering: no'); // ob_end_flush(); // ini_set('output_buffering', 0); // ini_set('implicit_flush', 1); // if (ob_get_level() == 0) ob_start(); // echo str_repeat(' ' ,4096); $long = 60; while($long > 0) { $time = date('r'); echo "data: The server time is: {$time}\n\n"; ob_flush(); flush();//break; sleep(1); $long --; } // var source=new EventSource("http://localhost:18000/sse.php");source.onmessage=function(event){console.info(event.data)}; ?>
위 내용은 플러시 기능 사용에 대한 오해에 대한 자세한 설명의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!