2014-12-26 2 views
-1

하나의 값을 얻지 못하는 경우 함수를 생성합니다 -이 경우에는 ok - 다른 시간과 다른 시간을 반복하고 다시 검사하지만, 문제가 발생하면 2 ~ 3 번 확인하면 결국 연결이 끊깁니다.반복 기능

내 기능 :

<?php 
function recursive() { 
    if (file_exists("pol.txt")) { 
     print "ok"; 
    } else { 
     print "bad"; 
     usleep(1); 
     recursive();  
    } 
} 
recursive(); 
?> 

아이디어는 기능 시험이 모든 시간을 키우면 다른 기능은 pol.txt라는 파일을 생성 할 때 중지하지만 문제는 모든 시간 때문에 기능을 키우면 2 초 만에 모든 브라운 사역자들에게 나를 감동 시켰습니다.

실제로 로컬 호스트와 동일한 결과를 가진 서버에서 테스트합니다.

이런 종류의 기능을 실행할 수 없거나 다른 방법으로 존재하는지에 대한 질문은 매번 새로 고침 페이지없이이 작업을 수행 할 수 없기 때문에 사용할 수 없습니다. 이 경우

Thank's에 새로 당신이 usleep()을 사용하고 있는지 문제가

+0

여기서 실제로 무엇을하려고합니까? 그'else' 블록을 입력하면 꽤 재귀 적으로 반복 될 것입니다. 재귀는 스택이 계속 성장할 것이기 때문에 이런 종류의 I/O를 기다리는 좋은 방법은 아니며, 결국 실패 할 것입니다. 또한 브라우저가 시간 초과되므로 모든 종류의 장기 실행 대기 프로세스가 브라우저에서 작동하지 않습니다 *. – David

+0

네,하지만 스크립트를 기다리는 동안 스크립트를 기다리는 시간이 3 초 이상 필요합니다.이 스크립트는 새 파일을 생성하고 검색하는 데 필요하기 때문에 몇 시간 안에 문제가 발생합니다. – Francisco

+1

기다리는 것이 필요하면 재귀가 아닌 루프에서 수행하십시오. 그렇게하면 아무런 이유없이 더 깊고 깊은 스택을 구축하는 것이 아닙니다. 그 외에도, 이와 같은 웹 응용 프로그램에서 * waiting *은 더 많은 문제를 일으킬 것입니다. 웹 응용 프로그램은 즉시 사용자에게 응답해야합니다. 백그라운드에서 실행중인 프로세스가있는 경우 완료되면 사용자에게 알립니다. WebSockets, AJAX 폴링 또는 특정 페이지가로드 될 때 알림을 확인하는 것만으로 인위적으로 대기하는 것이 좋습니다. – David

답변

2

간주한다. 지연 시간은 -seconds가됩니다. 2 초 후에 매우 복잡한 재귀 수준이 발생하여 스크립트의 오류가 발생합니다.

이 경우 아마도 루프를 사용하고 x 초의 반복 또는 반복이 끝나면 루프를 종료해야합니다.

+0

또한 내가 usleep없이 시도하고 같은 결과 또한 루프 내부 및 결과를 사용하여 동일한 결과, 내가 쇼 루프 내부에 대한 자동 증가 함수를 만들지 만 1 또는 2 초 작동 때 연결 – Francisco

+0

@Francisco 분명히, 재귀는 'usleep'없이 더 빨리 진행될 것입니다. 루프를 사용하고 코멘트를 언급 한대로 javascript로 폴링하는 것과 같은 클라이언트 측 솔루션을 최대 또는 아마도 더 나은 것으로 설정하십시오. – jeroen