MySQL file upload
2022. 2. 15. 14:33ㆍStudy/PHP&MySQL
DB에 파일을 저장할 때는 파일명과 실제 파일을 DB에 올리고, 둘을 짝으로 링크시켜 저장한다.
file.sql
file_name_0 : 실제 파일 이름을 저장한다.
file_copied_0 : 년월일시분초_0.jpg 로 이름이 변경되어 실제 파일이 서버에 저장된다.
위 2개의 파일이 서로 짝으로 링크되어 서버에 저장된다.
create table file (
num int not null auto_increment,
file_name_0 char(40),
file_name_1 char(40),
file_copied_0 char(30),
file_copied_1 char(30),
primary key(num)
);
file.html
<form name="board_form" method="post" action="insert.php" enctye="multipart/form-data">
// 용량이 큰 데이터를 처리할때 쓰이므로, 파일을 첨부할때는 항상 써준다
<input type="file" name="upfile[]"> // name은 배열
<!DOCTYPE html>
<html lang="ko">
<head>
<meta charset="UTF-8">
<meta http-equiv="X-UA-Compatible" content="IE=edge">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>Document</title>
</head>
<body>
<form name="board_form" method="post" action="insert.php" enctype="multipart/form-data">
<div class="col2"><input type="file" name="upfile[]"></div>
<div class="col2"><input type="file" name="upfile[]"></div>
<div id="write_button"><input type="submit" value="전송"></div>
</form>
</body>
</html>
insert.php
name 속성이 upfile[]일 때 전달되는 배열 변수
$_FILES["upfile"]["name"] | 업로드하는 실제 파일명 |
$_FILES["upfile"]["tmp_name"] | 서버에 저장되는 임시 파일명 |
$_FILES["upfile"]["type"] | 업로드 파일 형식 |
$_FILES["upfile"]["size"] | 업로드 파일 크기 |
$_FILES["upfile"]["error"] | 에러 발생 확인 |
move_uploaded_file(임시파일이름.tmp, 경로/업로드될파일이름.확장자) // 파일을 업로드한다.
<meta charset="UTF-8">
<?
@extract($_POST);
@extract($_GET);
@extract($_SESSION);
// $upfile (배열)
/* 단일 파일 업로드
name 속성이 upfile[]일때 전달되는 배열 변수
$_FILES["upfile"]["name"] => 업로드하는 실제 파일명
$_FILES["upfile"]["tmp_name"] => 서버에 저장되는 임시 파일명
$_FILES["upfile"]["type"] => 업로드 파일 형식
$_FILES["upfile"]["size"] => 업로드 파일 크기
$_FILES["upfile"]["error"] => 에러 발생 확인
*/
// 다중 파일 업로드
$files = $_FILES["upfile"];
$count = count($files["name"]); // 첨부된 파일의 개수 (2개)
$upload_dir = './data/'; // 파일을 저장할 경로명
for ($i=0; $i<$count; $i++) // i = 0, 1
{
$upfile_name[$i] = $files["name"][$i];
$upfile_tmp_name[$i] = $files["tmp_name"][$i];
$upfile_type[$i] = $files["type"][$i];
$upfile_size[$i] = $files["size"][$i];
$upfile_error[$i] = $files["error"][$i];
// echo "$upfile_name[$i]<br>$upfile_tmp_name[$i]<br>$upfile_type[$i]<br>$upfile_size[$i]<br>$upfile_error[$i]";
// 데이터 이름 저장 start //
$file = explode(".", $upfile_name[$i]); // '.'을 기준으로 문자열을 나누어 배열로 처리 [0]a1, [1]jpg
$file_name = $file[0]; //파일명 a1
$file_ext = $file[1]; //확장자 jpg
$new_file_name = date("Y_m_d_H_i_s");
$new_file_name = $new_file_name."_".$i; //파일 이름을 2016_08_11_15_08_12_0 형식으로.
$copied_file_name[$i] = $new_file_name.".".$file_ext; // 2016_08_11_15_08_12_0.확장자
$uploaded_file[$i] = $upload_dir.$copied_file_name[$i]; // ./data/2016_08_11_15_08_12_0.확장자
// 데이터 이름 저장 end //
/*
1024byte = 1kb
1024kb = 1mb
1024mb = 1gb
1024gb = 1tb
*/
if( $upfile_size[$i] > 500000 ) {
echo("
<script>
alert('업로드 파일 크기가 지정된 용량(500KB)을 초과합니다!<br>파일 크기를 체크해주세요! ');
history.go(-1)
</script>
");
exit;
}
if ( ($upfile_type[$i] != "image/gif") &&
($upfile_type[$i] != "image/jpeg") &&
($upfile_type[$i] != "image/pjpeg") )
{
echo("
<script>
alert('JPG와 GIF 이미지 파일만 업로드 가능합니다!');
history.go(-1)
</script>
");
exit;
}
// move_uploaded_file(임시파일이름.tmp, 경로/업로드될파일이름.확장자) : 파일을 업로드한다.
if (!move_uploaded_file($upfile_tmp_name[$i], $uploaded_file[$i]) ) //파일을 업로드한다.
{
echo("
<script>
alert('파일을 지정한 디렉토리에 복사하는데 실패했습니다.');
history.go(-1)
</script>
");
exit;
}
}
$connect = mysql_connect("localhost","song","1234"); // kdhong 계정으로 접속
$db_con = mysql_select_db("song_db", $connect);
$sql = "insert into file ( file_name_0, file_name_1 ,file_copied_0, file_copied_1) ";
$sql .= "values('$upfile_name[0]', '$upfile_name[1]', '$copied_file_name[0]', '$copied_file_name[1]')";
mysql_query($sql, $connect); // $sql 에 저장된 명령 실행
mysql_close(); // DB 연결 끊기
echo "
<script>
alert('파일이 업로드 되었습니다.');
location.href = 'file.html';
</script>
";
?>
view.php
<meta charset="UTF-8">
<?
@extract($_POST);
@extract($_GET);
@extract($_SESSION);
$connect = mysql_connect("localhost","song","1234"); // song 계정으로 접속
$db_con = mysql_select_db("song_db", $connect);
$sql = "select * from file where num=1"; // num1을 읽어옴
$result = mysql_query($sql, $connect);
$row = mysql_fetch_array($result);
$item_num = $row[num];
$image_name[0] = $row[file_name_0]; // a1.jpg
$image_name[1] = $row[file_name_1]; // a2.jpg
$image_copied[0] = $row[file_copied_0]; // ./data/2022_02_15_14_18_57_0.jpg
$image_copied[1] = $row[file_copied_1]; // ./data/2022_02_15_14_18_57_1.jpg
mysql_close();
?>
<!DOCTYPE html>
<html lang="ko">
<head>
<meta charset="UTF-8">
<meta http-equiv="X-UA-Compatible" content="IE=edge">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>Document</title>
</head>
<body>
<div id="view_content">
<?
for ($i=0; $i<2; $i++)
{
if ($image_copied[$i]) // 첨부된 이미지가 있으면
{
$img_name = $image_copied[$i]; // 2022_02_15_14_18_57_0.jpg
$img_name = "./data/".$img_name; // ./data/2022_02_15_14_18_57_0.jpg
$img_width = 200;
echo "<img src='$img_name' width='$img_width'>"."<br><br>";
}
}
?>
</div>
</body>
</html>
'Study > PHP&MySQL' 카테고리의 다른 글
회원가입 - ajax (0) | 2022.02.16 |
---|---|
회원가입 (0) | 2022.02.16 |
form 메일보내기 mail() (0) | 2022.02.15 |
세션 (Session) (0) | 2022.02.15 |
쿠키 (Cookie) (0) | 2022.02.15 |