php 파일 업로드 tip / PHP

2012/06/20 17:17

복사 http://blog.naver.com/salmenia/100160703118


원본 내용: http://w3schools.com/php/php_file_upload.asp


 첫번째 파일 업로드 폼 만들기


폼 형식 업로드 파일을 사용자에게 허용하게 만들기 매우 유용할 것이다.


아래는 html 업로드 폼

 

<html>
<body>

<form action="upload_file.php" method="post"
enctype="multipart/form-data">
<label for="file">Filename:</label>
<input type="file" name="file" id="file" /> 
<br />
<input type="submit" name="submit" value="Submit" />
</form>

</body>
</html>


업로그 폼 태그 작성 유의 사항

● 폼태그의 "enctype" 속성에 폼태그에서 다른 페이지로 데이타를 전송 할 때 컨덴츠 타입을 명시한다.

  폼태그에서 이진 데이타(예를 들어 업로드 하기 위한 콘텐츠 파일) 사용 할 때  "multipart/form-data" 형식은

    사용된다.

● <input> 태그 속성 중 type="file"는 입력은 파일로 진행 되어야 한다.

  예를들어, 브라우저를 볼 때, 파일검색 버튼은 인풋 필드 옆에 있다.


참고: 파일을 업로드 하는 것은 큰 보안 리스크가 된다. 단지 신뢰 할 수 있는 사용자들만 파일 업로드를 허용한다.


 두번째 파일 업로드 스크립트 만들기


<?php
if ($_FILES["file"]["error"] > 0)
  {
  echo "Error: " . $_FILES["file"]["error"] . "<br />";
  }
else
  {
  echo "Upload: " . $_FILES["file"]["name"] . "<br />";
  echo "Type: " . $_FILES["file"]["type"] . "<br />";
  echo "Size: " . ($_FILES["file"]["size"] / 1024) . " Kb<br />";
  echo "Stored in: " . $_FILES["file"]["tmp_name"];
  }
?>


global PHP $_FILES 배열를 사용하므로써,  고객의 컴퓨터에서 리모트 서버로 파일을 업로드 할 수 있다.


첫번째 인수는 폼의 <input> 의 name 와 두번째 인덱스는 "name","type","size","tmp_name","error" 가 될 수 있다.


● $_FILES["file"]["name"] - 업로드 파일의 이름

● $_FILES["file"]["type"] - 업로드 파일의 타입

● $_FILES["file"]["size"] - 업로드 파일의 바이트 사이즈

● $_FILES["file"]["tmp_name"] -서버에 저장 되어 있는 임시 복사 본의 이름

● $_FILES["file"]["error"] - 파일 업로드부터 온 결과 값 (에러 코드)


 파일 업로드의 간단한 방법이다. 보안상의 이유로, 유저에게 허용하는것에  추가적인 제한을 해야 합니다.





 세번째 제한적인 업로드

위의 스크립터 안에서 파일 업로드에 몇 가지의 제한 조건을 추가 할 것 입니다.

고객은 오직 .gif 또는 .jpeg 파일 그리고 파일 사이즈가 20kb 용량 이하만 추가 가능 합니다.


<?php
if ((($_FILES["file"]["type"] == "image/gif")
|| ($_FILES["file"]["type"] == "image/jpeg")
|| ($_FILES["file"]["type"] == "image/pjpeg"))
&& ($_FILES["file"]["size"] < 20000))
  {
  if ($_FILES["file"]["error"] > 0)
    {
    echo "Error: " . $_FILES["file"]["error"] . "<br />";
    }
  else
    {
    echo "Upload: " . $_FILES["file"]["name"] . "<br />";
    echo "Type: " . $_FILES["file"]["type"] . "<br />";
    echo "Size: " . ($_FILES["file"]["size"] / 1024) . " Kb<br />";
    echo "Stored in: " . $_FILES["file"]["tmp_name"];
    }
  }
else
  {
  echo "Invalid file";
  }
?>


참고 익스플로우에서 jpg 파일을 인식시키기 위해셔는 반든시 jpeg가 되어야 한다. 파이어 폭스도 동일하다.





 넷째 업로드 파일 저장하기


위의 예제는 서버 안에 php 임시 폴더에 업로드 파일의 복사 본(원본은 클라이언트 컴퓨터 파일)을 만든다.


임시로 복사 된 파일은 스크립트가 끝이 날때 사라진다. 업로더 된 파일을 저장하기 위해서는 다른 저장 장소에 


그것을 복사해야 한다.


<?php
if ((($_FILES["file"]["type"] == "image/gif")
|| ($_FILES["file"]["type"] == "image/jpeg")
|| ($_FILES["file"]["type"] == "image/pjpeg"))
&& ($_FILES["file"]["size"] < 20000))
  {
  if ($_FILES["file"]["error"] > 0)
    {
    echo "Return Code: " . $_FILES["file"]["error"] . "<br />";
    }
  else
    {
    echo "Upload: " . $_FILES["file"]["name"] . "<br />";
    echo "Type: " . $_FILES["file"]["type"] . "<br />";
    echo "Size: " . ($_FILES["file"]["size"] / 1024) . " Kb<br />";
    echo "Temp file: " . $_FILES["file"]["tmp_name"] . "<br />";

    if (file_exists("upload/" . $_FILES["file"]["name"]))
      {
      echo $_FILES["file"]["name"] . " already exists. ";
      }
    else
      {
      move_uploaded_file($_FILES["file"]["tmp_name"],
      "upload/" . $_FILES["file"]["name"]);
      echo "Stored in: " . "upload/" . $_FILES["file"]["name"];
      }
    }
  }
else
  {
  echo "Invalid file";
  }
?>


파일이 이미 존재하는 지 위의 스크립트는 체크한다. 만약 같은 이름의 파일이 존재 하지 않는 다면,

그것을 명시된 폴더에 복사한다.


참고: 이 예제는 "upload" 라고하는 새로운 폴더에 저장한다.



+ Recent posts