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" 라고 하는 폴더에 파일을 복사 합니다.
'PHP' 카테고리의 다른 글
39. PHP FCM 메세지 PHP로 보내기 (0) | 2021.09.14 |
---|---|
38. PHP PhpSpreadsheet 설치하기 & 예제 코드 (0) | 2021.09.09 |
36. PHP PDO의 bindParam과 bindValue의 차이 (0) | 2021.08.05 |
35. PHP 비밀번호 암호화&복호화 password_hash, password_verify (0) | 2021.08.03 |
34. PHP PDO insert, update, delete 한 행 수 확인하기 (0) | 2021.07.29 |