>  기사  >  백엔드 개발  >  PHP의 잘못된 버퍼링에 대한 솔루션, 즉

PHP의 잘못된 버퍼링에 대한 솔루션, 즉

伊谢尔伦
伊谢尔伦원래의
2017-06-24 11:03:561810검색

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 중국어 웹사이트의 기타 관련 기사를 참조하세요!

성명:
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.