1. php.ini -> file_upload=On; 변경
  2. 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

+ Recent posts