2010-03-01 7 views
2

) 나는 주기적으로 출력을하기 위해 sleep (n)을 반복했다.내 습관이 끝날 때까지 잠깐 (

그러나 루프를 실행할 때 의도 한 루프 지속 시간의 모든 초가 집합 적으로 발생하고 그 후에 모든 출력이 한꺼번에 쏟아져 나올 때까지 아무 일도 일어나지 않습니다.

도움말. 감사.

+8

당신은 문제의 코드를 게시 할 수 있습니까? –

+4

출력 버퍼링을 사용하고 있습니까? –

+0

나는이 질문을 읽고 생각했다. 나 역시 불면증이다. 진지한 점은 어떤 코드가 도움이 될 수 있으므로 어떤 일이 벌어지는 지 확인할 수 있습니다. –

답변

4

각 출력 후에 출력 버퍼를 flush()해야 할 필요가 있습니까?

+0

동의, 출력을 에코/인쇄 할 때마다 즉시 'flush()'를 호출하십시오. –

+0

둘 다 감사합니다. 그 끝을 향한 또 다른 질문이 있습니다 (아래 참조하십시오) : – user225626

-1

sleep() 대신 flush()를 사용해야하는 것처럼 들립니다.

http://us3.php.net/manual/en/function.flush.php

+0

... 아니면 둘을 함께? – Matchu

+0

검토가 끝난 후에는이 두 개가 결합되어 있어야합니다. 사용자가 지연없이 각 반복마다 브라우저로 출력을 플러시하려고한다고 생각했습니다. 원래의 질문은 완전히 명확하지 않습니다. – simeonwillbanks

7

그 시도 :

ob_end_flush(); // just in case 
while (1) { 
    echo 'wait for it<br/>'.PHP_EOL; 
    flush(); 
    sleep (2); 
} 
+0

mathroc, 고맙습니다. 하지만 내 공유 호스트는 "치명적인 오류 : 정의되지 않은 함수 호출 : ob_flush_end()"를 throw합니다. 이것은 무엇을 의미합니까? – user225626

+3

그것은 내가 틀 렸음을 의미하며, 함수 이름은 ob_end_flush입니다. – Mathieu

+0

아래 새 코멘트를 보시기 바랍니다. – user225626

1

아아이 사이트는 나를 mathroc의 최신에 댓글을 추가 두지 않을거야. 그래서 여기에 넣을 게요 :

그것은 나를 위해 작동하지 않았다. 그러나 다음은 정말 이상한입니다 : 내가 실수로 내가 뭘 찾았는지 앞에 붙어 웹에서 다른 수면 코드 우연히 :

<HTML> 
<BODY> 

$c=0; 
while($c <$chunks){ 
$rand = rand(2000000, 6000000); 
echo '<br> . . . sleeping for ' . round(($rand/1000000),2) . ' seconds . . . zzzzzzzzzzzzzz<br>'; 
flush(); 
usleep($rand); 
$c++; 
} 

WHAT I'VE GOT BEGINS HERE: 
<br /> 
<br /> 
This page is loading.<br /> 
<?php 
for($i=0;$i<5;$i++){ 
flush(); sleep(2); 
?> 
Almost there...<br /> 
<?php 
} 
?> 
<?php flush(); sleep(2); ?> 
Done.<br /> 

</BODY> 
</HTML> 

... 지금은 코드의 낮은 블록은 잘 자고, 순차적으로 출력이 제대로 엇갈리게 처리됩니다 (10 초가 지나면 일괄 적으로 도착하는 대신).

내가 위에 무엇을하고 있는지 알지 못해 이상하게 보입니다. 아래 블록의 모든 내용이 올바르게 작동 할 것입니다. 삭제하면 차단 기능이 작동하지 않습니다. 즉, 출력이 누적되어 결국 끝에 대량으로 유출됩니다. 위 코드의 비트와 조각 만 제거하면, 내 것이 조금 앞으로 나아가고 싶지만 나머지는 괜찮게 출력됩니다.

위의 코드가 내 (후자의 블록)가해야 할 방식으로 작동하는지 또는 어떻게 후자 블록을 완전히 작동하게하는지, 또는 심지어 위의 사항을 만드는 방식으로 그것을 줄이는 방법에 대해 알지 못합니다 페이지에서 보이지 않는 코드는 후자의 블록이 정확하게 작동하도록 허용합니다.

(둘 다 윈도우 7 Caucho에 수지 PHP 5와 리눅스 아파치 CGI-BIN PHP 4 개 플랫폼에서 스크립트를 테스트했습니다. 동일한 결과.)

+0

웹 서버는 다음과 같이 빠르게 요청을 처리하도록 설계되고 최적화되었습니다. 가능한. 꼭 필요한 데몬으로 실행되는 CLI 프로그램에서 긴 잠을 자지 만 웹 페이지에서는 그렇지 않습니다! – symcbean

+0

이것은 실제로 실험적/발견 물건처럼 보입니다. 방법이 더 쉬울 수도 있습니다. – Mathieu

관련 문제