[코드보완요청] /bbs/download.php 에서 다운로드시 파일 깨짐 (우분투 10.04 서버) 정보
[코드보완요청] /bbs/download.php 에서 다운로드시 파일 깨짐 (우분투 10.04 서버)본문
안녕하세요.
항상, 그누보드에 감사드립니다.
< 환경 >
* 우분투 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=\"".basename($filepath)."\";" );
header("Content-Transfer-Encoding: binary");
header("Content-Length: ".$fsize);
ob_clean();
flush();
-----------------------------------------------------
관리자님, 참고해 주세요.
감사합니다.
PS) 코드보완, 혹은 버그신고란, 혹은 담당 이메일주소를 찾을 수 없어, 여기에 올립니다. 양해 바랍니다.
항상, 그누보드에 감사드립니다.
< 환경 >
* 우분투 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=\"".basename($filepath)."\";" );
header("Content-Transfer-Encoding: binary");
header("Content-Length: ".$fsize);
ob_clean();
flush();
-----------------------------------------------------
관리자님, 참고해 주세요.
감사합니다.
PS) 코드보완, 혹은 버그신고란, 혹은 담당 이메일주소를 찾을 수 없어, 여기에 올립니다. 양해 바랍니다.
댓글 전체
저랑 거의 비슷한 환경인데 저같은경우엔 꺠지지 않는데 음^^;;
감사합니다..
저도 같은 현상으로 파일이 깨져서 다운로드가 제대로 안되었는데 덕분에 정말 잘 사용하게 되었습니다.
이것때문에 일주일동안 고생했는데 감사합니다 ^^
올려주신 소스중에 중간에
header("Content-Disposition: attachment; filename=\"".basename($filepath)."\";" );
이부분을 사용하게되면 파일명이 바뀐것으로 download가 되게 되네요..
header("Content-Disposition: attachment; filename=\"".$original."\";" );
이렇게 저는 수정해서 사용했습니다.
이렇게하면 upload 했을때의 파일명으로 다운받을 수 있기 때문에 요 부분만 제가 수정해서 사용하고 있습니다.
넘 감사합니다.. ㅠ.ㅠ 정말 고생 많이 했거든요.. 감사합니다 ^^
저도 같은 현상으로 파일이 깨져서 다운로드가 제대로 안되었는데 덕분에 정말 잘 사용하게 되었습니다.
이것때문에 일주일동안 고생했는데 감사합니다 ^^
올려주신 소스중에 중간에
header("Content-Disposition: attachment; filename=\"".basename($filepath)."\";" );
이부분을 사용하게되면 파일명이 바뀐것으로 download가 되게 되네요..
header("Content-Disposition: attachment; filename=\"".$original."\";" );
이렇게 저는 수정해서 사용했습니다.
이렇게하면 upload 했을때의 파일명으로 다운받을 수 있기 때문에 요 부분만 제가 수정해서 사용하고 있습니다.
넘 감사합니다.. ㅠ.ㅠ 정말 고생 많이 했거든요.. 감사합니다 ^^
넘흐넘흐 감사합니다.
완전감사 2시간을 헤매고 있었는데
완전 감사합니다..실례가 되지 않는다면..제 블로그에 팁으로 올리겠습니다.^^;
감사합니다. 큰 도움이 되었습니다.
정말 너무 감사합니다. 문서 파일 hwp,pdf, doc, 모두다 꺠져서 힘들었는데, 저렇게 적용후 완벽하게 나옵니다!!! 감사합니다!!
이거보고 해결 되었네요. 감사합니다! ㅜㅜ
감사합니다!!!
고맙습니다.
저도 엑셀파일 다운로드 깨졌었는데 덕분에 해결했습니다.
저도 엑셀파일 다운로드 깨졌었는데 덕분에 해결했습니다.
아, 정말 필요한 정보.... 감사합니다.
감사합니다 ~ ^^
이런경우가 처음이라 당황했는데 해결했어요 감사합니다.
감사합니다. 이것보고 해결했습니다.^^