English | 简体中文 | 繁體中文 | Русский язык | Français | Español | Português | Deutsch | 日本語 | 한국어 | Italiano | بالعربية
이 튜토리얼에서는 PHP를 사용하여 파일을 원격 웹 서버에 업로드하는 방법을 배울 수 있습니다.
이 튜토리얼에서는 간단한 HTML 폼과 PHP를 사용하여 원격 서버에 파일을 업로드하는 방법을 배웁니다. 이미지, 비디오, ZIP 파일, Microsoft Office 문서, PDF, 실행 파일 및 다양한 파일 유형을 업로드할 수 있습니다.
아래 예제는 파일을 업로드할 수 있는 간단한 HTML 폼을 생성합니다.
!DOCTYPE html> <html> <head> <meta charset="UTF-8> <title>File Upload Form</title> </head> <form action="upload-manager.html" method="post" enctype="multipart/form-data"> <h2>Upload File</h2> <label for="fileSelect">Filename:</label> <input type="file" name="photo" id="fileSelect"> <input type="submit" name="submit" value="Upload"> <p><strong>Note:</strong>및.jpg, .jpeg, .gif, .png 형식만 허용하고, 최대 크기는5 MB.</p> </form> </html>
주의:제외하고도파일 선택필드 외에도 업로드 폼은HTTP post메서드를 사용해야하며, "enctype="multipart/form-data" 속성. 이 속성은 폼 데이터를 다중 MIME 데이터로 인코딩하여 많은 이진 데이터(예: 이미지, 오디오, 비디오 등)를 업로드하는 데 필요합니다.
아래는 우리의 "Upload-manager.php 파일의 전체 코드입니다. 이 코드는 업로드된 파일을 "upload" 폴더에 영구적으로 저장하고, 파일 유형과 파일 크기와 같은 기본 보안 검사를 수행하여 사용자가 올바른 파일 유형을 업로드하도록 하며, 허용된 제한 내에 업로드할 수 있도록 합니다.
<?php //폼이 제출되었는지 확인합니다 if($_SERVER["REQUEST_METHOD"] == "POST"){ // 파일이 성공적으로 업로드되었는지 확인합니다 if(isset($_FILES["photo"]) && $_FILES["photo"]["error"] == 0){ $allowed = array("jpg" => "image"}/jpg", "jpeg" => "image/jpeg", "gif" => "image/gif", "png" => "image/png"); $filename = $_FILES["photo"]["name"]; $filetype = $_FILES["photo"]["type"]; $filesize = $_FILES["photo"]["size"]; // 파일 확장자를 확인하세요 $ext = pathinfo($filename, PATHINFO_EXTENSION); if(!array_key_exists($ext, $allowed)) die("오류: 유효한 파일 형식을 선택하세요."); // 파일 크기를 확인하세요-최대5MB $maxsize = 5 * 1024 * 1024; if($filesize > $maxsize) die("오류: 파일 크기가 허용된 제한을 초과합니다."); // 파일의 MIME 타입을 확인하세요 if(in_array($filetype, $allowed)){ // 업로드 전 파일이 존재하는지 확인하세요 if(file_exists("upload/" . $filename)){ echo $filename . " 파일이 이미 존재합니다."; } else { move_uploaded_file($_FILES["photo"]["tmp_name"], "upload/" . $filename); echo "업로드된 파일이 성공적으로 저장되었습니다."; } } else { echo "오류: 파일을 업로드하는 중 문제가 발생했습니다. 다시 시도해 주세요."; } } else { echo "Error: " . $_FILES["photo"]["error"]; } } ?>
주의:위 스크립트는 같은 폴더에 존재하는 파일과同名의 파일을 업로드하지 않도록 방지합니다. 하지만 이를 허용하고 싶다면 파일 이름 앞에 랜덤 문자열이나 타임스탬프를 추가하면 됩니다. 예를 들어 $filename = time() . '_' . $_FILES["photo"]["name"];
이 코드가 무엇에 대해 다루고 있는지 궁금해할 수 있습니다. 좋습니다, 이 예제 코드의 각 부분을 차례로 살펴보겠습니다. 이를 통해 이 과정을 더 잘 이해할 수 있습니다.
폼이 제출되면, 업로드된 파일에 대한 정보는 PHP의 전역 배열 $_FILES를 통해 접근할 수 있습니다. 예를 들어, 우리의 업로드 폼에는 "photo"라는 이름의 파일 선택 필드(즉, name = "photo")가 포함되어 있으며, 사용자가 이 필드를 통해 파일을 업로드하면, 이름, 타입, 크기, 일시적인 이름, 또는 업로드 시 발생한 오류와 관련된 세부 정보를 얻을 수 있습니다. 예를 들어 다음과 같이:
$_FILES["photo"]["name"] — 이 배열 값은 파일의 원래 이름을 지정합니다. 파일 확장명을 포함하며, 파일 경로는 포함되지 않습니다.
$_FILES["photo"]["type"] — 이 배열 값은 파일의 MIME 타입을 지정합니다.
$_FILES["photo"]["size"] — 이 배열 값은 파일 크기를 바이트 단위로 지정합니다.
$_FILES["photo"]["tmp_name"] — 이 배열 값은 일시적인 이름을 지정합니다. 파일이 서버에 업로드된 후 즉시 할당된 파일의 전체 경로를 포함합니다.
$_FILES["photo"]["error"] — 이 배열 값은 파일 업로드와 관련된 오류 또는 상태 코드를 지정합니다. 예를 들어, 오류가 없으면 0입니다.
이 예제에서 PHP 코드는 업로드된 파일의 상세 정보를 표시하고 웹 서버의 일시적인 디렉토리에 저장합니다.
<?php if($_FILES["photo"]["error"] > 0) { echo "에러: " . $_FILES["photo"]["error"] . "<br>"; } else { echo "파일 이름: " . $_FILES["photo"]["name"] . "<br>"; echo "파일 타입: " . $_FILES["photo"]["type"] . "<br>"; echo "파일 크기: " . ($_FILES["photo"]["size"] / 1024) . " KB<br>"; echo "저장된 위치: " . $_FILES["photo"]["tmp_name"]; } ?>
ヒント:성공적으로 파일을 업로드한 후, 파일은 서버의 일시적인 디렉토리에 자동으로 저장됩니다. 이 파일을 영구적으로 저장하려면 PHP의 move_uploaded_file() 함수를 사용하여 일시적인 디렉토리에서 영구적인 위치로 이동시켜야 합니다.