[12] PHP - $_FILES로 파일 업로드_2 (DB저장)
[ 환경 ]
ㄴ php 7
1. 테이블 생성
참고 URL - https://kuk1938.tistory.com/3
[2] MySQL - 테이블(table)생성·변경·삭제
★ MySQL 5.7 버전으로 진행 : create,alter,drop을 테이블에 활용해볼 예정 [ 주의할 점 ] ㄴ use 데이터베이스명을 꼭 활용. ㄴ 다른 데이터베이스의 테이블 정보를 실수로 바꾸는일이 없도록 해야함. ★
kuk1938.tistory.com
참고 URL - https://kuk1938.tistory.com/25
[4] Workbench - 테이블(table) 생성
1. 테이블 생성할 DB 선택 : DB 좌측 화살표 클릭 ㄴ 4가지 목록중 Tables를 우클릭 하여 Create Table를 클릭해서 진행 2. 테이블 생성 진행 2-1. [ Table Name ] : 테이블명을 정한다. ㄴ 테이블에 저장시키는
kuk1938.tistory.com
ㄴ 생성한 테이블 정보
ㄴ 테이블명 : files_table
컬럼명 | 설명 |
idx | 고유번호 |
r_name | 원본 파일명 |
name | 가공 파일명 |
r_ext | 원본 파일 확장자 |
ext | $_FILES 속성 파일 확장자 |
size | 파일 사이즈 |
ㄴ 컬럼정보
2. 코드 추가
※ 컬럼에 필요한 정보들을 db에 저장시키기 위해 $_FILES의 속성을 가공 해야함.
<?php
// 업로드 파일명 변수(DB에 넣을 값)
$file_name = $_FILES['files']['name'];
// $_FILES 속성의 확장자 변수 (DB에 넣을 값)
$ext = $_FILES['files']['type']; //
// [원본 파일 확장자 가공하는 법]
// 1번 배열변환 후 곧바로 마지막 배열값 가져오기
// .기준으로 배열변환 후 마지막 배열값 가져오기
$r_ext = end(explode(".",$file_name));
// 2번 배열1차로 변환 후 해당배열의 마지막 값을 제거하고 리턴
// . 기준으로 나눠서 배열로 변환
$bbb = explode(".",$file_name);
// $bbb의 마지막 배열값을 제거하고 리턴
$aaa = array_pop($bbb);
echo $aaa; // $aaa == $r_ext
echo $r_ext; // $r_ext == $aaa
?>
ㄴ 파일명, 확장자 변수 생성 및 가공
ㄴ explode() - 문자열을 특정 구분자로 나누어서 배열로 변환하는 함수
ㄴ end() - 배열의 마지막 요소를 가져온다.
ㄴ array_pop() - 배열의 마지막 요소를 제거하고, 제거한 값을 리턴해주는 함수
※ 2가지 방법으로 확장자를 가져올 수 있고 편한 방법을 사용하면된다.
ㄴ 해당 변수 값 확인.
<?php
// 파일 테이블에 첨부파일 저장
$sql = "
INSERT INTO files_table
( r_name, name, r_ext, ext, size )
VALUES
( '{$file_name}', '{$testname}', '{$r_ext}', '{$ext}', '{$size}' )
";
// php 문법으로 mysql 데이터입력시 php변수를 넣고 중괄호{}를 넣고 따옴표로 감싸줘야한다.
// 위에서 가공한 변수들을 사용하여 각각의 컬럼에 값을 넣어준다.
$result = $conn->query($sql); // 객체지향
?>
ㄴ 객체지향으로 query함수 사용
ㄴ query() - mysql 쿼리를 실행시켜주는 함수이다.
ㄴ $conn은 db연결변수로 $result db연결 후 쿼리 실행하는 함수이다.
<?php
require_once 'config.php'; // 설정파일 넣기.( DB연결구문 들어가 있음.)
$file_name = $_FILES['files']['name']; // 업로드 파일명 변수
$upload = $_FILES['files']['tmp_name']; // 파일 임시저장소 변수 선언.
// 파일 정보 유무 체크
if($upload){
$checkdir = is_dir("files"); // 폴더 존재체크
// 폴더 존재여부 조건문
if($checkdir){
// 폴더 존재시 바로 파일 업로드 진행
echo "폴더가 존재합니다. 파일 업로드 진행합니다.<br>";
}else{
// 폴더 존재 하지 않을 경우 폴더 생성
echo "폴더가 존재하지 않습니다. 새로 생성합니다.<br>";
$folder = mkdir("files", 0777); // 폴더 생성 함수(폴더경로 , 폴더권한)
if (!$folder) {
die("폴더 생성 실패");
}else{
echo "폴더 생성 성공.<br>";
}
}
$testname = date("Y-m-d H:i:s")."_moonddev"; // 임의 파일명.
$file_path = "files/".$file_name; // 파일넣기
// 서버에 저장된 임시파일 실제 폴더로 업로드.
$upload_file = move_uploaded_file($upload, $file_path);
if (!$upload_file) {
die("파일 업로드 실패");
}else{
echo "파일업로드 성공.<br>";
// $_FILES 속성의 확장자 변수
$ext = $_FILES['files']['type'];
// 업로드 파일명에서 확장자 추출 변수
$r_ext = end(explode(".",$file_name));
// $_FILES 속성의 파일크기 변수
$size = $_FILES['files']['size'];
// 파일 테이블에 첨부파일 저장
$sql = "
INSERT INTO files_table
( r_name, name, r_ext, ext, size )
VALUES
( '{$file_name}', '{$testname}', '{$r_ext}', '{$ext}', '{$size}' )
";
$result = $conn->query($sql); // 객체지향
echo "<img src='/files/$file_name'>";
}
}else{
die("파일을 다시 확인하세요.");
}
?>
ㄴ 최종코드
ㄴ 업로드 완료
ㄴ 테이블에 파일저장 완료