2014-01-16 2 views
0

PHP 스크립트가 웹 페이지를 통해 즉시 반환하고 다음 함수의 완료를 기다리지 않고 다양한 함수의 결과를 반환하는 방법이 있다면 궁금합니다.PHP get 함수가 즉시 반환됩니다.

샘플 PHP 코드 :

<? php 
for ($i = 0; $i < 100; $i++) { 
    echo $i. ":". my_function();// takes a long time to run 
} 
?> 

자료 :

0: value ... (the function of the cycle $i = 1 is still running) 
1: value ... (the function of the cycle $i = 2 is still running) 

등등 ...

+0

번호 PHP는 HTML을 렌더링하기 전에 모든 것을 계산한다. PHP에서 동적으로 그런 것을 만들 수있는 방법은 없습니다. –

+1

@YUNOWORK 사실이 아닙니다. PHP는 아무 것도 기다릴 필요없이 그냥 값을 출력합니다. * 웹 서버 *는 일반적으로 응답을 버퍼링합니다. – deceze

+0

OP : HTTP는 _synchronous_이며 모든 출력은 스크립트가 실행 된 후에 만 ​​클라이언트로 전송됩니다. CLI 모드와 전혀 다르다. –

답변

1

당신이 다시 데이터를 플러시 시도 플러시() 함수를 사용할 수있다 브라우저. php.net에서

설명 :

이 (CGI, 웹 서버 등)를 사용하고 어떤 백엔드 PHP 쓰기 PHP의 버퍼와 플래시합니다. 이것은 몇 가지주의 사항이있는 현재의 모든 출력을 브라우저로 보냅니다.

flush()는 웹 서버의 버퍼링 체계를 재정의 할 수 없으며 브라우저 의 클라이언트 측 버퍼링에 영향을주지 않습니다. 또한 PHP의 사용자 공간 출력 버퍼링 메커니즘에도 영향을 미치지 않습니다. 즉, ob 출력 버퍼를 사용하는 경우 ob_flush()와 flush()를 호출하여 플러시해야합니다. 크롬 31.0.1650.57 (리눅스)에서 테스트 아래

샘플 코드, 사파리 (6.0.4) (OSX) :

참고 : 플러시 출력을 표시할지 여부는 (브라우저에 달려있다 대개 응답의 데이터 양에 따라 다름). 예를 들어 Safari (6.0.4)는 데이터를 브라우저에 출력하기 전에 512 바이트의 데이터를 원합니다. 출력의 시작 부분에 512자를 채우는 것과 같은 방법으로이 문제를 해결할 수 있습니다.

<?php 
header('Content-type: text/html; charset=utf-8'); 
echo str_repeat(" ",512); //pad the buffer with data (in case browser needs it) 
while (true){ 
    //write go to the browser every 2 seconds.. forever 
    echo "go...<br/>"; 
    ob_flush(); 
    flush(); 
    sleep(2); 
} 
?> 

대한 추가 정보를 원하시면 여기 http://us1.php.net/manual/en/function.flush.php

+1

이것이 왜 downvoted인지에 대한 건설적인 이유를 제공해 주시면 감사하겠습니다. – KorreyD

관련 문제