한글명 파일 다운로드 안되는 현상..
본문
write_pro.php(글쓰기 처리)
if ($file_1 [name]) {
$ext_1 = array_pop ( explode ( ".", strtolower ( $file_1 [name] ) ) );
if (@ereg ( $ext_1, "php|php3|php4|htm|inc|html" )) {
echo "
<script>
alert('PHP, HTML파일은 업로드가 제한됩니다');
history.back(1);
</script>
";
exit ();
}
$find_1 = '../../file/' . iconv ( "utf-8", "euc-kr", $file_1 [name] );
if (file_exists ( $find_1 )) {
$name_1 = substr ( $file_1 [name], 0, strrpos ( $file_1 [name], "." ) );
$ext_1 = substr ( $file_1 [name], strrpos ( $file_1 [name], "." ) );
$file_1 [name] = $name_1 . $ext_1;
$i = 0;
while ( file_exists ( '../../file/' . iconv ("utf-8", "euc-kr", $file_1 [name] ) ) ) {
$i ++;
$file_1 [name] = $name_1."_" .$i.$ext_1;
}
}
//$fn_1 = $file_1[name] . "1." . $ext_1;
/* preg_replace(“/s+/”, “”,$file_1[name]); // 공백제거*/
//$file_1[name] = str_ireplace(" ", "", $file_1[name]);
// $file_1[name] = $string = preg_replace ("/[ #\&\+\-%@=\/\\\:;,\,\"\^`~\_|\!\?\*$#<>()\[\]\{\}]/i", "", $file_1[name]);
move_uploaded_file ( $file_1 [tmp_name], $_SERVER ['DOCUMENT_ROOT'] . '/file/' . iconv ( "utf-8", "euc-kr", $file_1[name] ));
}
-------------------------------------------------------------
read.php(상세페이지)
<?php
if ($read [file_1]) {
?>
<tr id="read_top">
<td colspan="2">첨부파일 1 : <a
href="/bbs/board_2/download.php?down=<?=$read[file_1] ?>" target="_blank" ><?= $read[file_1] ?></a></td>
</tr>
<?php
}
?>
=-------------------------------------------------
download.php
<?php
/* 크롬으로 들어왔을때 down파일의 명칭의 인코딩을 변경 */
$downFileName = $_GET[down];
$u_agent = $_SERVER['HTTP_USER_AGENT']; // 들어온사람의 브라우저를 변수 $u_agent 에 담아서
if(preg_match('/Chrome/i',$u_agent) )
{
$downFileName = iconv( "UTF-8", "EUC-KR", $_GET[down] );
}
$filepath = $_SERVER ['DOCUMENT_ROOT'] . '/file/' . $downFileName;
$filesize = filesize ( $filepath );
//$filepath = $_SERVER ['DOCUMENT_ROOT'] . '/file/' . $_GET[down];
//$filesize = filesize ( $filepath );
//header("Content-Type:text/html; charset=euc-kr");
header ("Content-Type:text/html; charset=UTF-8");
header("Content-Description: File Transfer");
header ("Pragma: no-cache; public" );
header ("Expires: 0" );
header ("Cache-Control: must-revalidate, post-check=0, pre-check=0");
header ("Cache-Control : public");
header ("Content-Disposition: ".$_SERVER['HTTP_POST']." Generated Data");
header ("Content-Type: application/octet-stream" );
//header("Content-Disposition: attachment; filename*=UTF-8''" . rawurlencode($_GET[down]) . '; filename="' . rawurlencode($_GET[down]) . '"');
header ("Content-Disposition:attachment; filename=".$_GET[down].";");
header ("Content-Transfer-Encoding: binary" );
header ("Content-Length: $filesize" );
/*function isIE() {
if(stripos($_SERVER['HTTP_USER_AGENT'], 'Trident/7.0') != false) return true;
if(stripos($_SERVER['HTTP_USER_AGENT'], 'MSIE') != false) return true;
return false;
}*/
ob_clean ();
flush ();
readfile ( $filepath );
?>
이렇게 하고있는데
익스에서도 파일을 다운로드하면 인코딩문제가뜨면서 파일안에 아무내용이없습니다..
파일사이즈는 크기대로나오는데 내용물이하나도없어요..
크롬도 마찬가지입니다..
몇일째 헤엄치고있는데.. 끄내주실분 계실까요..
답변 1
그누보드 처럼..
파일은 일정한 영문+숫자 파일명을 생성해서 저장하고
한글 파일명은 따로 저장해둡니다.
다운로드할때는 저장한 파일명으로 읽어들이고,
한글 파일명으로 변환해서 다운받게 하는게 좋습니다.
한글 파일명 그대로 저장하면 다양한 문제가 생깁니다.