풀소스는 아래와 같다. 이 소스는 확인을 거친 소스이다. 만약에 실행이 안되면,
지금 사용하는 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>