분명 잘 동작했던 것 같은데..

언제 부턴가 force_download 함수가 동작을 잘 하지 않았다...

진짜 10시간을 넘게 디버깅을 했는데.

 

결국 원인은..

파일을 업로드하는 것은 정상 동작 하는데..

 

다운 받으면, 맨앞에

바이너리 값으로 0A 0D 0A가 붙어서..

해더 파일이 깨져서 이미지가 나오지 않는 것 이었다.

 

번지수  : 원본파일  다운파일

00000000: FF           0A   <-- 쓰레기 값?

00000001: D8           0D

00000002: FF           0A

00000003: DB          FF

00000004: 00           D8

00000005: 43           FF

00000006: 00          DB

00000007: 03          00

00000008: 02          43

00000009: 02          00

0000000E: 03          02

0000000F: 03          02

 

 

저것은 아스키 코드로 CR LF 에 해당하는 문자들이다..

 

도대체 저게 왜 찍혀 나오는 거지...

진짜 코드 싹 뒤져 가면서 쫒아 갔는데..

아무곳도~ 저 문자를 넣는 부분이 없엇다..

 

그러다.. 구굴링중..

함수 두개를 발견..

 

ob_clean();

flush();

 

출력 버퍼를 지워 주는 함수 인데..

혹시나 ~ 하면서.. 사용 해 봤더니 잘된다 ㅠ.ㅠ

 

 

아무튼 나는 이렇게 해결했다.

 

download_helper.php를

MY_download_helper.php로 오버 로딩 시켰고.

 

내용은 그냥 download_helper.php에 있는 걸 복사하고..

 

마지막에.

 

else

{

header('Content-Description: File Transfer');

header('Content-Type: "'.$mime.'"');

header('Content-Disposition: attachment; filename="'.$filename.'"');

header("Content-Transfer-Encoding: binary");

header('Expires: 0');

header('Cache-Control: must-revalidate, post-check=0, pre-check=0');

header('Pragma: no-cache');

header("Content-Length: ".$filelen);

 

 

 

}

 

ob_clean();

flush();

exit($data);

 

 

이렇게 두개를 추가하니~

CR LF에 해당하는 값이 사라지고..

정상적으로 이미지 파일 등등이 출력 되었다.

 

 

소수에게만 필요한 정보겠지만..

누군가의 10시간 노가다 방지를 위하여 썼습니다.

+ Recent posts