선생님을 위한 프로그래밍 수업

파일 업로드

토픽 선생님을 위한 프로그래밍 수업 > 웹 애플리케이션 만들기 > PHP
<!DOCTYPE html>
<html>
<head>
    <meta charset="utf-8"/>
</head>	
<body>
<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>
</body>
</html>
<!DOCTYPE html>
<html>
<head>
    <meta charset="utf-8"/>
</head>	
<body>
<?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>";
?>
</body>
</html>

댓글

댓글 본문
  1. 드림보이
    2022.01.19. 파일 - 파일 업로드 파트 수강완료
  2. ggyuker
    21.01.03 이해 잘 안됌
  3. heycfilm
    db에 파일 테이블을 만들고 파일이름 서버이름 url 이렇게 넣고 싶은데 가능할까요?
  4. 내가머더라
    파일 권한 변경을 chmod를 써서
    코드안에 어떻게 넣어야 정상적으로 작동할까요??

    print "파일 업로드 공격의 가능성이 있습니다!\n";
    이부분이 작동되서 업로드가 제대로 이루어지지 않거든요
  5. jeisyoon
    2021.07.27 File Upload - OK

    다소 어렵기는 했지만 Upload 성공하였습니다. 감사합니다.
    이미지 파일이 커서 Upload 가 안되면 MAX_FILE_SIZE value 를 0 로 set 하면 됨.

    <input type="hidden" name="MAX_FILE_SIZE" value="0" />
  6. 조총
    제가 댓글 달아 본 적은 한번도없는데요... 정말 힘들었습니다... 실패만 4시간을 하다가 인터넷이란 인터넷은 다뒤져보고 고생했네용

    이번 강의를 통해서 파일 경로를 진짜 거의 완벽하게 숙지하게 된 것 같습니다. 파일 경로 정보를 진짜 얼마나 찾아다녔는지 몰라유....
  7. 최건우
    2020.10.23 완료!
  8. 조우빈
    혹시나 파일이 깨지시는 분들은
    <img src="file/<? $_FILES['userfile']['name']?>"/> 이부분을
    <img src="file/<?php echo $_FILES['userfile']['name']?>"/>으로 변경해 보시길 바랍니다
  9. dhlee
    고수님들 혹시 이 예제에서 한글명으로 된 파일을 업로드할 수 있게 수정하는 방법은 없을까요??ㅠㅠ
  10. shin
    정상적으로 파일이 업로드 되는데 해당 폴더에서 업로드된 파일을 열려면 파일을 볼 권한이 없다고나와서
    chmod , chwon 모두 777 권한을 줘도 파일을 열수가 없네요
    보안문제로 막힌건가요??
    이유가 궁금합니다..
  11. choon
    감사합니다.
  12. 훈댕
    여러분 file 경로 폴더 꼭 만드세요
    $uploaddir = 'C:\BitNami\wampstack-5.4.20-0\apache2\htdocs\upload\file\\';
    위 경로는 손으로 치지 마시고 꼭 자기꺼 붙여넣으세요
  13. Young-Ki Kim
    저는 처음에 [error] 2가 나왔는데, MAX_FILE_SIZE에서 value에 엄청 큰 값을 넣으니까 업로드가 됩니다.
  14. 이채
    계속 실패로 떠서 댓글을 정독하며 하나하나 따라가다 보니 성공했습니다.
    먼저 error 2가 떠서 한참 헤맸는데, 파일 용량이 커서 그렇습니다.
    용량이 작은 파일을 업로드하거나 MAX_FILE_SIZE에서 value에 훨씬 큰 값을 넣으면(예제는 30000) 업로드 됩니다.

    둘째로 이미지가 안 뜨는 경우 / 제 경우 소스코드 경로가 잘못 입력되었습니다.
    <img src="file/<?=$_FILES['userfile']['name']?>" />
    여기에서 중간의 file이 명령어 비슷한 것인 줄 알았는데 그냥 파일명이었군요..
    저는 file 폴더를 따로 안 만들고 upload 파일 내에 1.php, 1.html 파일을 만들었었기에
    <img src="./<?=$_FILES['userfile']['name']?>"/> 로 변경했더니 맞게 작동했습니다.
    이 외에 jpg 파일이 아니거나, 파일명에 한글이 들어간 경우도 이미지가 안 뜬다고 하는군요..
  15. uploaddir을 본인 설정과 똑같이 만들어주면 됩니다.

    그럼 잘 됩니다. file디렉토리를 만드는거 잊지마시구요
  16. <input type="hidden" name="MAX_FILE_SIZE" value="30000" />

    에서 값을 30000에서 더 크게 늘려보세요. 다른 파일들도 될겁니다.
  17. 아마존드랍쇼핑운영자
    jpg만 되넹..
  18. 웅이
    저는 jpg파일은 안되고 png파일이나 txt파일은 되는데
    왜그런지 아시는분 계십니까~~~~
  19. 말봉
    업로드 파일의 확장자가 gif일 때만 true를 반환하고
    png와 jpg는 false를 반환하네요 훔...
  20. 안녕하세요
    다중 파일 업로드에 대한 내용도
    수업에 포함시켜 주세요!
  21. HongJu Shin
    hidden input 지우고 실행해보세요. 그래도 안 되면 file 디렉토리 이름의 f를 F로 바꿔서 실행해 보세요. 저도 같은 에러가 발생되었는데 위 방법처럼 하니까 업로드가 되네요. 저는 위에 두방법 다 사용해야 성공적으로 업로드가 되었는데 아마 주소 \file 중 \f 가 escape sequence로 인식되기 때문인 것 같기도 하네요.
    대화보기
    • Hyung Jun Choi
      한글파일명을 사용하실 경우에도 업로드가 정상적으로 이루어지지 않습니당 ㅎ
    • 코딩잘하고싶어요 ㅎ
      이게 굉장히 까다롭습니다. 저기 나와있는 코드 그대로 복제해서 여러분 에디터에 붙여넣기 하시면 100프로 오류 발생할걸요?? $uploaddir변수에 디렉토리 잘 점검하셔야 해요. 특히 htdocs\upload\file\ 이 부분 조심하셔야 해요.(upload 디렉터리 밑에 file디렉터리 없어도 오류 납니다.)
      그리고 닫히는 body태그 위에 img태그 써 주셔야 이미지가 나옵니다. "이미지가 안 나오고 파일 업로드 공격의 가능성이 있습니다." 이 부분이 나오는 이유는 아마 html파일에서 사이즈를 너무 작게 잡아서 그럴 가능성이 높습니다. 숫자 최대한 크게 하셔야합니다 .
    • Hyun Woo Lee
      열혈 강의 감사합니다.
      하지만 직접 코딩하는 중 한가지 문제점이 발생되었는데요.

      .txt와 .gif 형식의 파일으로 파일 업로드 시 프로그램이 정상적으로
      돌아가나, 이미지 파일의 경우 .jpg 형식으로 올렸을 때 error가 발생하네요
      .
      error 출력 시 max_file_size를 초과했다고 하는데, php.ini의 관련 설정을 변경해도
      동일한 error가 출력됩니다.

      어떠한 이유인지 알려주실 수 있나요!? 하루종일 메달리고 있네요...
    • shin
      파일을 업로드하는데 text파일은 업로드가 성공이 되는데 dng파일은 에러가 발생합니다
      파일 업로드 공격의 가능성이 있습니다!
      자세한 디버깅 정보입니다:Array
      (
      [userfile] => Array
      (
      [name] => 1.dng
      [type] =>
      [tmp_name] =>
      [error] => 2
      [size] => 0
      )

      이유를 모르겠습니다
    • 엽스
      다음 강의에 대해 질문 있습니다.
      위에 예제를 이용해서(1.html) 파일을 업로드 하고 1.php 서버로 전송 했을때

      다음과 같은 Warning이 출력 되고 file 폴더에는 임시 파일(C:\Windows/tmp/XXX.tmp)이 file 폴더에 복사 되있지 않은 문제 이더군요.
      권한 문제로 생각되어서 C:\Windows/tmp폴더도 권한을 다주고 file폴더에도 권한을 다주고 하물며
      bitnami Wamp Manager도 관리자 권한으로 실행해도 해결 되지 않더군요.

      도저히 원인을 찾지 못해서 글을 남김니다.

      참 항상 이고잉님 강의 잘 듣고 있습니다.^^ 감사합니다.

      (위닝메시지)
      Warning: move_uploaded_file(C:\Bitnami\wampstack-7.0.23-0\apache2\htdocs\PhpLecture\upload\file\20_플라스틱의자.jpg): failed to open stream: Invalid argument in C:\Bitnami\wampstack-7.0.23-0\apache2\htdocs\PhpLecture\upload\1.php on line 14

      Warning: move_uploaded_file(): Unable to move 'C:\Windows\Temp\phpC6C5.tmp' to 'C:\Bitnami\wampstack-7.0.23-0\apache2\htdocs\PhpLecture\upload\file\20_플라스틱의자.jpg' in C:\Bitnami\wampstack-7.0.23-0\apache2\htdocs\PhpLecture\upload\1.php on line 14
    • 송성태
      와, 정말 놀랐습니다.
      당연한듯 알았던 파일 업로드가 이렇게 복잡한 과정 위에서 실행되었군요.
      잘 봤습니다!
    • 최동희
      getcwd 함수를 이용해보는 건 어떨까 합니다. (테스트 해보진 못했어요, 제가 웹호스팅을 이용하지 않아서...)
      http://php.net......php
      대화보기
      • 다시시작
        일부 에러나서 다시 와서 봐야겠음. 일단 넘어감.
      • kimjs9105
        잘봣습니다~~ 감사합니다~~
      • sheis
        잘 봤어요^^
      • meek
        17-07-17 감사합니다.~
      • treehouse
        파일 섹션은 이전것들보다 어렵게 느껴졌다
        처음 코드만 봤을때는 이게뭔가싶고 길어서 그런지 이해조차 되지않았다

        하지만 하나하나 친절한 설명을 듣고나서 정말 너무나 심플한 코드였다는 생각이 들었다
        오늘도내일도 이고잉
      • 지나가던 행인
        바이트라고 하네요
        대화보기
        • 김세창
          문제점을 찾았다.

          원인 : $uploaddir = "C:\Bitnami\wampstack-7.1.0-1\apache2\htdocs\upload\file\\";

          이부분을 큰 따옴표로 되어있는데, 작은 따옴표로 바꾸니까. 잘 된다.
          또한 gif 파일만 된다.. 왜 그럴까.. 그거는 궁금하다.
        • JoonKoo Kim
          https://www.drupal.org......ini

          php,ini의 설정이 post최대용량을 상한해서 파일업로드가 안되는 것일 수 있습니다. 참고해보세요.
        • 지선
          헉 너무감사합니다!!
          대화보기
          • park
            디렉토리에 들어가서 업로드된 파일에 들어가면 권한이 없다고 뜨네요
          • park
            성공적으로 업로드가 되었는데 깨지네요.. 왜이런것일까
          • 웹호스팅할때
            $uploaddir 변수에 경로입력할때 드라이브명부터 정확하게 입력해야한다고 이해했는데,

            웹호스팅업체를 통해서 할때는 그 경로값을 어떻게 알수있죠?
          • 신입1
            감사합니다
          • 덜렁이
            마지막줄에 이미지가 보이기 위해서는 1.php와 2.html 파일이 file폴더 바로 윗단계에 있어야 이미지가 보입니다.
            두단계 위에 있다면 아랫단계 폴더 이름을 넣어줘야합니다.
          • supreme_dk
            서버에서 php.ini 파일을 수정해보세요
            대화보기
            • NamJin Kim
              아 위치를 잘못선정했네요 됬는데 액박뜨고 파일 저장 위치가 htdoc upload 파일로 되어 있더라고요
              이거 위치를 바꿀수 는 없는건가요?
            • 엑박
              <img src='file/<?=$_FILES['addfile']['name']?>"/>에서 src="file 이부분 file이 파일 이름인것같네요 영상에는 upload로 파일을 만들어서 그런것 같습니다 그대로 file 쓰면서 upload 파일 이름을 바꾸니까 제대로 나옵니다
            • 몇몇분도 말했듯이 모든 부분을 완벽하게 하셨는데 사진이 엑박이 뜨시는 분들 계실거에요!

              음 파일 이름이 한글이면

              예를 들면 사진.png 라는 파일이 디렉토리에 가면 .png 로
              파일이름이 한글일 경우 깨지는 것 같아요!

              다시 파일 이름을 영어로 바꾸면 엑박이 안뜨고 정상적으로 작동하긴 하는데.

              이 문제에 대해 어떻게 해결해야 할까요??
            • 이정일
              웹서비스 만들기 강좌를 듣다가 파일 업로드 기능을 추가 시켜 보았습니다.
              업로드된 파일이 서버에 잘 저장은 되는데 업로드된 파일을 페이지에 어떻게 노출시키고 다운받게 해야 할지 잘 몰라서 문의 드립니다.
              웹 서비스의 경우엔 글 작성시 title, author, description이 DB에 저장이되고 불러올 수 있는데 title 별 업로드된 파일들을 확인할 수 있고 다운받도록 하신 분이 계시다면 참고할 만한 내용을 알려주셨으면 좋겠습니다.

              학습하면서 개발자의 노력도 많이 알 수 있고 저 또한 분발해야 겠다는 생각이 드네요.
              egoing 님 좋은 강의 감사합니다. ^^
            • 흠치치
              파일크기의 해결법은 없나요??
            • 행인
              http://docs.php.net......php 이곳에 바이트로 측정한다고 나와있네요.
              대화보기
              • 행인
                MAX_FILE_SIZE 의 value 값은 단위가 어떻게 됩니까?

                바이트일리는 없고 킬로바이트 단위인가요??