2009-06-10 4 views
6

기본적으로 전체 페이지 실행이 완료 될 때까지 아무 것도 인쇄하지 않습니다.PHP에서 즉시 에코 프린트를 만드는 방법은 무엇입니까?

즉시 플러시 (flush out) 할 수있는 기능이 있습니까?

그러나 내가 원하는 것이 아닌 ob_end_flush()을 여러 번 호출하는 것은 아닙니다.

너희들이 날 잡았 으면 좋겠어?

답변

8

출력 버퍼링이 설정된 경우 플러시를 사용하면 브라우저에 아무 것도 출력 할 수 없습니다. 바로 출력하고 싶으면 출력 버퍼링을 돌리십시오. 그것이 당신의 통제에 있지 않다면 스크립트의 srart에서 ob_end_flush()를 호출하면 출력 버퍼링이 꺼질 것입니다. 그러나 일부 메시지는 전달할 수 없으며 사용자 지정 에코/인쇄 기능을 쓰지 않고 일부 메시지는 전달할 수 없습니다.

호출하면 ob_end_flush()가 호출되어 최상위 출력 버퍼가 플러시되고 꺼집니다. 모든 출력 버퍼를 끄고 플러시하려면 다음을 수행하십시오.

while (@ob_end_flush()); 
+0

+1 올바른 것입니다. – karim79

+0

ob_end_flush()를 한 번 호출하면 후속 에코/인쇄 기능이 즉시 출력됩니까? – omg

+0

@Shore, 네, 그게 무슨 뜻입니다. ob_end_flush()를 호출하면 최상위 출력 버퍼가 전환됩니다. –

6

귀하의 웹 서버에 따라 다릅니다.

플러시() 웹 서버의 버퍼링 방식 또는 클라이언트 측 브라우저에 영향을주지 않습니다 : flush를 호출하면이 링크 된 페이지에 말한대로, 현재의 버퍼가 있지만, 열려있는 어떤의 출력을 플래시합니다 . 따라서 출력 버퍼를 비우려면 ob_flush()와 flush()를 모두 호출해야합니다.

특히 Win32에서 여러 서버는 결과를 브라우저에 전송하기 전에 종료 될 때까지 스크립트의 출력을 버퍼링합니다.

mod_gzip과 같은 Apache 용 서버 모듈은 flush()가 클라이언트에 즉시 데이터를 보내지 않도록하기 위해 mod_gzip과 같은 버퍼링을 자체적으로 수행 할 수 있습니다.

1

개발/테스트 서버에서 출력 버퍼링을 해제 할 수 있습니다. php.ini 구성 파일에서 output_buffering 변수를 변경하십시오.

0

ob_end_flush()는 플러시 할 버퍼가 없을 때 스크립트 맨 위에서 사용하는 경우 알림을 표시합니다. 쿠키 또는 헤더를 설정하려는 경우 문제가 될 수 있습니다. 내 공유 서버 (Rackspace Reseller)에서 버퍼링에 영향을 미치지 않는 것으로 나타났습니다.

관련 문제