2011-09-29 5 views
1

페이지가로드 된 후 모든 숫자가 아닌 각 행에 번호가 표시되는 무언가를 찾고 있습니다. 인스턴스에 대한 코드는 다음과 같습니다for 문에 대한 게시 번호를 유지하십시오 PHP

for($a=0;$a<=10;$a++){ 
echo $a; 
echo '<br>'; 
} 

는 출력은 물론 것 : 페이지, 를로드 할 것입니다하지만 난 그것을 표시 할 모든 방법 후 10, 후 2 브라우저가 모든 것을로드하지 않아도됩니다.

일시 중지를 원하는데 숫자가 증가하는 것을 지켜보아야합니다.

+4

나는 당신이 전체 페이지로드까지 출력을 볼 수 없습니다 작동 – user482594

+1

조차 플러시 서버 측 작업()의 종류 자바 스크립트를 사용하는 것이 더 좋을 것 같아. –

+0

@ user482594와의 합의에 따르면, 이는 클라이언트 쪽에서 만 신뢰할 수있는 것으로, 대부분 자바 스크립트로 이루어질 수 있습니다. – Kibbee

답변

0

PHP 출력을 flush()으로 강제로 플러시 할 수 있습니다. 물론 PHP's output buffering이 활성화되어 있으면 출력 버퍼로만 플러시됩니다.

PHP가 플러시되면 브라우저로 직접 이동하지 않을 수 있습니다. PHP는 웹 서버로 플러시하여 웹 서버의 구성에 따라 브라우저로 보냅니다. (그것은 바로 구성 않다면, 웹 서버에 최소한 명령 행에서, 또는)

그러나, 지금까지의 PHP에 관한 한, 다음 작동합니다 :

demo.php

<?php 
ob_end_flush(); // make sure output buffering is off 
for($i=0;$i<10;$i++){ 
    echo "{$i}\n"; 
    flush(); 
    sleep(1); 
} 
커맨드 라인에서

:

$ php demo.php 

표시한다 (1) ... (2) ... (3) ...과 일초 지연.

편집 : 내가 생각한 또 하나의 것. PHP에서 플러시 할 때 웹 서버가 출력을 "스트리밍"하더라도 출력이 다른 마크 업의 중간에있는 경우 사용자의 브라우저는 전체 응답을받을 때까지 아무 것도 렌더링하지 않을 수 있습니다.

즉, 기본 작업을 수행하는 경우 위의 전략을 사용하여 장기 실행 유틸리티 스크립트의 상태를 출력했습니다. 이 경우에는 출력물에 태그를 포함하지 않았지만 (적어도 당시 처리했던 서버에서는) 원하는대로 작동했습니다.

이 방법은 내부 도구로는 충분하지만 최종 사용자가 볼 수있는 모든 것에 대해이 기술을 사용하지 않습니다.

+1

거기에 여러 가지 이유가있어 작동하지 않을 수 있으며 기본적으로 쓸모 없게됩니다. (그냥 말하기 만합니다.) –

+0

설명에 큰 이유가 없습니까?내가 그것을 보았을 때마다 PHP와 클라이언트 사이에 뭔가 자신의 버퍼링을하기 때문에 작동하지 않습니다. 그리고 내 경험상, 실제로는 대부분의 mod_php 설정에서 작동 할 것입니다. (몇 년 후에 시도해 보았다고 말할 수는 없지만). – timdev

+0

또한 : Dagon이이 답변을 슬퍼하지 않았다면, 누구에게 말을하고 왜 그랬는지 말하고 싶습니다. – timdev

-1

다음은이를 수행하는 PHP 스크립트입니다. PHP 스크립트가 아니라 자바 스크립트와 동일한 기능을하는 페이지입니다. 클라이언트 브라우저에서 일어나는 일을 훨씬 더 잘 제어 할 수 있습니다. 출력 버퍼링과 그 밖의 모든 기능을 사용하면 브라우저에서 PHP로 출력을 제어하려는 것처럼 렌더링을 보장 할 수있는 방법이 없습니다.

<?php ?> 
<html> 
    <head> 
     <title> 
     The Counting Page 
     </title> 
     <script type="text/javascript"> 
       var oldbody; 

       function countTo(a,b) 
       { 
        if(oldbody == null) 
        { 
         oldbody = document.body.innerHTML; 
         document.body.innerHTML = ''; 
        } 

        if(a <= b) 
        { 
         elem = document.createElement("div"); 
         elem.innerHTML = a; 
         document.body.appendChild(elem); 
         a++; 
         setTimeout('countTo(' + a + ',' + b + ')',1000); 
        } 
        else 
        { 
         document.body.innerHTML = oldbody; 
        } 
       } 
     </script> 
    <head> 
    <body onload="countTo(1,10)"> 
     Here is the body text. 
    </body> 
</html> 
+0

그건 PHP가 아니라 JavaScript입니다. –

+0

요점은 PHP에서 이와 같이 안정적으로 수행 할 수 없다는 것입니다. PHP는 서버에서 일어나는 일을 제어하기 때문에 PHP로 클라이언트에서이 수준의 세부 정보를 얻을 수 없습니다. 버퍼를 플러시 (flushing)하는 것과 비슷하게 약간 시뮬레이트 할 수는 있지만 신뢰할만한 방법은 아닙니다. – Kibbee