[11] PHP - $_FILES로 파일 업로드

2024. 4. 22. 10:40PHP

728x90

[ 환경 ]
ㄴ php 7

※ 사용할 함수

ㄴ mkdir() - 폴더 생성 함수

ㄴ is_dir() - 폴더 존재 체크 함수

ㄴmove_uploaded_file() - 파일 업로드 함수

 

※ 프로세스

1. $_FILES속성 변수선언하여 조건문 생성($_FILES 정보 유무 체크)

2. 폴더 존재 체크(업로드 성공시)

3. 폴더 생성(같은 이름의 폴더가 없을 경우)

4. 파일 업로드 진행

 

※ 특이사항

1. DB와 연동하여 저장은 하지 않고, 서버에 업로드만 하는 코드로 구성

2. 단건의 파일만 업로드가 되며, 다건의 파일은 추후에 예정

3. 현재는 실제 파일명을 그대로 업로드하며, 추후에 임의의 파일명을 규칙을 지정하여 업로드 예정

 


1. 파일 업로드 php파일 코드확인

ㄴ 세팅한 폼에서 진행 https://kuk1938.tistory.com/43

 

[10] PHP - $_FILES란?

[ 환경 ] ㄴ php 7 ※ $_FILES ㄴ PHP 버전 4.1.0부터 사용 가능한 전역변수이다. ㄴ 공식 URL : https://www.php.net/manual/en/reserved.variables.files.php PHP: $_FILES - Manual Error code returned in $_FILES['userfile']['error'].■UPLOAD

kuk1938.tistory.com

 

<?php 

	$file_name = $_FILES['files']['name']; // 업로드 파일명 변수
	$upload = $_FILES['files']['tmp_name']; // 파일 임시저장소 변수 선언.

	// 1. 파일 정보 유무 체크
	if($upload){
		$checkdir = is_dir("files"); // 2. 폴더 존재체크
	}else{
		die("파일을 다시 확인하세요.");
	}

?>

1. $_FILES 속성에서 'tmp_name'을 변수로 선언하고 해당 변수로 조건문 생성

ㄴ form태그에서 파일 정보가 정상적으로 넘어왔는지 체크.

2. 파일정보가 정상일때 is_dir()함수를 사용 파일존재유무를 체크한다.

ㄴ 사용법 : is_dir(폴더명)

 

<?php 


	$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>";
			}
		}
	}else{
		die("파일을 다시 확인하세요.");
	}

?>

 

3. 폴더가 존재할 경우 - 바로 파일업로드 / 폴더가 존재하지 않을경우 - 폴더 생성

ㄴ mkdir()함수 사용 폴더생성 - mkdir(폴더경로, 폴더권한) 

 

<?php 
	$file_name = $_FILES['files']['name']; // 업로드 파일명 변수
	$upload = $_FILES['files']['tmp_name']; // 파일 임시저장소 변수 선언.

	// 파일 정보 유무 체크 
	if($upload){
		$file_path = "files/".$file_name; // 파일넣기
		$upload_file = move_uploaded_file($upload, $file_path); // 서버에 저장된 임시파일 실제 폴더로 업로드.
		// 
		if (!$upload_file) {
		    die("파일 업로드 실패");
		}else{
			echo "파일업로드 성공.<br>";
		}
	}else{
		die("파일을 다시 확인하세요.");
	}
?>

4. 파일 업로드 - 성공 유무로 조건문 생성

ㄴ move_uploaded_file()함수 사용 - move_uploaded_file(서버에 임시저장된 파일경로, 이동시킬 파일 경로)

ㄴ 서버에 임시저장된 파일의 경로를 옮기는 함수이다.
서버에 임시저장된 파일은 사용자가 확인 불가능하며, 실제 파일 경로로 옮기면서 확인 가능할 수 있게 한다.

 

<?php 
	// $_FILES 존재유무에 따른 조건문
	if($_FILES){
		// input에 name=files로 값을 주어 files를 기준으로 정보를 출력
		// $_FILES의 각각의 속성을 활용하려면 input의 name값을 지정해서 가져와야함. 
		// $_FILES의 형태가 배열로 담기고 해당 배열의 이름을 지정해서 가져오지 않으면 각각의 값은 출력하지 못한다.
		// 또한 특정 속성을 변수로 선언하려면 마찬가지로 배열을 지정하고 불러와야한다.

		echo "<br> [ 업로드 파일 정보 ]";
		echo "<br> 업로드파일명 : ".$_FILES['files']['name'];
		echo "<br> 확장자 : ".$_FILES['files']['type'];
		echo "<br> 임시저장소 : ".$_FILES['files']['tmp_name'];
		echo "<br> 에러코드 : ".$_FILES['files']['error'];
		echo "<br> 용량 : ".$_FILES['files']['size']."<br>";
	}else{
		die("파일 없음."); // $_FILES의 정보X : 파일 없음 텍스트 출력
	}
    // ---------------- 위 출력문은 $_FILES의 속성 확인용도로 삭제해도됨 -------------------

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

		$file_path = "files/".$file_name; // 파일넣기
		$upload_file = move_uploaded_file($upload, $file_path); // 서버에 저장된 임시파일 실제 폴더로 업로드.
		// 
		if (!$upload_file) {
		    die("파일 업로드 실패");
		}else{
			echo "파일업로드 성공.<br>";
			echo "<img src='/files/$file_name'>";
		}


	}else{
		die("파일을 다시 확인하세요.");
	}

?>

[ 최종 코드 ]

ㄴ input name값으로 배열 이름을 지정해서 해당배열 이름 기준으로 각각의 $_FILES 속성을 사용한다.

ㄴ 업로드 성공시 img태그로 해당 페이지에서 바로 노출되는지 확인하도록 작성

※ 보통은 이미지 태그를 업로드 페이지에서 사용하지 않으며, 같이 확인하기 위해 작성한 코드.

 

 

 

ㄴ 폴더가 없을 경우 - 업로드 성공 출력문

ㄴ 폴더가 존재할 경우 - 업로드 성공 출력문

ㄴ 파일질라에서 서버에 테스트1, 테스트2 이미지가 생긴것을 확인할 수 있다.

ㄴ 폴더명도 동일하게 생성된 것을 확인할 수 있다.

728x90

'PHP' 카테고리의 다른 글

[13] PHP - CURL 실제활용  (0) 2024.05.06
[12] PHP - $_FILES로 파일 업로드_2 (DB저장)  (0) 2024.04.23
[10] PHP - $_FILES란?  (0) 2024.04.21
[9] PHP - CURL 사용법  (2) 2024.04.18
[8] PHP - $_GET 사용법  (0) 2024.04.16