몽상실현개발주의

[생활코딩] 11.5 파일 업로드를 위한 form ~ 11.7 파일 업로드 - 수신 Application 본문

Language/php

[생활코딩] 11.5 파일 업로드를 위한 form ~ 11.7 파일 업로드 - 수신 Application

migrationArc 2021. 5. 13. 18:32

[생활코딩] 11.5 파일 업로드를 위한 form ~ 11.7 파일 업로드 - 수신 Application

생활코딩 php 강좌

11. 파일

11.5 파일 업로드를 위한 form

<html>
    <body>
        <form method="POST" action="1.php" enctype="multipart/form-data">
            <input type="hidden" value="30000" name="MAX_FILE_SIZE">
            <input type="file" name="userfile">
            <input type="submit" value="upload">
        </form> 
    </body>
</html>

 

 

11.6 파일 업로드 시 HTTP REQUEST

  • Request Format
    • method : POST
    • content-type : multipart/form-data
      • data 전송의 encoding 을 multipart/form-data 로 함
    • content-Dispotion : 전송할때 설정 했던 사항들, 내용이 담김
      • 파일의 경우 2진수로 변환되어 담겨짐
  • 요청 결과
    • php Application 이 처리
    • 처리 결과를 Appatch 가 client에 전송
    • Response : html 문서

 

 

 

11.7 파일 업로드 - 수신 Application

<html>
    <body>
        <form method="POST" action="1.php" enctype="multipart/form-data">
            <input type="hidden" value="30000" name="MAX_FILE_SIZE">
            <input type="file" name="userfile">
            <input type="submit" value="upload">
        </form> 
    </body>
</html>
  • file upload page
// 1.php
<html>
    <head>
        <meta charset="utf-8">
    </head>
    <body>
        <?php
        ini_set("display_errors", "1");
        $uploaddir = '\Users\leejuho\Sites\studyPhp\upload\file\\';
        $uploadfile = $uploaddir . basename($_FILES['userfile']['name']);
        echo '<pre>';
        if (move_uploaded_file($_FILES['userfile']['tmp_name'], $uploadfile)){
            echo "파일이 유효하고, 성공적으로 업로드 되었습니다.";
        }else{
            print "파일 업로드 공격의 가능성이 있습니다!\n";
        }
        echo '자세한 디버깅 정보 입니다:';
        print_r($_FILES);
        echo '</pre>';
        ?>
        <img src="file/<?=$_FILES['userfile']['name']?>">
        
    </body>
</html>
  • ini_set() : php 설정을 runtime 으로 지정
    • runtime 설정이 아닐 시, php.ini 에서 지정된 설정으로 실행
    • ini_set("display_errors", "1") : desplay_errors 옵션을 On
  • $_FILES 변수 안에 upload 된 file 정보가 저장됨
  • $uploaddir : 임시 디렉토리에서 옮겨서 저장할 디렉토리 경로 지정
  • $uploadfile : "파일이 저장되어야 할 위치 + 파일명" 까지 파일 전체 경로
    • basename(파일 명) : 문자열에서 경로를 표시하는 부분을 없애고 파일명만 추출 하는 함수
    • 보안을 위하여 파일을 가져다 사용 할 때, 꼭 사용해야 함
      • 파일 이름에 경로 정보가 포함되어 있으면 잠재적으로 보안 이슈가 발생할 수 있음
  • move_uploaded_file(임시 저장 파일 명, 저장될 파일 경로) : 임시 저장된 파일을 실제 파일 디렉토리로 이동하여 저장하는 함수

 

<html>
  <head>
    <meta charset="utf-8">
  </head>
  <body data-new-gr-c-s-check-loaded="14.1010.0" data-gr-ext-installed="">
    <text>
      array(1) {
      	["userfile"]=>
      	array(5) {
      		["name"]=>
      		string(9) "image.png"
      		["type"]=> string(5) "image/png"
      		["tmp_name"]=>
      		string(26) "/private/var/tmp/phpNb94zz"
      		["error"]=>
      		int(0)
      		["size"]=>
      		int(14005)
      	}
      }
    </text>
  </body>
</html>
  • $_FILES
    • file 이 복수가 전송 될 수 있기 때문에, Array (연관 배열) 형태를 취함
    • userfile : html form 에서 지정한 input 의 name
    • name : file 이름
    • type : file type
    • tmp_name : 임시 저장 파일 이름 명
      • client 에서 server 로 file 을 전송하면 자동으로 server 의 임시 directory 안에 저장됨
      • 임시 directory 안에 저장된 file 을 프로그래밍 적으로 이동 시켜야 저장이 완료 됨
    • error : file upload 중 발생하는 error 출력
    • size : upload 된 file size

 

 

 


이 글의 모든 사진과 내용의 출처는 생활코딩에 있음을 알려드립니다.

http://www.inflearn.com/course/%EC%83%9D%ED%99%9C%EC%BD%94%EB%94%A9-php-%EA%B0%95%EC%A2%8C/lecture/230?tab=note

 

생활코딩 - PHP 기본 A 부터 Z 까지 - 인프런 | 학습 페이지

지식을 나누면 반드시 나에게 돌아옵니다. 인프런을 통해 나의 지식에 가치를 부여하세요....

www.inflearn.com

 

Comments