분명 잘 동작했던 것 같은데..
언제 부턴가 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시간 노가다 방지를 위하여 썼습니다.