[PHP] PHP 파일 업로드 / 받기 [파일 전송 / 파일 수신]
생활코딩 사이트에서 공부하며 정리한 내용입니다
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 로 나온다.
'IT > PHP Web JS CSS HTML..' 카테고리의 다른 글
[PHP] PHP 이미지에 글씨 넣기 (0) | 2016.01.21 |
---|---|
[PHP] GD 라이브러리 활성화 [GD Lib 사용하기] (0) | 2016.01.21 |
[PHP] PHP 디렉토리 제어 (0) | 2016.01.21 |
[PHP] PHP file 퍼미션 / 존재 확인 방법 (0) | 2016.01.21 |
[PHP] PHP file / Open / Read / Write / Close [기본Api] (0) | 2016.01.21 |