CI 묻고 답하기

제목 파일 다운로드 중 다른 요청 멈춤 문제
글쓴이 태태그 작성시각 2014/02/14 12:02:08
댓글 : 5 추천 : 1 스크랩 : 0 조회수 : 17952   RSS
안녕하세요 JAVA쪽을 하다가 이번에 코드이그나이터를 처음 접하게 됏습니다.
지원되는 기능과 생산적인 측면에서 볼때 자바를 왜쓰나 싶을 정도로 잘 만들어진 프레임웤이네요 완전 반했습니다.

지금 고객사 내부에서 사용하는 웹어플리케이션을 코드이그나이터를 사용해서 개발중인데요
사이트 특성상 대용량 파일을 업로드 다운로드 해야 합니다.
그런데 파일 다운로드시에는 다른 아무런 기능도 pending되어 버립니다.
다운로드가 완료 된 후에야 펜딩된 요청이 진행되는것같습니다.

구글링을 포함해 아무리 찾아보고 머리를 굴려봐도 내공이 모자라 알수가 없습니다.
힌트 좀 부탁드릴게요.

프로세스입니다.
1. 사용자에게 다운로드 요청을 받음
2. 파라미터로 넘어온 파일 idx를 기준으로 요청자에게 해당 파일의 권한이 있는지 확인 (DB및 세션으로 확인)
3. 권한이 있는 사용자라면 업로드 했던 파일명으로 다운로드 진행

다운로드 코드입니다.
 if ($fd = fopen ($distribution, "r")){
 $size=filesize($distribution);
 header("Pragma: ");
 header("Cache-Control: ");
 header("Content-type: application/octet-stream");
 header("Content-Disposition: attachment;     filename=\"".$file->USER_FILE_NAME."\"");
 header("Content-length: $size");
 
 while(!feof($fd)) {
    $buffer = fread($fd, $size);
    print $buffer;
 }
 fclose ($fd);
 exit;
}


지레짐작하기로는 해당세션에 대한 요청이 진행되는 동안은 다음 요청은 대기 시키는것 같은데 도움 부탁드립니다.


감사합니다.

 다음글 설정파일에 직접쓰기.. (1)
 이전글 HMVC에서 run과 load의 차이점이 궁금합니다. (1)

댓글

한대승(불의회상) / 2014/02/14 13:15:24 / 추천 0
다운로드 헬퍼를 사용해 보세요.

http://cikorea.net/user_guide_2.1.0/helpers/download_helper.html
태태그 / 2014/02/14 13:31:55 / 추천 0
한대승님 댓글 감사합니다. 
다운로드 헬퍼를 사용해도 똑같습니다 ㅜㅜ
$data = file_get_contents($distribution);
force_download($file->USER_FILE_NAME, $data);

변종원(웅파) / 2014/02/14 13:52:40 / 추천 0
http://pyd.io/  ajaxexlorer라는 php기반의 웹하드 솔루션입니다.
다운로드 부분을 참고해보심이...
bada / 2014/02/15 20:12:49 / 추천 0
제가 얼마전까지 골치아파하던 문제랑 같은것으로 보이네요.

PHP에서 파일 세션을 사용하는 경우, session_start()로 세션에대한 사용을 시작하시면 파일쓰기 Lock이 생성되어서 세션파일에 대한 Lock이 해제되기 전 까지는 동일한 세션값을 사용하는 다른 접속이 블럭되는 현상이 있습니다.

파일 다운로드와 같이 수초이상 유지되어야 하는 프로세스 전에는 세션 쓰기를 닫아주셔야합니다.
파일 다운로드 시작 전에 session_write_close를 호출해주시면 해결되실 것으로 생각됩니다.
태태그 / 2014/02/17 10:19:50 / 추천 0
 bada님!!! 감사합니다 bada님께서 알려주신 방법으로 해결했습니다.

커뮤니티에 도움요청한게 이번이 처음인데 이렇게 여러분들이 도움을 주실줄 몰랐네요
감동받았습니다.정말 감사합니다.

이 문제 해결로 일정이 대폭 줄었습니다.
정말 감사하다는 말밖에 할 수 없는게 아쉽니다.

bada님과 멘트 달아주신 분들 정말 감사합니다 !!!