[PHP] PHP 파일 업로드 / 받기 [파일 전송 / 파일 수신]

Posted by [하늘이]
2016. 1. 21. 21:25 IT/PHP Web JS CSS HTML..
반응형

생활코딩 사이트에서 공부하며 정리한 내용입니다

https://opentutorials.org/course/62/5136


◆ 파일 업로드하는 소스

1

2

3

4

5

<form enctype="multipart/form-data" action="1.php" method="POST">

 <input type="hidden" name="MAX_FILE_SIZE" value="30000" />

 <input name="userfile" type="file" />

 <input type="submit" value="upload" />

</form>


라인 1 : form 구문에서 어디로 정보를 보낼지를 나타내는 구문

   method 는 파일 전송이라서 post 이다.

   enctype[encoding type] 은 multipart/form-data 으로 해야 된다.

라인 2 : 업데이트 되는 파일의 Max 크기를 제한 한 것임.

   하지만, 사용자가 브라우져상에서 소스를 수정 시 변경이 되는 코드라서 이 코드로 방어 했다고

   생각하지 말고, PHP 설정 쪽에 변경을 해야 된다.  

   Type 이 hidden이라서 화면에는 보이지 않음.

   아래 쪽에 파일 컨트롤 소스보다 위쪽에 있어야 한다.

라인 3 : 전송하려는 파일 정의 하기 위한 컨트롤 정의


♠ 두개의 파일을 보내려는 경우 두개의 컨트롤을 넣으면 된다.

 <input name="userfile" type="file" />

  <input name="userfile2" type="file" />

대신 name은 다르게 해야 된다. name이 받는 쪽에서 구별 할 수 있는 키가 된다.


◆ 파일 수신 받는 쪽 소스

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

<?php

ini_set("display_errors", "1");

$uploaddir = 'C:\BitNami\wampstack-5.4.20-0\apache2\htdocs\upload\file\\';

$uploadfile = $uploaddir . basename($_FILES['userfile']['name']);

echo '<pre>';

if (move_uploaded_file($_FILES['userfile']['tmp_name'], $uploadfile)) {

   echo "파일이 유효하고, 성공적으로 업로드 되었습니다.\n";

} else {

    print "파일 업로드 공격의 가능성이 있습니다!\n";

}

echo '자세한 디버깅 정보입니다:';

print_r($_FILES);

print "</pre>";

?>

<img src="file/?$_FILES['userfile']['name']?>' />

$_FILES : 변수에는 상대가 보낸 파일이 전달되는 변수라는 것을 알아야 된다.

[http://php.net/manual/en/reserved.variables.files.php]


♤ 라인 2 : ini_set() 으로 php runtime 중에 설정을 하는 경우 사용한다.[php.ini]

   에러 발생을 확인하기 위한 설정 값을 1로 한 것임.

♤ 라인 3 : 저장하려는 파일 Dir 정보이고 Window 에서는 마지막에 \\ 두개가 있어야 한다.

♤ 라인 4 : 라인3의 경로에 보내온 파일 이름을 붙인다.

   여기서 파일 이름을 가져오기 위하여 userfile 이라는 키로 배열에서 가져온다.

   이것은 아래쪽 var_dump로 $_FILES 을 확인한 것을 보면 쉽게 이해가 된다.

   basename() 을 사용하면 마지막에 있는 파일 이름만 가져오게 된다.

   [http://php.net/manual/kr/function.basename.php]

♤ 라인 6 : temp 폴더에 있는 파일을 이동시키기 위한 코드이다.

   [move_uploaded_file () 함수 : move_uploaded_file — Moves an uploaded file to a new location

   http://php.net/manual/kr/function.move-uploaded-file.php]

   move_uploaded_file() 을 사용하는 이유는 PHP 에서 이동 시키려는 파일이 보안에 위배되는 파일인지

   체크하여 주는 기능이 내장되어 있다. 그래서 받은 파일을 이동 시킬 때는 이것을 사용해야 된다.

♤ 라인 12 : var_dump() API 와 유사한 기능의 함수로 내용을 표시한다.

♤ 라인 15 : img는 HTML 태그로 브라우져에서 해석한다.

   src 소스에 있는 파일을 다운로드 받아서 화면에 표시를 한다.


♠ 위 소스 위쪽에 $_FILES 를 출력해보면 아래와 같이 출력된다.

var_dump($_FILES);

아래 받은 것을 보면, 보낸는 쪽 form에서 name으로 지정한 userfile 로 나온다.


반응형