첨부파일 다운로드시 깨지는 현상

출처: http://dryad.kr/bbs/board.php?bo_table=rboard01&wr_id=214

< 환경 >

* 우분투 10.04 서버
* PHP 판번호: PHP Version 5.3.2-1ubuntu4.7
* 서버 사양: P4 1.7GHz, 512MB RAM
* Mod-security 모듈 작동중이고, 기타 외산 오프소스 방화벽 OS 별도 가동 중...

다름 아니라, 위의 환경에서, 게시판에 첨부한 파일을 클릭하여 내려받기 하면, 파일이 깨져있습니다. (혹은 정상적으로 열리지 않음. 예를 들면, 그림파일들, zip, doc 등등)

이 문제로, /bbs/download.php 에서,

아래 부분을 모두 주석 처리하고,
----------------------------------------------------------
if(preg_match("/msie/i", $_SERVER[HTTP_USER_AGENT]) && preg_match("/5\.5/", $_SERVER[HTTP_USER_AGENT])) {
header("content-type: doesn/matter");
header("content-length: ".filesize("$filepath"));
header("content-disposition: attachment; filename=\"$original\"");
header("content-transfer-encoding: binary");
} else {
header("content-type: file/unknown");
header("content-length: ".filesize("$filepath"));
header("content-disposition: attachment; filename=\"$original\"");
header("content-description: php generated data");
}
header("pragma: no-cache");
header("expires: 0");
flush();
---------------------------------------
아래의 코드로 대체할 때, 정상적으로 파일이 열리게 됩니다.

* 아래 코드 출처 - http://kr2.php.net/manual/en/function.header.php 참조 (2011년 1월 31일자 User Contributed Notes)

// Must be fresh start
if( headers_sent() )
die('Headers Already Sent');

// Required for some browsers
if(ini_get('zlib.output_compression'))
ini_set('zlib.output_compression', 'Off');

// Parse Info / Get Extension
$fsize = filesize($filepath);
$path_parts = pathinfo($filepath);
$ext = strtolower($path_parts["extension"]);

// Determine Content Type
switch ($ext)
{
case "pdf": $ctype="application/pdf"; break;
case "exe": $ctype="application/octet-stream"; break;
case "zip": $ctype="application/zip"; break;
case "doc": $ctype="application/msword"; break;
case "xls": $ctype="application/vnd.ms-excel"; break;
case "ppt": $ctype="application/vnd.ms-powerpoint"; break;
case "gif": $ctype="image/gif"; break;
case "png": $ctype="image/png"; break;
case "jpeg":
case "jpg": $ctype="image/jpg"; break;
default: $ctype="application/force-download";
}

header("Pragma: public"); // required
header("Expires: 0");
header("Cache-Control: must-revalidate, post-check=0, pre-check=0");
header("Cache-Control: private",false); // required for certain browsers
header("Content-Type: $ctype");
header("Content-Disposition: attachment; filename=\"".$original."\";" );
header("Content-Transfer-Encoding: binary");
header("Content-Length: ".$fsize);
ob_clean();
flush();
|

댓글 6개

좋은 정보 감사합니다.
정말 감사드립니다.. 다운로드시 파일명이 특수문자로 바뀌게 나와서... 여기저기 찾아보다가 덕분에
해결했습니다.. 감사감사^_^
케이스를 모든 화일로 하고싶습니다. 아니면 특정한것 제외..
완전 대박~ 한참 찾아 헤맸는데 감사합니다,
정말 어렵게 찾았네요^^
감사합니다.
워드 파일 다운로드하면 빈 페이지라 원인을 못 찾았는데
시원하게 해결되었네요
감사합니다
댓글을 작성하시려면 로그인이 필요합니다. 로그인

그누4 팁자료실

그누보드4와 관련된 팁을 여러분들과 함께 공유하세요. 나누면 즐거움이 커집니다.

+
제목 글쓴이 날짜 조회
13년 전 조회 5,392
13년 전 조회 3,504
13년 전 조회 5,452
13년 전 조회 5,910
13년 전 조회 3,559
13년 전 조회 5,351
13년 전 조회 4,659
13년 전 조회 8,676
13년 전 조회 1.7만
13년 전 조회 6,594
13년 전 조회 8,945
13년 전 조회 5,015
13년 전 조회 5,765
13년 전 조회 3,634
13년 전 조회 5,056
13년 전 조회 3,547
13년 전 조회 5,523
13년 전 조회 4,880
13년 전 조회 8,228
13년 전 조회 1만
🐛 버그신고