PHP File Upload
PHP 를 사용해서 파일을 서버에 업로드하는 것이 가능하다.
Create an Upload-File Form
사용자들이 폼으로 파일을 업로드 할수 있도록 하는 것은 매우 유용할 수 있습니다.
파일을 업로드하기 위한 다음의 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>
위의 HTML form에 대해 다음의 사항들을 주목하시오:
- <form> 태그의 enctype 속성은 폼을 제출할 때 사용할 콘텐츠-형식(content-type) 을 지정합니다. "multipart/form-data" 는 업로드할 파일의 내용처럼, 폼이 이진데이터를 요구할 때 사용됩니다.
- <input> 태그의 type="file" 속성은 입력이 파일로 처리됨을 지정합니다. 예를 들어, 브라우져에서 볼 때, 입력 버튼 다음에 브라우즈-버튼(browse-button)이 온다.
Note: 사용자가 파일을 업로드 하도록 허용하는 것은 큰 보안 위험이 따른다. 신뢰할 수 있는
사용자에게만 파일 업로드를 허용하십시요.
Create The Upload Script
"upload_file.php" 파일은 파일 업로드를 위한 코드를 포합한다. :
<?php
if (isset($_FILES)) {
$file = $_FILES["file"];
// print_r($file);
$error = $file["error"];
$name = $file["name"];
$type = $file["type"];
$size = $file["size"];
$tmp_name = $file["tmp_name"];
if ( $error > 0 ) {
echo "Error: " . $error .
"<br>";
}
else {
echo "Upload: " . $name .
"<br>";
echo "Type: " . $type . "<br>";
echo "Size: " . ($size/1024/1024) . "
Mb<br>";
echo "Stored in: " . $tmp_name;
}
}
else {
echo "File is not selected";
}
?>
전역 PHP $_FILES 배열을 사용하여, 클라이언트 컴퓨터로부터 원격 서버에 파일을 업로드 할 수 있습니다.
첫 번째 파라메터는 폼의 input name 이며, 두 번째 인덱스는 "name", "type", "size", "tmp_name" 또는 "error" 중의 하나가 올 수 있다, 다음 처럼 :
- $_FILES["file"]["name"] - the name of the uploaded file
- $_FILES["file"]["type"] - the type of the uploaded file
- $_FILES["file"]["size"] - the size in bytes of the uploaded file
- $_FILES["file"]["tmp_name"] - the name of the temporary copy of the file stored on the server
- $_FILES["file"]["error"] - the error code resulting from the file upload
이것은 파일을 업로드하는 간단한 방법입니다. 보안상의 이유로 어떤 사용자가 업로드할 수 있는지를 제한하는 것을 추가 해야 합니다.
Restrictions on Upload
이 스크립트에서는 파일 업로드에 몇 가지 제한을 추가 합니다. 사용자는 .gif, .jpeg, 과 .png 파일을 업로드 할 수 있습니다. ; 그리고 파일의 크기는 2 Mb 미만이여야 합니다.:
<?php
$allowedExts = array("gif", "jpeg", "jpg", "png");
if (isset($_FILES)) {
$file = $_FILES["file"];
$error = $file["error"];
$name = $file["name"];
$type = $file["type"];
$size = $file["size"];
$tmp_name = $file["tmp_name"];
if ( $error > 0 ) {
echo "Error: " . $error .
"<br>";
}
else {
$temp = explode(".",
$name);
// print_r($temp);
$extension = end($temp);
//echo $extension;
if ( ($size/1024/1024)
< 2.) && in_array($extension, $allowedExts) ) {
echo
"Upload: " . $name . "<br>";
echo "Type:
" . $type . "<br>";
echo "Size:
" . ($size/1024/1024) . " Mb<br>";
echo "Stored
in: " . $tmp_name;
}
else {
echo
($size/1024/1024) . " Mbyte is bigger than 2 Mb ";
echo
$extension . "format file is not allowed to upload ! ";
}
}
}
else {
echo "File is not selected";
}
?>
Saving the Uploaded File
위의 예제는 서버의 PHP temp 폴더에 업로드된 파일들의 임시 복사본을 생성합니다.
임시 복사본 파일들은 스크립트가 종료될 때 사라집니다. 업로드된 파일들을 저장하기 위해서는 다른 장소로 복사할 필요가 있습니다. :
<?php
$allowedExts = array("gif", "jpeg", "jpg", "png");
if (isset($_FILES)) {
$file = $_FILES["file"];
$error = $file["error"];
$name = $file["name"];
$type = $file["type"];
$size = $file["size"];
$tmp_name = $file["tmp_name"];
if ( $error > 0 ) {
echo "Error: " . $error .
"<br>";
}
else {
$temp = explode(".",
$name);
$extension = end($temp);
if ( ($size/1024/1024)
< 2. && in_array($extension, $allowedExts) ) {
//echo
"Upload: " . $name . "<br>";
//echo
"Type: " . $type . "<br>";
//echo
"Size: " . ($size / 1024 / 1024) . " Mb<br>";
//echo
"Stored in: " . $tmp_name;
if
(file_exists("upload/" . $name)) {
echo $name . " already exists. ";
}
else {
move_uploaded_file($tmp_name, "upload/" .
$name);
echo "Stored in: " . "upload/" . $name;
}
}
else {
echo
($size/1024/1024) . " Mbyte is bigger than 2 Mb ";
echo
$extension . "format file is not allowed to upload ! ";
}
}
}
else {
echo "File is not selected";
}
?>
위의 스크립트는 파일이 이미 존재 하는지 검사하여, 존재하지 않으면, "upload" 라고 하는 폴더에 파일을 복사 합니다.