English | 简体中文 | 繁體中文 | Русский язык | Français | Español | Português | Deutsch | 日本語 | 한국어 | Italiano | بالعربية

PHP 기본 튜토리얼

PHP 고급 튜토리얼

PHP & MySQL

PHP 참조 가이드

PHP 파일 업로드

이 튜토리얼에서는 PHP를 사용하여 파일을 원격 웹 서버에 업로드하는 방법을 배울 수 있습니다.

PHP로 파일 업로드

이 튜토리얼에서는 간단한 HTML 폼과 PHP를 사용하여 원격 서버에 파일을 업로드하는 방법을 배웁니다. 이미지, 비디오, ZIP 파일, Microsoft Office 문서, PDF, 실행 파일 및 다양한 파일 유형을 업로드할 수 있습니다.

제1단계: 파일 업로드를 위한 HTML 폼 생성

아래 예제는 파일을 업로드할 수 있는 간단한 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 데이터로 인코딩하여 많은 이진 데이터(예: 이미지, 오디오, 비디오 등)를 업로드하는 데 필요합니다.

제2단계: 업로드된 파일 처리

아래는 우리의 "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() 함수를 사용하여 일시적인 디렉토리에서 영구적인 위치로 이동시켜야 합니다.