PHP가 실행되는 상황(CGI, 웹 서버 등)에 관계없이 PHP 프로그램의 버퍼링. 이 함수는 지금까지의 모든 프로그램 출력을 사용자의 브라우저로 보냅니다.
flush() 함수는 서버나 클라이언트 브라우저의 캐시 모드에 영향을 주지 않습니다. 따라서 ob_flush() 및 플러시() 함수를 모두 사용하여 출력 버퍼를 플러시해야 합니다.
개별 웹 서버 프로그램, 특히 Win32 이하의 웹 서버 프로그램은 프로그램이 끝날 때까지 결과를 브라우저에 보내기 전에 여전히 스크립트의 출력을 캐시합니다.
작은 예제를 작성했고 매 순간 페이지를 출력하고 싶었습니다. 숫자.
인터넷에 있는 코드를 따르세요:
ob_end_clean (); for ($i=10; $i>0; $i--) { echo $i; flush(); sleep(1); }
또는:
for ($i=10; $i>0; $i--) { echo $i; ob_flush(); flush(); sleep(1); }
Firefox에서는 작동하지만 IE에서는 작동하지 않는 것을 발견했습니다. 매번 10개의 숫자가 함께 출력되므로 버퍼링이 효과적이지 않습니다.
다시 php.ini에서 output_buffering 설정을 조정하고 아파치를 다시 시작했는데 여전히 작동하지 않습니다.
그런 다음 다음 구절을 보았습니다.
Microsoft Internet Explorer의 일부 버전은 256바이트를 받은 후에만 페이지를 표시하기 시작하므로 이러한 브라우저가 페이지 콘텐츠를 표시할 수 있도록 하려면 일부 추가 공간을 보내야 합니다.
죄 많은 IE 브라우저, 문제는 TMD가 너무 많다는 것입니다!
그런 다음 프로그램을 수정했더니 정상적으로 되었습니다.
echo str_pad('',4096); for ($i = 0; $i < 10; $i++) { echo $i; ob_flush(); flush(); sleep(1); }
코드는 다음과 같습니다.
// ob_end_flush ();//IE8下没起作用 echo str_pad(" ", 256);//IE需要接受到256个字节之后才开始显示 for($i=0;$i<18;$i++) { echo $i; flush(); sleep(1); }
위 내용은 PHP의 잘못된 버퍼링에 대한 솔루션, 즉의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!