2014-07-24 2 views
2

장시간 실행되는 스크립트가 있고 출력 버퍼링을 사용하여 출력을 브라우저에 주기적으로 보내려합니다.출력 버퍼링이 예상대로 작동하지 않습니까?

while (...) { 
    ob_start(); 
    // echo statements 
    ob_end_flush(); 
} 

하지만 그건 나를 위해 작동하지 않았다 : 나는 이것을 사용했다 여기에 대한 질문의 수를 읽은 때문에

나는, 혼란 스러워요. 또한 시도 :

while (...) { 
    ob_start(); 
    // echo statements 
    ob_flush(); 
    flush(); 
    ob_end_flush(); 
} 

하지만 그 중 하나를 작동하지 않았다.

while (...) { 
    ob_end_clean(); 
    ob_start(); 
    // echo statements 
    ob_flush(); 
    flush(); 
} 

왜 출력 버퍼링하려면 내가 위해서는 첫째 ob_end_clean()를 호출해야합니까 위해 : 작동하는 것 같다 유일한 것은 이것이다?

답변

2

아마 나머지 코드에 따라 다릅니다.

다음 코드는 문제없이 작동 나를 위해

:

<?php 
header('Content-type: text/html; charset=utf-8'); 
$x = 1; 

while ($x < 10) { 
    echo $x."<br />"; 
    ob_flush(); 
    flush(); 
    sleep(1); 
    ++$x; 
} 

당신은 ob_implicit_flush()를 사용할 수 있지만 당신이 flash()를 실행하면 ob_flush() 그래서 위의 코드를 실행할 때마다 필요하지 않습니다 수는 변경 될 수 있습니다

<?php 
header('Content-type: text/html; charset=utf-8'); 
$x = 1; 

ob_implicit_flush(true); 

while ($x < 10) { 
    echo $x."<br />"; 
    ob_flush();  
    sleep(1); 
    ++$x; 
} 

header()도 확인해야합니다. 위의 코드 중 하나에서 머리글을 사용하여 주석 행을 제거하면 스크립트가 실행을 종료 한 후 모든 내용이 표시됩니다. 출력 버퍼링이 예상대로 작동하지 않습니다.

+0

header() 문이 없기 때문에 문제가 발생한 것 같습니다. 감사! – Nate

2

잘못된 방식입니다. 이렇게 할 것입니다 :

while (...) { 
    // echo statements 
    flush(); 
} 

웹 서버가 자신의 캐시없이 출력을 위임하도록 구성되었는지 확인하십시오. 나중에 출력을 문자열로 가져 오려면 출력 버퍼 ob_start 만 필요합니다.

또한 출력시 자동으로 플러시를 수행하는 ob_implicit_flush을 살펴보십시오.

관련 문제