2011-05-03 3 views
5

PHP 시스템 호출로 Java 프로그램을 호출하고 있습니다. Java 프로그램을 실행하는 데 시간이 걸리지 만 결국에는 알려진 파일 이름의 PDF 파일이 생성됩니다.파일이 존재할 때까지 계속 확인하고 링크를 제공하십시오.

이 파일이 존재할 때까지 계속 확인한 다음 링크를 제공해야합니다. 나는 while 루프가 포함될 것이라고 생각하지만 너무 많은 리소스를 사용하지 않기를 바란다. 이 작업을 수행하는 좋은 방법은 무엇입니까?

답변

6

은 기본적으로 당신은 그것을 가지고 바로

while (!file_exists($filename)) sleep(1); 
print '<a href="'.$filename.'">download PDF</a>'; 

브라우저로 다시 보내해야하는 경우가 아무것도

3

이 작업을 수행 할 수 있지만 추가 시간 초과를 지정할 수 있습니다.

while(!file_exists($pathToFile)) 
{ 
    sleep(1); 
} 
1

에 대한 CPU를 강조하지 않도록 수면이 검사 사이의 1 초 제공 setInterval 타이머에서 AJAX 호출을 사용하고 파일 존재 여부를 확인하는 PHP 스크립트를 사용하여 조사해야합니다. 두 가지 방법으로이 작업을 수행 할 수 있습니다 다시 설문 조사를 처리 할 수있는 AJAX 기능과 브라우저 설문 조사 측에 대한 AJAX를 사용하여 폴링 프로세스를 시작 Javascipt을 포함 브라우저와 PHP 스크립트

  1. flush() HTML을.

  2. flush()이 작동하지 않으면 Java 프로세스를 설정하기 전에 PHP 스크립트의 HTML을 반환해야합니다. 그 코드에서 두 건의 AJAX 호출을 작성하십시오. 하나는 실제 Java 프로세스를 시작하고 다른 하나는 폴링 서비스를 시작하여 파일을 찾습니다. 당신이 당신의 자바 과정에서 비동기 적으로 작동하도록 브라우저가 필요 가능성이 있습니다 이유는 자바 응용 프로그램에서 응답을 얻을 수 있습니다 전에

긴 실행 스크립트는 브라우저를 타임 아웃 할 수 있습니다. 당신이 경우 언급하지 않았다

$nofileexists = true; 
while($nofilexists) { // loop until your file is there 
    $nofileexists = checkFileExists(); //check to see if your file is there 
    sleep(5); //sleeps for X seconds, in this case 5 before running the loop again 
} 

: 한편

는, 순수 PHP 스크립트가 실행이되는 경우 또는 Java 프로세스는 일반적인 브라우저의 제한 시간 미만, 당신은 단지 같은 것을 사용할 수 있습니다 많은 대중 사용자의 경우 트래픽이 많을 수도 있고보고 유형 응용 프로그램 일 수도 있습니다. 트래픽이 많으면 AJAX 경로를 권하고 싶지만 트래픽이 적은 경우 위의 코드를 따르십시오.

관련 문제