728x90

1. ​a라는 파일을 선택한다.


2. 선택된 파일은 서버의 디렉토리에 업로드되고, 해당 파일의 내용이 아래와 같이 화면에 출력된다 --> abc

풀소스는 아래와 같다. 이 소스는 확인을 거친 소스이다. 만약에 실행이 안되면,

지금 사용하는​ php버전이 낮다거나, 디렉토리 설정을 잘못 해줬기 때문이다.

 

upload.html

<html>
<body>

//속성을 설정해서 서버에 폼 정보와 함께 파일이 전송된다는 것을 알려주다.
 <form action="upload.php" method="post" enctype="multipart/form-data"/>

  <div>

//업로드할 파일의 최대 크기를 설정하는 폼 필드가 있어야 한다. 서버에서도 설정해줄 수 있는 부분이다.

//만약 폼에서 사용된다면 폼 필드의 이름은 반드시, MAX_FILE_SIZE여야 한다. value값은 업로드 할 수 있는 파일의 바이트

//단위 크기이다. 지금 1000000은 대략1MB정도 된다.
   <input type="hidden" name="MAX_FILE_SIZE" value="1000000" />

   <label for="userfile">upload a file : </label>

//타입을 파일로 해야, 업로드 할 수 있수있다.

<input type="file" name="userfile" id="usefile" />
   <input type="submit" value="send file" />
  </div>
 </form>
</body>
</html>​

  • ​$_FILES['userfile']['tmp_name'] - 이 웹 서버에 임시로 저장된 파일의 위치
  • ​$_FILES['userfile']['name'​] - 사용자 시스템에 있을 때의 파일이름
  • ​$_FILES['userfile']['size'] - 파일의 바이트 크기
  • ​$_FILES['userfile']['type'] - MIME 타입을 가리킨다. ex) text/plain 이나 image/gif

upload.php​

​//대부분 오류검사하는 코드이다. 파일 업로드는 보안상 위험하기 때문에 가능한한 위험을 줄여야 한다.

//올린파일에 특정문자가 삽입되면, 서버상에서 특정한 동작을 할 수 있기 때문에, 항상 올린 파일을 검사해야한다.

<html>
<body>

<?php
if($_FILES['userfile']['error'] > 0) //오류코드 검사. 0이면 오류없음

{
 echo 'Problem: ';
 switch($_FILES['userfile']['error'])
 {
  case 1: echo 'File exceeded upload_max_filesize'; //업로드한 파일 사이즈가 php.ini에 설정한 값보다 클때
   break;
  case 2: echo 'File exceeded max_file_size'; //업로드한 파일 사이즈가 html에서 명시한 MAX_FILE_SIZE보다 클때
   break; 
  case 3: echo 'File only partially uploaded'; //부분 업로드만 되었을  때
   break;
  case 4: echo 'Cannot upload file: No temp directory specified'; //파일이 업로드 되지 않았을 때
   break;
  case 6: echo 'Cannot upload file: No temp directory specified';

 //php.ini에 임시 디렉터리가 지정되지 않았다(php 5.0.3부터 도입)
   break;
  case 7: echo 'Upload failed: Cannot write to disk';
   break;
 }
 exit;
}

if ($_FILES['userfile']['type'] != 'text/plain'){ //mime타입이 text가 아닐때..
 echo 'Problem : file is not plain text';
 exit;
}

//파일을 원하는 곳으로 옮긴다.(주의!! 스크림트가 끝날 때까지 파일을 옮기거나 이름을 바꿔주지 않으면 파일은 지워진다)
$upfile = './uploads/'.$_FILES['userfile']['name'];

//경로 설정을 알아서 잘해보세요~요부분 신기하네요. 문자열같은데 업로드를 한다니, 어쨌든 소스는 잘 돌아갑니다.
if(is_uploaded_file($_FILES['userfile']['tmp_name']))
{
 if(!move_uploaded_file($_FILES['userfile']['tmp_name'], $upfile))
 {
  echo 'Problem : Coult not move file to destination directory';
  exit;
 }
}
else
{
 echo 'Problem : Possible file upload attack. Filename : ';
 echo $_FILES['userfile']['name'];
 exit;
}

echo 'File uploaded successfully<br><br>';

$contents = file_get_contents($upfile);
$contents = strip_tags($contents);
file_put_contents($_FILES['userfile']['name'], $contents);

//업로드한 내용을 보여준다.
echo '<p>Priview of uploaded file contents:<br /><hr />';
echo nl2br($contents);
echo '<br /><hr />'
?>
</body>
</html>

[출처] php 파일업로드|작성자 SniperM

 

728x90

'WEB' 카테고리의 다른 글

php insert한 키 값 가져오기  (0) 2014.06.10
php에서 python 실행  (0) 2014.05.23
json 크로스 도메인 문제  (0) 2014.05.13
PHP JSON 설치  (0) 2014.05.13
자바스크립트에서 JSON 생성 후 JSP에서 파싱  (0) 2014.05.13

+ Recent posts