2014-07-25 5 views
0

아래의 코드는 큰 파일을 통해 하나씩 줄을 긋습니다 ...
하지만이 6000 줄짜리 줄을 기다리고 기다리는 중입니다. 파일 - 브라우저 상태 메시지 "localhost에서 데이터 전송 중 ..."- 결국 나타납니다!PHP의`output buffering & flushing` 작업을 기대하고 있습니다.

은 내가 즉시 응답 브라우저를하고 싶습니다

//------------------------------------------------ 
    if (ob_get_level() == 0) ob_start(); 
    //------------------------------------------------ 

    echo '<pre><ol>'; 
    $handle = fopen($file, "r"); 
    while(!feof($handle)){ 
    $line = fgets($handle); 
    echo '<li>' , $line , "\n"; 
    //------------------------------------------------ 
    ob_flush(); 
    flush();  
    //------------------------------------------------ 
    } 
    echo '</pre>'; 
    fclose($handle); 

    //------------------------------------------------ 
    ob_end_flush(); 
    //------------------------------------------------ 

.. 대기를 방지하고 즉시 결과를 보려면 여기를 수행 할 다른 무엇을 그냥 궁금 해요 - 서버 프로세스로 각 반복에 루프.

결과적으로 브라우저에서 문서가 커지면서 세로 스크롤 막대가 점점 작아지고 일정하게 유지되는 것을 볼 수 있어야합니다.

+0

OB 시스템을 켜고 모든 반복마다 버퍼를 플러시 할 때 ** NO ** 포인트가 있습니다. 단지'flush()'를 호출하십시오. PHP가 버퍼를 비우더라도 위에있는 웹 서버가하는 일을 제어 할 수 없다는 것을 기억하십시오. –

+0

왜 AJAX로 단순히 그것을하는 것이 아닙니다. –

+0

마크, 나는 그것을 시도했다. 그 안에 ob_가있는 모든 줄을 제거했습니다. 정확히 말하면, 원래 스크립트에서 3 행을 주석 처리하고 flush() 만 남겨 둡니다. 차이 없음. –

답변

0

화면에로드하려면 왜 ob_flush를 사용합니까? ob_flush는 모든 것을 화면에 덤프하기 전에 처리합니다. 왜 처음부터 화면에 덤핑하지 않습니까?

+0

이것은 대답이 아닌 주석이어야합니다. –

+0

불행히도 나는 논평 할 담당자가 충분하지 않습니다 :) –

+0

Doogie, 어느 쪽이든, 용납 할 수없는 양의 지연이 있습니다. PHP에 오기 전에는 Classic ASP에서 프로그래밍하는 데 익숙했습니다. 동일한 일을하고 플러시의 ASP 상당 부분 인 Response.Flush를 사용하면 모든 것이 원하는대로 작동합니다. –