2009-09-01 4 views
10

데이터를 얻기 위해 10 개의 다른 서버를 연결하는 PHP 스크립트가 있습니다. 두 번째 연결이 시작되기 전에 첫 번째 연결 결과를 출력하고 싶습니다.즉시 결과 인쇄 (PHP)

+0

당신이 사용하고있는 코드에 대해 자세히 설명하고 예제를 제공하십시오. –

답변

23

flush 및/또는 ob_flush을 사용하면 원하는 것을 얻을 수 있습니다.

for ($i=0 ; $i<10 ; $i++) { 
    echo "$i<br />"; 
    ob_flush(); 
    flush(); 
    sleep(1); 
} 

각 두 번째 숫자는 종료 루프/스크립트를 기다리지 않고, 브라우저로 전송됩니다

여기에 빠른 데모입니다.

:
당신이 설명서에 플러시 페이지에서 인용, 모두 필요한 이유에 대한


설명 (플러시 및 ob_flush 모두없이, 그것은 출력을 보낼 수있는 스크립트가 끝날 때까지 기다립니다)

PHP 백 큐 (CGI, 웹 서버 등)가 사용하는 PHP 버퍼와 버퍼를 플러시합니다. 이렇게하면 몇 가지주의 사항이있는 브라우저 브라우저로 현재 출력을 전송하려고 시도합니다.

플러시() 에게 웹 서버의 버퍼링 방식을 재정의 할 수 없습니다 그것은 브라우저의 모든 클라이언트 측 버퍼링에 영향을주지 않습니다. PHP의 사용자 공간 출력 버퍼링 메커니즘에도 영향을 미치지 않습니다. 즉, 을 사용하면 ob 출력 ( )과 flush()를 호출하여 ob 출력을 플러시 ( )하면됩니다. 이 경우


당신에 포인터의 몇 줄 수있는 설명서의 두 페이지에 코멘트에서 살펴 본다, 당신을 위해 작동하지 않습니다

+0

@sshow : 저는이 질문을 동료, 직장 동료, 실제로 한두 번 사용해 보았습니다. ^^ –

+0

고마워요, 대단한 답변입니다! 많은 도움이되었습니다. –

2

"왜 실패 할 수 있습니다" 이 함수는 출력 버퍼를 비우고 출력 버퍼링을 비활성화은 ob_end_flush http://us.php.net/ob_end_flush

. 이 기능 이후의 모든 것은 즉시 브라우저로 전송됩니다.

0

그래, ob_flush해야합니다. 나는 LOOONG 페이지로 항상이 작업을 수행하는데, 작업의 진행 상황을보고 싶습니다.