··조회 13,126
파일이름을 다시 줄려면 어떻게 하나요?
제가 지금 파일 이름을 mktime()함수를 써서 업로드를 하고 있습니다.
한글 문제를 피할려고요 그런데 문제는 폴더를 보면 데이타 파일로 변해 버리더군여.^^;;;원래 제가 구현하고 싶었던 것은 클라이언트가 사진을 업로드 하면 업로드 폴더에 01.jpg 02.jpg 03.jpg이러한 식으로 파일명을 숫자나 영어로 일정하게 증가시켜서 저장하고 싶었습니다. 하지만 도저히 모르겠더라구염;;;
<?php
include "./connect.php";
$target_dir = "up"; // 서버에 up 이라는 디렉토리를 만들었음
# ----------------------------------------------------------------
# 파일이 업로드되었을 경우
# ----------------------------------------------------------------
echo "1. 초기업로드 : $upfile <br>";
if($upfile != '')
{
// 업로드 금지 파일 식별 부분
$filename = explode(".", $upfile_name);
$res=mktime();
//확장자를 가려냄
$extension = $filename[sizeof($filename)-1];
$extension = strtolower( $extension );
echo("파일 이름 $filename[0]");
echo "2. 확장자 검사 : $extension <br>";
if( !( strcmp($extension,"png") || strcmp($extension,"gif") || strcmp($extension,"jpg") ) )
{
echo( "업로드가 금지된 파일입니다.");
}
// 동일한 파일이 있는지 확인하는 부분
$target = $target_dir . "/" . $res;
echo "2. 복사할 파일 중복체크 : ". file_exists($target) ." <br>";
echo "<br> 원본 : $upfile , 복사본 : $target <hr>";
if(file_exists($target)) {
echo("동일한 파일이 있습니다.");
}
// 지정된 디렉토리에 파일 저장하는 부분
$rtn = move_uploaded_file($upfile,$target) or die( "3. 카피에러" );
if(!$rtn )
{ // false일 경우
echo( "파일 저장 실패");
}
}
# ----------------------------------------------------------------
# 디비 저장
# ----------------------------------------------------------------
$query="insert into test values('','$name','$comment','$target','$upfile_name')";
$result=mysql_query($query);
if($result)
{
echo("질의 성공");
}
else
{
echo("질의 실패");
}
?>
소스는 이렇고요 id가 프라이 머리 키 이고 자동 증가 함수 입니다. 어떻게 해야 될지 조언 좀 부탁 드립니다.
한글 문제를 피할려고요 그런데 문제는 폴더를 보면 데이타 파일로 변해 버리더군여.^^;;;원래 제가 구현하고 싶었던 것은 클라이언트가 사진을 업로드 하면 업로드 폴더에 01.jpg 02.jpg 03.jpg이러한 식으로 파일명을 숫자나 영어로 일정하게 증가시켜서 저장하고 싶었습니다. 하지만 도저히 모르겠더라구염;;;
<?php
include "./connect.php";
$target_dir = "up"; // 서버에 up 이라는 디렉토리를 만들었음
# ----------------------------------------------------------------
# 파일이 업로드되었을 경우
# ----------------------------------------------------------------
echo "1. 초기업로드 : $upfile <br>";
if($upfile != '')
{
// 업로드 금지 파일 식별 부분
$filename = explode(".", $upfile_name);
$res=mktime();
//확장자를 가려냄
$extension = $filename[sizeof($filename)-1];
$extension = strtolower( $extension );
echo("파일 이름 $filename[0]");
echo "2. 확장자 검사 : $extension <br>";
if( !( strcmp($extension,"png") || strcmp($extension,"gif") || strcmp($extension,"jpg") ) )
{
echo( "업로드가 금지된 파일입니다.");
}
// 동일한 파일이 있는지 확인하는 부분
$target = $target_dir . "/" . $res;
echo "2. 복사할 파일 중복체크 : ". file_exists($target) ." <br>";
echo "<br> 원본 : $upfile , 복사본 : $target <hr>";
if(file_exists($target)) {
echo("동일한 파일이 있습니다.");
}
// 지정된 디렉토리에 파일 저장하는 부분
$rtn = move_uploaded_file($upfile,$target) or die( "3. 카피에러" );
if(!$rtn )
{ // false일 경우
echo( "파일 저장 실패");
}
}
# ----------------------------------------------------------------
# 디비 저장
# ----------------------------------------------------------------
$query="insert into test values('','$name','$comment','$target','$upfile_name')";
$result=mysql_query($query);
if($result)
{
echo("질의 성공");
}
else
{
echo("질의 실패");
}
?>
소스는 이렇고요 id가 프라이 머리 키 이고 자동 증가 함수 입니다. 어떻게 해야 될지 조언 좀 부탁 드립니다.
댓글 1
위에서 move_uploaded_file 함수가 정확하게 어떤 기능을 하는지 모르겠습니다.
아래의 PHP 강좌를 기준으로 설명드리는 게 더 나을 것 같습니다.
target=_blank>http://www.itmembers.net/board/view.php?id=php2&no=9
이 소스 46행을 보면, copy 함수를 사용해 업로드한 임시 파일을 실제 서버에 복사하고 있습니다.
copy 함수는 copy(소스,타겟)과 같은 식으로 사용됩니다.
이 때 타겟의 파일 이름을 사전에 바꾸면, 다른 이름으로 저장이 되는 것입니다.
예를 들어,
40행을 보면 $target = $target_dir."/".$upfile_name 이라고 되어 있는데,
여기서$upfile_name의 값을 임의로 주면 됩니다.
이 $upfile_name 의 이름을 어떻게 주는지는 응용하기 나름입니다.
예를 들어 mktime을 사용하여 업로드되는 현재의 시간을 파일이름으로 줄 수도 있습니다. 이 부분은 생각하기에 따라 수많은 응용 로직이 나올 수 있습니다.
한번 직접 구상해보시기 바랍니다.