2010-03-04 3 views
6

해결 방법이 필요합니다.
여기 내 코드 루프에서 루프 프로세스가 실제로 훨씬 더 큰PHP에서 echo/print 문제가 발생했습니다. while loop

<?php 
$number = 30; 
while($number > 0) { 
$number--; 
sleep(30); 
print "$number . Posted<br>"; 

} 
?> 

, 난 그냥 중요한 물건을 넣어의 한 부분이다.

당신이
30
을 게시 인쇄해야 볼 수 있습니다 어쨌든로
29
은 (30 초 정도 기다리)
28
를 게시 (30 초 정도 기다리) 게시 (30 초 정도 기다리)

그러나 대신 루프가 끝날 때까지 기다린 다음 한 번에 모두 인쇄합니다. 이 문제가 수정 되었습니까? 나는 아약스 방법을 생각하고 있었지만, 나는 전혀 모른다.

답변

15

모두가 그 이유를 설명해 주셔서 감사합니다.

이것은 기본적으로 PHP가 브라우저에 무엇인가를 플러시하기 전에 모든 것을 처리하기 때문입니다. 각 줄을 인쇄하는 것만으로 버퍼에 정보를 저장하는 것이고, PHP가 실행을 마친 후에는 모두 동시에 인쇄됩니다.

PHP가 라인 바로 다음에 브라우저에 내용을 플러시하게하려면 각각의 코드 뒤에 flush()을 호출해야합니다. 그러면 각 코드가 호출 된 후 한 번에 한 줄씩 텍스트가 출력됩니다.

+0

+1 좋은 설명을 제공합니다. – GSto

4

인쇄 후 flush()으로 전화하십시오.

2

당신은 당신은 버퍼를 플러시 echo 또는 print\n을 넣을 수 flush()

1

플러시 루프()의 예는 메시지를 처리하기 위해 PHP를 강제로이 실행 시간이 증가하기 때문에 자주 세척하지 말아야

<?php 
ob_start(); 
for ($i = 0; $i < 10; $i++) 
{ 
    echo "<div>" . time() . ": Iteration $i</div>"; 
    sleep(1); 
    ob_flush(); 
    flush(); 
} 
ob_end_flush(); 
?> 

입니다.