2012-08-11 1 views
0

처리하는 데 비정상적인 시간이 걸릴 수있는 iframe 래퍼의 POST를 통해 파일을 업로드하고 있습니다.PHP에서 페이지 처리가 완료되기 전에 업로드 된 파일의 순간을 캡처합니까?

iframe의 onload 이벤트에 의해 캡처되도록 결과를 출력하기 전에 사용자에게 업로드가 완료되었다는 것을 알리려고하고 이제 처리가 시작되었습니다.

그렇지 않으면 오랜 기다림으로 사용자가 혼란 스러울 수 있습니다.

처음 메시지를 표시 한 다음 다른 행을 한 번 추가 한 다음 iframe에서 출력 된 페이지의 내용을 비교하려고합니다. 그러나이 접근법은 어떤 이유로 든 작동하지 않습니다.

예 :

print 'processing started'; 
for ($i=0; $i < 10; $i++) { 
    echo '...still processing'; 
    sleep(1); 
} 
echo 'done'; 

합니다 ('처리가 시작'메시지를 볼 기대하고, '다'는로드가 완료했지만, 그냥 기다리는 10 초 후에 하나의 버스트에 그것을 밖으로 뱉어 번).

그래서 어떻게 할 수 있을까요?

내가 생각한 또 다른 생각은 페이지 시작 부분에 리디렉션 헤더를 설정하는 것이므로 일단 파일이 업로드되면 다른 페이지로 리디렉션되어 처리를 수행하게됩니다. 그런 다음 리디렉션 및 최종 응답을 캡처하십시오.

하지만 그건 이상한 방법입니다. 제출 된 매개 변수를 전달하고 업로드 된 파일을 임시 폴더에서 어딘가에 옮겨야하므로 PHP 스크립트가 출력되면 삭제되지 않습니다.

... 내가하고 싶은 일을하는 데 더 나은 접근 방법이 있는지 궁금합니다.

답변

1

파일 업로드가 완료되면 PHP가 호출되어 원하는 위치에 파일을 넣을 수 있고 (b) 응답으로 브라우저에 HTML을 게시 할 수 있으며, (c) 처리를 시작하십시오.

그래서 파일을 저장 한 다음 서버에서 백그라운드 작업으로 처리를 시작합니다 (exec와 같은 시스템 호출 중 하나를 통해 시작된 명령 줄 PHP를 사용하여 별도의 PHP 스크립트를 실행합니다). ID에 따라 이름이 지정된 임시 파일을 만들 수있는 고유 한 ID를 작업에 부여하십시오. (b) 파일이 여전히 존재할 때 쿼리 할 수있는 HTML 어딘가에 브라우저로 전달하십시오. (c) 작업이 완료되면 해당 파일이 제거되므로 작업이 완료되었음을 알 수 있습니다.

이제 업로드에 대한 응답으로 HTML 페이지가 "업로드 완료, 처리 시작"이라고 말할 수 있으며 서버를 폴링하는 일부 자바 스크립트를 실행할 수 있습니다 (jQuery에서 Ajax 사용, XMLHttpRequest를 직접 사용하여 너무 어렵지 않음). 작업이 완료되었습니다 (폴링 된 요청의 URL에서 쿼리 문자열로 작업을 식별). 서버의 폴링 스크립트는 관련 파일이 아직 있는지 여부를 확인한 다음 "아니오, 아직 작동 중"또는 "예, 완료"라고 표시합니다.

작업이 얼마나 멀리 있는지를 알려주는 방법이있는 경우. 업로드 된 파일을 순차적으로 작업하는 경우 진행률을 주기적으로 파일에 기록하고 폴링에 대한 응답으로 반환 할 수 있으며 클라이언트 측에서 진행률 막대로 표시합니다.

관련 문제