- php.ini -> file_upload=On; 변경
- file_upload_form.php
<html>
<head>
<title>FileUploadForm</title>
</head>
<body>
<h1>FileUploadExample</h1>
<form action="./file_upload.php"enctype="multipart/form-data"method='post'>
<inputtype='file'name='myfile'>
<button>보내기</button>
</form>
</body>
</html>
3. file_upload.php
<?php
//설정시작
$uploads_dir='./uploads';
$allowed_ext=array('jpg','jpeg','png','gif');
$field_name='myfile';
//uploads디렉토리가없다면생성
if(!is_dir($uploads_dir)){
if(!mkdir($uploads_dir,0777))
{
die("업로드디렉토리생성에실패했습니다.");
};
}
if(!isset($_FILES[$field_name]))
{
die("업로드된파일이없습니다.");
}
//변수정리
$error=$_FILES[$field_name]['error'];
$name=$_FILES[$field_name]['name'];
//오류확인
if($error!=UPLOAD_ERR_OK){
switch($error){
caseUPLOAD_ERR_INI_SIZE:
caseUPLOAD_ERR_FORM_SIZE:
echo"파일이너무큽니다.($error)";
break;
caseUPLOAD_ERR_PARTIAL:
echo"파일이부분적으로첨부되었습니다.($error)";
break;
caseUPLOAD_ERR_NO_FILE:
echo"파일이첨부되지않았습니다.($error)";
break;
caseUPLOAD_ERR_NO_TMP_DIR:
echo"임시파일을저정할디렉토리가없습니다.($error)";
break;
caseUPLOAD_ERR_CANT_WRITE:
echo"임시파일을생성할수없습니다.($error)";
break;
caseUPLOAD_ERR_EXTENSION:
echo"업로드불가능한파일이첨부되었습니다.($error)";
break;
default:
echo"파일이제대로업로드되지않았습니다.($error)";
}
exit;
}
$upload_file=$uploads_dir.'/'.$name;//저장될디렉토리및파일명
$fileinfo=pathinfo($upload_file);//첨부파일의정보를가져옴
$ext=strtolower($fileinfo['extension']);
$i=1;
while(is_file($upload_file))
{
$name=$fileinfo['filename']."-{$i}.".$fileinfo['extension'];
$upload_file=$uploads_dir.'/'.$name;
$i++;
}
if(!in_array($ext,$allowed_ext)){//확장자확인
echo"허용되지않는확장자입니다.";
exit;
}
if(!move_uploaded_file($_FILES[$field_name]['tmp_name'],$upload_file)){//파일이동
echo"파일이업로드되지않았습니다.";
exit;
}
?>
<html>
<head>
<title>FileUpload</title>
</head>
<body>
<h1>FileUploadExample</h1>
<h2>파일정보</h2>
<ul>
<li>파일명:<?phpecho$name;?></li>
<li>확장자:<?phpecho$ext;?></li>
<li>파일형식:<?phpecho$_FILES[$field_name]['type'];?></li>
<li>파일크기:<?phpechonumber_format($_FILES[$field_name]['size']);?>바이트</li>
</ul>
<ahref="./file_download.php?file=<?phpecho$name;?>">다운로드</a>
</body>
</html>
※ move_uploaded_file($_FILES['attachment']['tmp_name'], $file)
: move_uploaded_file는 서버 파일을에 업로드해주는 함수
: $_FILES['input']에서 가져온 ['name값']['tmp_name'] 여기서 'tmp_name'는 임시파일명을 지정해주는것이다. 꼭 'tmp_name'를 쓸것
: $file에는 업로드할 경로와 업로드할 파일명을 합쳐 올린다.
ex) 업로드할 경로는 uploads/ 이고, 업로드할 파일명은 test.txt일경우
uploads/test.txt를 만들어올린다. (따라서 'uploads/test.txt' 이렇게 쓰라는 말임)
[error] 업로드 디렉토리 생성에 실패했습니다.
=> 서버에 업로드 파일 생성해줘야한다.
root@choi-VirtualBox:/usr/local/apache24/htdocs# mkdir uploads
[error] 파일이 업로드 되지 않습니다. move_uploaded_file
=> 파일 권한을 부여해야한다.
root@choi-VirtualBox:/usr/local/apache24/htdocs# chmod 777 uploads // 권한 부여
/// 777 : 사용자, 그룹, 다른 사용자의 모든 권한을 추가한다.
root@choi-VirtualBox:/usr/local/apache24/htdocs# ls -l // 권한 확인
-> 적용되려면 아파치 재시작해야함
'APM' 카테고리의 다른 글
[Linux] configure, make, make install 개념 (0) | 2020.01.30 |
---|---|
[PHP] 쿠키와 세션 (0) | 2020.01.30 |
[error] 533 could not create file (0) | 2020.01.23 |
[error] 아파치 재시작 시 오류 (0) | 2020.01.23 |
VM(Virtual Machine)이란? (0) | 2020.01.22 |