파일업로드에서 한글파일명 따로저장하고 변환된파일명 저장
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 = date("YmdHis") . "1." . $ext_1;
move_uploaded_file ( $file_1 [tmp_name], $_SERVER ['DOCUMENT_ROOT'] . '/file/' . iconv ( "utf-8", "euc-kr", $fn_1 ));
}
if ($file_2 [name]) {
$ext_2 = array_pop ( explode ( ".", strtolower ( $file_2 [name] ) ) );
if (@ereg ( $ext_2, "php|php3|php4|htm|inc|html" )) {
echo "
<script>
alert('PHP, HTML파일은 업로드가 제한됩니다');
history.back(1);
</script>
";
exit ();
}
$find_2 = '../../file/' . iconv ( "utf-8", "euc-kr", $file_2 [name] );
if (file_exists ( $find_2 )) {
$name_2 = substr ( $file_2 [name], 0, strrpos ( $file_2 [name], "." ) );
$ext_2 = substr ( $file_2 [name], strrpos ( $file_2 [name], "." ) );
$file_2 [name] = $name_2 . $ext_2;
$i = 0;
while ( file_exists ( '../../file/' . iconv ( "utf-8", "euc-kr", $file_2 [name] ) ) ) {
$i ++;
$file_2 [name] = $name_2."_" .$i.$ext_2;
}
}
$fn_2 = date("YmdHis") . "2." . $ext_2;
move_uploaded_file ( $file_2 [tmp_name], $_SERVER ['DOCUMENT_ROOT'] . '/file/' . iconv ( "utf-8", "euc-kr", $fn_2 ));
// move_uploaded_file ( $file_2 [tmp_name], $_SERVER ['DOCUMENT_ROOT'] . '/file/' . iconv ( "utf-8", "euc-kr", $file_2 [name] ) );
}
$contents = strip_tags($contents,"<br><p><h2><img><line-height>");
$query = "insert into board (id, subject, name, contents, file_1, file_2, write_date, top, depth) values('$id', '$subject', '$_SESSION[name]', '$contents', '$fn_1', '$fn_2', '$write_date', '$top', '$depth')";
mysql_query ( $query, $conn );
?>
--------------------------------------------
한글파일명과 변환된 파일명을 저장해서 원본파일을 다운로드할수 있게 하는 방법좀 알수있을까요?
-------------------------------------------
download.php
<?php
$filepath = $_SERVER ['DOCUMENT_ROOT'] . '/file/' . $_GET [down];
$filesize = filesize ( $filepath );
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=".$_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 );
?>
답변 4개
"download.php?down=파일명" 보다 "download.php?id=고유번호" 이게 더 좋을듯 싶습니다.
기본적으로 id를 고유번호이며 키로 설정 되어 있겠죠.
file1 : 사용자가 업로드한 파일명 (원본파일명)
file2 : 서버에 저장된 파일명 (변경된 파일명)
이게 맞나요? 이렇게 된다고 하였을때..
<?php
$filepath = $_SERVER ['DOCUMENT_ROOT'] . '/file/' . $_GET [down];
$filesize = filesize ( $filepath );
// 원본파일명 구하기.
$conn = mysqli_connect('localhost', 'root', 'password', 'DBName', '3306');
if (mysqli_connect_errno()) {
echo "Failed to connect to MySQL: " . mysqli_connect_error();
}
$sql = "SELECT * from board where file2 = '{$_GET['down']}' ";
$result = mysqli_query($conn, $sql);
$row = mysqli_fetch_assoc($result);
$ori_filename = $row['file_1']; // 원본파일명
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=".$ori_filename.";");
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 );
?>
대충 이렇게 될듯 합니다.
download.php에서 받는 GET 변수 "down" 파일명인가요?
그누보드 다운로드 /bbs/download.php 파일을 보면 bo_table, wr_id, no 값으로 받습니다.
게시판 테이블명, 게시판글번호, 첨부파일 번호로 받은 다음 DB에서 원본파일명을 구해서
다운로드 하는 방식입니다.
즉, 그누보드 download.php 파일을 참고하여 구현하시면 될듯 합니다.
아래 코드를 보면...
eader ("Content-Disposition:attachment; filename=".$_GET[down].";");
"filename"이 다운로드시 저장되는 파일명으로 확정되어지는 부분입니다.
board 테이블에서 원본파일명을 구한다음 filename에 지정해주면 됩니다.
답변을 작성하려면 로그인이 필요합니다.