2014-07-21 2 views
0

클라이언트 측에서 사용자가 다운로드 버튼을 클릭하면 (apache) 웹 서버 (및 PHP5.4)가 매우 큰 파일을 생성합니다. 클라이언트 측에 보내야합니다. 이 (거대한) 파일을 만드는 데 시간이 걸리기 때문에 5 분 후에 브라우저 (FF)에 "연결 시간이 초과되었습니다 : 10.0.0.100의 서버가 응답하는 데 너무 오래 걸립니다"라는 메시지가 표시됩니다.브라우저 시간 초과 : example.com의 서버가 응답하는 데 너무 오래 걸림

내 PHP 페이지에서 시간 제한을 크게 설정했습니다 : set_time_limit (3600); 그러나 이것은 도움이되지 않습니다. 서버가 파일을 생성하기 전에 공백을 에코하여 브라우저에 응답이 있음을 알리려고 시도했지만 그 트릭은 파일 내용을 브라우저 자체에 전송합니다. 브라우저 자체에는 원하는 내용이 아닙니다.

내가 사용하고 헤더로

,하지만 난이 아무것도하기 전에 브라우저 시간 초과가 서버로부터 전송으로 문제가되지 않습니다 생각이 문제를 해결하는 방법에 대한

$size= filesize($path); 
$fname = basename ($path);  
header("Pragma: public"); 
header("Expires: 0"); 
header("Cache-Control: must-revalidate, post-check=0, pre-check=0"); 
header("Cache-Control: public"); 
header("Content-Description: File Transfer"); 
header("Content-Disposition: attachment; filename=\"".$fname."\""); 
header("Content-Transfer-Encoding: binary"); 
header("Content-Length: ".$size); 
header("Content-type: application/octet-stream"); 
ob_clean(); 
flush(); 
readfile($path); 
exit; 

어떤 아이디어? 어쩌면 자바 스크립트 방법이 있을까요?

답변

2

나는 ajax (generate.php 호출)를 통해 파일 생성을 시작하고 "파일이 생성 중이고 준비가되면 다운로드 할 것입니다. 브라우저를 닫지 마십시오."라는 메시지를 클라이언트에 표시합니다.

generate.php에서

가 완료되면 (30 초마다 말) 수 있도록 주기적으로 데이터베이스를 업데이트 generate.php하는 초기 아약스 후 등

을 디스크에 파일을 저장 플래그, 예를 들어, 어떤 종류의 설정 위에서 언급 한 플래그를 검사하는 check.php에 대한 ajax 요청.

uri 파일을 찾으면 js가 호출 한 다음 js를 다운로드 할 수 있습니다 (숨겨진 iframe의 window.location 또는 src 설정)

관련 문제