<?php
/*********************************************
* 넘어오는 데이터가 정상인지 검사하기 위한 절차
* 실제 페이지에서는 적용 X
**********************************************/
//$_FILES에 담긴 배열 정보 구하기.
var_dump($_FILES);
// php 내부 소스에서 html 태그 적용 - 선긋기
echo "<hr>";
/*********************************************
* 실제로 구축되는 페이지 내부.
**********************************************/
// 임시로 저장된 정보(tmp_name)
$tempFile = $_FILES['imgFile']['tmp_name'];
// 파일타입 및 확장자 체크
$fileTypeExt = explode("/", $_FILES['imgFile']['type']);
// 파일 타입
$fileType = $fileTypeExt[0];
// 파일 확장자
$fileExt = $fileTypeExt[1];
// 확장자 검사
$extStatus = false;
switch($fileExt){
case 'jpeg':
case 'jpg':
case 'gif':
case 'bmp':
case 'png':
$extStatus = true;
break;
default:
echo "이미지 전용 확장자(jpg, bmp, gif, png)외에는 사용이 불가합니다.";
exit;
break;
}
// 이미지 파일이 맞는지 검사.
if($fileType == 'image'){
// 허용할 확장자를 jpg, bmp, gif, png로 정함, 그 외에는 업로드 불가
if($extStatus){
// 임시 파일 옮길 디렉토리 및 파일명
$resFile = "./img/{$_FILES['imgFile']['name']}";
// 임시 저장된 파일을 우리가 저장할 디렉토리 및 파일명으로 옮김
$imageUpload = move_uploaded_file($tempFile, $resFile);
// 업로드 성공 여부 확인
if($imageUpload == true){
echo "파일이 정상적으로 업로드 되었습니다. <br>";
echo "<img src='{$resFile}' width='100' />";
}else{
echo "파일 업로드에 실패하였습니다.";
}
} // end if - extStatus
// 확장자가 jpg, bmp, gif, png가 아닌 경우 else문 실행
else {
echo "파일 확장자는 jpg, bmp, gif, png 이어야 합니다.";
exit;
}
} // end if - filetype
// 파일 타입이 image가 아닌 경우
else {
echo "이미지 파일이 아닙니다.";
exit;
}
?>
이렇게 코드를 작성해보았습니다.
.
이전 PHP 포스팅에서 $_POST 필드를 이용해 form 태그의 method가 post인 data를 가져온 것을 볼 수 있습니다.
즉, $_POST 필드는 요청 시 method 속성의 값이 post 방식인 데이터를 배열 형태로 가져온다는 것을 알 수 있습니다.
일반적인 데이터라면 $_POST 필드를 이용해 값을 가져왔겠지만, 파일 데이터는 조금 다릅니다.
$_FILES라는 필드를 이용해 파일에 대한 데이터 값을 배열로 가져옵니다.
자세한 내용을 설명드리기 위해 var_dump() 함수를 이용해 $_FILES 필드에 담긴 배열 데이터를 모두 print하였습니다.
(PHP에서 데이터를 체크하기 위해 자주 사용하는 함수이니 꼭 알아두세요!!)
실행된 예시 화면을 보면서 조금 더 상세하게 설명드릴게요ㅎㅎ
.
1) fileUploadRequest.html 실행
2) fileUploadRequest.html 페이지와 동일 경로 내 img 폴더 임의 생성
** 이미지가 업로드되는지 확인하기 위해 빈 폴더로 생성해 놓았습니다!
3) fileUploadRequest.html 페이지에서 "파일 선택" 버튼 클릭 후 첨부할 이미지 선택
4) fileUploadRequest.html 페이지에서 "업로드" 버튼 클릭 후 결과 확인
5) fileUploadResult.php 페이지에서 설정한 경로에 선택한 이미지가 업로드 되었는지 확인.
.
이런 식으로 테스트가 진행되었습니다.
1-3번 과정은 요청하는 페이지에 대한 과정이니 추가 설명을 생략하고, 바로 4번부터 상세하게 설명을 드리겠습니다.
fileUploadResult.php 소스 내 9번째 라인에서 "var_dump($_FILES);"로 체크한 부분을 통해