2022. 10. 13. 21:50ㆍProgram/PHP
151_PHP 이미지 파일을 서버에 업로드하기 move_uploaded_file()
[요약]
- 이미지 파일을 서버에 업로드하는 함수 move_uploaded_file() 에 대해 알아보자.
앞에서 학습한 FORM 태그의 input 태그에서 type 속성의 값이 file 일 때 파일을 업로드할 수 있는 폼을 만드는 방법에 대해 알아본 바가 있다. 이번에는 서버에 파일을 전송하여 파일을 업로드 하는 방법에 대해서 알아보자.
우선 파일을 업로드 할 폼이 있는 페이지를 생성하자.
[예제: 154-1_fileUploadForm.php ]
<!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>파일 업로드 폼</title>
</head>
<body>
<form name="fileUpload" method="post" action="./154-2_imgUpload.php" enctype="multipart/form-data">
<input type="file" name="imgFile" />
<input type="submit" value="업로드" />
</form>
</body>
</html>
파일을 업로드하는 기능을 가진 폼이므로 form 태그에 enctype 속성을 사용하고 값으로 multipart/form-data를 사용한다.
파일을 업로드할 수 있도록 type 속성에 file을 작성한다. name 속성에는 imgFile을 사용했으므로 PHP에서 인덱스로 사용된다.
실행결과
다음으로 이미지 파일을 서버에 저장하는 방법에 대해 알아보자.
[예제 154-1]에서 form 태그에 method 속성으 값으로 post를 사용했다.
보통의 값은 PHP 의 배열 $_POST에 값이 대입되었다.
하지만 파일 전송 시에는 배열 $_FILES에 값이 대입되게 된다.
파일을 업로드했을때 배열 $_FILES에 어떠한 값을 갖는지 확인해보자.
다음은 var_dump()를 사용하여 배열 $_FILES의 값을 확인하는 예제이다.
[예제: 154-2_imgUpload.php ]
<?php
echo '<pre>';
var_dump($_FILES);
echo '</pre>';
?>
웹브라우저에 [154-1_fileUploadForm.php]를 실행하여 보유하고 있는 이미지 파일을 업로드한다.
이미지를 업로드하면 위 그림과 같이 파일에 대한 정보를 확인할 수 있다.
배열 $_FILE['imgFile']가 가지고 있는 정보를 보면 name 인덱스에 ironman.jpg 라는 업로드한 파일명이 존재하며, type 인덱스에는 image/jpeg가 존재한다. 이는 이미지 파일이고 확장자는 jpg임을 의미한다. 그리고 tmp_name 인덱스에는 우리가 업로드한 파일이 임시로 저장된 폴더와 파일명을 보여준다. 아직 서버에 업로드하는 프로그래밍은 하지 않았으나 이미 이 작업만으로 서버의 임시 파일을 저장하는 공간에는 파일이 업로드된 상태인것이다.
다음으로는 임시로 업로드된 파일을 원하는 장소에 옮기는 작이 필요하다.
이를 가능하게 해주는 함수는 move_uploded_file() 이다.
move_uploaded_filr()에는 두 개의 아규먼트가 들어간다.
첫 번째 아규먼트로 업로드한 파일의 임시 위치, 두 번째 아규먼트에는 옮길 위치 및 파일명이다.
move_uploaded_file($_FILES['imgFile']['tmp_name'], '/ironman.jpg');
다음은 업로드한 파일을 현재 작업중인 php 폴더로 저장하는 예제이다.
앞에서 생성한 [154-2_imgUpload.php] 파일을 다음과 같이 수정해보자.
[예제: 154-2_imgUpload.php ]
<?php
// 임시 저장된 정보
$myTempFile = $_FILES['imgFile']['tmp_name'];
// 파일명을 기존의 파일명을 그대로 쓰고 싶은 경우
$fileName = $_FILES['imgFile']['name'];
// 파일 타입 및 확장자 구하기
$fileTypeExtension = explode("/", $_FILES['imgFile']['type']);
// 파일 타입
$fileType = $fileTypeExtension[0];
// 파일 확장자
$extention = $fileTypeExtension[1];
// 확장자 검사
$isExtGood = false;
switch ($extention) {
case 'jpeg':
case 'bmp':
case 'gif':
case 'png':
$isExtGood = true;
break;
default:
echo "허용하는 확장자는 jpg, bmp, gif, png 입니다. - switch";
exit;
break;
}
// 이미지 파일이 맞는지 확인
if ($fileType == 'image') {
// 허용할 확장자를 jpg, bmp, gif, png로 정함, 그 외는 업로드 불가
if ($isExtGood) {
// 임시 파일 옮길 폴더 및 파일명
$myFile = "./{$fileName}";
// 임시 저장된 파일을 우리가 저장할 장소 및 파일명으로 옮김
$imageUpload = move_uploaded_file($myTempFile, $myFile);
// 업로드 성공 여부 확인
if ($imageUpload == true) {
echo "파일이 정상적으로 업로드 되었습니다. <br>";
echo "<img src='{$myFile}' width='200' />";
}
}
// 확장자가 jpg, bmp, gif, png가 아닐때
else {
echo "허용하는 확장자는 jpg, bmp, gif, png 입니다. - else";
exit;
}
}
// type이 image가 아닐때
else {
echo "이미지 파일이 아닙니다.";
exit;
}
?>
파일 업로드 성공시 해당 파일을 보여주도록 이미지 태그를 사용했다.이미지 태그는 웹페이지에 이미지를 표시할 때 사용하며, src 속성에 파일의 경로와 파일명을 입력한다.width는 크기를 지정하는 속성이며 원하는데로 변경이 가능하다.
실행결과
초보자를 위한 PHP 200제
김태영 지음 | 정보문화사
'Program > PHP' 카테고리의 다른 글
[PHP] 자바스크립트로 JSON 데이터 다루기 (0) | 2022.10.15 |
---|---|
[PHP] JSON이란... (0) | 2022.10.15 |
[PHP] 파일 내용 불러오기 fread() (0) | 2022.10.13 |
[PHP] textarea 태그의 내용을 파일에 저장하기 fwrite() (1) | 2022.10.13 |
[PHP] textarea 태그의 내용을 데이터베이스에서 불러오기 - 줄바꿈 대응 nl2br() (0) | 2022.10.13 |