파일업로드에서 한글파일명 따로저장하고 변환된파일명 저장

파일업로드에서 한글파일명 따로저장하고 변환된파일명 저장

QA

파일업로드에서 한글파일명 따로저장하고 변환된파일명 저장

본문

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에서 받는 GET 변수 "down" 파일명인가요?

 

그누보드 다운로드 /bbs/download.php 파일을 보면 bo_table, wr_id, no 값으로 받습니다.

게시판 테이블명, 게시판글번호, 첨부파일 번호로 받은 다음 DB에서 원본파일명을 구해서

다운로드 하는 방식입니다.

 

즉, 그누보드 download.php 파일을 참고하여 구현하시면 될듯 합니다.

 

아래 코드를 보면...

eader ("Content-Disposition:attachment; filename=".$_GET[down].";");

 

"filename"이 다운로드시 저장되는 파일명으로 확정되어지는 부분입니다.

board 테이블에서 원본파일명을 구한다음 filename에 지정해주면 됩니다.

 

 

 

"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 );
?>

 

대충 이렇게 될듯 합니다.

board 테이블에 원본(한글) 화일명을 저장하는 필드를 2개 추가하고

insert into 구문에 한글화일명 저장하는 코드도 추가 합니다

 

다운로드시에는 링크에 down대신 id값을 넘기도록 만드세요

download.php에서 아래 쿼리를 실행해서 나온 값으로 화일명을 설정해주면 됩니다

select * from board where id='$id'

 

 

 

답변을 작성하시기 전에 로그인 해주세요.
전체 123,532 | RSS
QA 내용 검색

회원로그인

(주)에스아이알소프트 / 대표:홍석명 / (06211) 서울특별시 강남구 역삼동 707-34 한신인터밸리24 서관 1404호 / E-Mail: admin@sir.kr
사업자등록번호: 217-81-36347 / 통신판매업신고번호:2014-서울강남-02098호 / 개인정보보호책임자:김민섭(minsup@sir.kr)
© SIRSOFT