테스트 사이트 - 개발 중인 베타 버전입니다

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

지성구 5년 전 조회 3,460

if ($file_1 [name]) {    $ext_1 = array_pop ( explode ( ".", strtolower ( $file_1 [name] ) ) );    if (@ereg ( $ext_1, "php|php3|php4|htm|inc|html" )) {   echo "      ";   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 "      ";   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,"

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

 

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개

5년 전

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

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

 

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

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

select * from board where id='$id'

 

 

 

로그인 후 평가할 수 있습니다

댓글을 작성하려면 로그인이 필요합니다.

루미집사

"download.php?down=파일명" 보다 "download.php?id=고유번호" 이게 더 좋을듯 싶습니다.

기본적으로 id를 고유번호이며 키로 설정 되어 있겠죠.

 

file1 : 사용자가 업로드한 파일명 (원본파일명)

file2 : 서버에 저장된 파일명 (변경된 파일명)

이게 맞나요?  이렇게 된다고 하였을때..

 

</p>

<p><?php

$filepath = $_SERVER ['DOCUMENT_ROOT'] . '/file/' . $_GET [down]; 

$filesize = filesize ( $filepath );</p>

<p> </p>

<p>// 원본파일명 구하기.</p>

<p>$conn = mysqli_connect('localhost', 'root', 'password', 'DBName', '3306');</p>

<p>if (mysqli_connect_errno()) {</p>

<p>        echo "Failed to connect to MySQL: " . mysqli_connect_error();</p>

<p>}</p>

<p>$sql = "SELECT * from board where file2 = '{$_GET['down']}' ";</p>

<p>$result = mysqli_query($conn, $sql);</p>

<p>$row = mysqli_fetch_assoc($result);</p>

<p>$ori_filename = $row['file_1']; // 원본파일명</p>

<p> </p>

<p>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" );</p>

<p>

/*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;

}*/</p>

<p>ob_clean ();

flush ();

readfile ( $filepath );

?></p>

<p>

 

대충 이렇게 될듯 합니다.

로그인 후 평가할 수 있습니다

댓글을 작성하려면 로그인이 필요합니다.

지성구
5년 전

원본파일명은 어떻게구할가요..ㅠ

 

로그인 후 평가할 수 있습니다

댓글을 작성하려면 로그인이 필요합니다.

루미집사

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에 지정해주면 됩니다.

 

 

 

로그인 후 평가할 수 있습니다

댓글을 작성하려면 로그인이 필요합니다.

답변을 작성하려면 로그인이 필요합니다.

로그인