2012-12-19 1 views
4

ignore_user_abort가 작동하는지 확인하기 위해 로그 프린터를 사용했습니다. 그러나 반향은 작동하기를 원하지 않습니다. 에코는 루프가 완료 될 때만 작동합니까?do while 루프 또는 ignore_user_abort (1)에서 echo가 작동하지 않는 이유는 무엇입니까?

<?php 
ignore_user_abort(1); // run script in background 
set_time_limit(0); // run script forever 
$interval=2; // do every 2 sec... 
$i=0; 
$lastRunLog = 'lastrun.log'; 
do{ 
    // add the script that has to be ran every 2 sec here 
    // ... 
    echo 'Test: '.$i; 

    file_put_contents($lastRunLog, time()); 


    sleep($interval); // wait 2 sec 
    $i=$i+1; 
}while(true); 
?> 
+1

예, PHP가 완료되고 서버에서 브라우저로 전송 된 경우에만 에코가 표시됩니다 –

답변

1

예, 아니요.

  1. PHP 출력을 버퍼링 할 수 있습니다 :

    당신에 대해 걱정할 필요가 3 개 개의 출력 버퍼가 있습니다. ob_ functions을 사용하여 해당 버퍼를 제어하고 apache/iis (웹 서버)에 대한 출력을 강제로 수행 할 수 있습니다.

  2. Apache/IIS에는 자체 버퍼가 있으며 송신 할 것으로 생각되면 정보 만 보냅니다. 이것은 또한 mod_gzip 또는 다른 압축에 의해 compunded됩니다. PHP를 통해 이것을 제어 할 수 없습니다.
  3. 브라우저와 서버간에 잠재적으로 다른 캐시/프록시가 있습니다. 이것들은 완전한 응답을받을 때까지 출력을 유지할 수있다.

그래서 echo는 즉시 PHP 버퍼에 넣습니다. 버퍼를 웹 서버에 보낼 수는 있지만 그 후에는 손에서 꺼내야합니다.

관련 문제