2012-05-05 3 views
0

저는 무한한 함수로 생각되는 함수를 가지고 있지만 시작하면로드를 유지합니다. 이 경우 그는 계속 012-에 21을 지정하는 동안 70-79 초 정도 지속됩니다.무한 루프가 내 페이지로드를 유지합니다.

시작할 때 아무 것도하지 않고 75 초가 지나면 갑자기 날짜 차이의 8 배를 표시합니다. 한꺼번에. 매 1 초마다 텍스트를 표시하고 1 시간 동안 뒤쳐지지 않기를 원합니다. 내 모든 값은 1 초가 빠를 것이라고 생각했기 때문에 위의 수치보다 낮습니다. 그러나 여전히 10 초 동안 지연됩니다.

set_time_limit (21); 
// 21 seconds until its done should become an hour later 
// this was to test 
$x=1; 
$startTime = time(); 
$timeout = 10; //timeout in seconds 
for ($i=0;;$i++) 
{ 
    if(time() > $startTime + ($x * $timeout)) { 

    $x++; 
    $today=date('d-m-Y H:i:s'); 
    echo "it's now: ". $today . "</br>"; 
    $newyear = date('d-m-Y H:i:s', mktime(0, 0, 0, 01, 01, 2013)); 
    $difference=get_datediff_string($vandaag,$nieuwjaar); 
    // get_datediff_string() is defined somewhere below, 
    // but wasn't worth to show it. 
    echo "it is $difference untill newyear"; 

    } 
} 

답변

0

이것은 암시 적 버퍼링으로 인해 발생합니다. 서버 측에있을 수도 있습니다.이 경우 을 수정해야 flush()을 호출해야합니다. 브라우저에있을 수도 있습니다 (운이 좋지 않은 경우).

이런 종류의 스크립트는 실제로 어쨌든 콘솔 프로그램이어야합니다. 브라우저 컨텍스트에서 수행중인 작업을 실제로 볼 수 없습니다.

0

날짜가 $ timeout 초마다 인쇄되도록하려면 루프 끝에서 sleep ($ timeout)을 사용하십시오. 따라서 두 날짜 사이에 루프가 수천 번 실행되지 않아 지연 문제가 발생합니다.

마침내 나는이 스크립트가 서버 측에서 유용하지 않다고 생각한다. 새해의 카운트 다운을 보여주고 싶다면 자바 스크립트에서해라.

1

usleep을 사용하여 스크립트를 일시 중지하는 이유는 무엇입니까? 그리고 왜 당신의 목표는 한 시간입니까? JavaScript에서는이 작업을 수행해야합니다.

<?php 
$x=1; 
$startTime = time(); 
$timeout = 10; //timeout in seconds 
for ($i=0;;$i++) 
{ 

    set_time_limit (10); 
    usleep(1000); 

    $x++; 
    $today=date('d-m-Y H:i:s'); 
    echo "it's now: ". $today . "</br>"; 
    $newyear = date('d-m-Y H:i:s', mktime(0, 0, 0, 01, 01, 2013)); 
    $difference=get_datediff_string($vandaag,$nieuwjaar); // get_datediff_string() is defined somewhere below but wasn't worth to show it. 
    echo "it is " . $difference . " untill newyear"; 
    flush(); 

} 
관련 문제