๋ฃจ์  ์†Œํ”„ํŠธ ๋กœ๊ณ 

216.73.216.248 TODAY : 61

PHP ๊ฐ•์˜

 > 

PHP - ์ค‘๊ธ‰

๐Ÿ“š PHP ์ค‘๊ธ‰ - 4์ฃผ์ฐจ: ํŒŒ์ผ ์—…๋กœ๋“œ ๋ฐ ์ด๋ฏธ์ง€ ์ฒ˜๋ฆฌ - 02 $_FILES ์Šˆํผ ๊ธ€๋กœ๋ฒŒ ๋ณ€์ˆ˜

๐Ÿ“š PHP ์ค‘๊ธ‰ - 4์ฃผ์ฐจ: ํŒŒ์ผ ์—…๋กœ๋“œ ๋ฐ ์ด๋ฏธ์ง€ ์ฒ˜๋ฆฌ - 02 $_FILES ์Šˆํผ ๊ธ€๋กœ๋ฒŒ ๋ณ€์ˆ˜
ํ‰์  10.0 ๋ผ์ด์„ผ์Šค free
์‚ฌ์šฉ์žํ‰์  10.0 ์šด์˜์ฒด์ œ
๋‹ค์šด๋กœ๋“œ 1 ํŒŒ์ผํฌ๊ธฐ 0
์ œ์ž‘์‚ฌ LUZENSOFT ๋“ฑ๋ก์ผ 2025-07-25 09:38:57
์กฐํšŒ์ˆ˜ 10
- ์„ค๋ช…

๐Ÿ“š PHP ์ค‘๊ธ‰ - 4์ฃผ์ฐจ: ํŒŒ์ผ ์—…๋กœ๋“œ ๋ฐ ์ด๋ฏธ์ง€ ์ฒ˜๋ฆฌ - 02 $_FILES ์Šˆํผ ๊ธ€๋กœ๋ฒŒ ๋ณ€์ˆ˜





์ง€๋‚œ ์‹œ๊ฐ„์—๋Š” #HTML #ํผ์„ ์ด์šฉํ•ด #ํŒŒ์ผ์„_์—…๋กœ๋“œํ•˜๋Š” ๊ธฐ๋ณธ์ ์ธ ๋ฐฉ๋ฒ•๊ณผ #๋ณด์•ˆ_๊ณ ๋ ค์‚ฌํ•ญ์— ๋Œ€ํ•ด ์•Œ์•„๋ณด์•˜์Šต๋‹ˆ๋‹ค. ์ด์ œ ์‚ฌ์šฉ์ž๊ฐ€ ์ „์†กํ•œ #ํŒŒ์ผ_๋ฐ์ดํ„ฐ๊ฐ€ #PHP ์Šคํฌ๋ฆฝํŠธ์—์„œ ์–ด๋–ป๊ฒŒ ์ ‘๊ทผ๋˜๊ณ  ์ฒ˜๋ฆฌ๋˜๋Š”์ง€์— ๋Œ€ํ•œ ํ•ต์‹ฌ์ธ #$_FILES #์Šˆํผ_๊ธ€๋กœ๋ฒŒ_๋ณ€์ˆ˜(Super Global Variable)์— ๋Œ€ํ•ด ๊นŠ์ด ์žˆ๊ฒŒ ๋‹ค๋ค„๋ณด๊ฒ ์Šต๋‹ˆ๋‹ค. #$_FILES ๋ณ€์ˆ˜๋ฅผ ์ •ํ™•ํžˆ ์ดํ•ดํ•˜๊ณ  ํ™œ์šฉํ•˜๋Š” ๊ฒƒ์ด #์•ˆ์ „ํ•˜๊ณ  #ํšจ์œจ์ ์ธ #ํŒŒ์ผ_์—…๋กœ๋“œ_์ฒ˜๋ฆฌ(#File Upload Handling)์˜ ์‹œ์ž‘์ž…๋‹ˆ๋‹ค.





1. $_FILES ์Šˆํผ ๊ธ€๋กœ๋ฒŒ ๋ณ€์ˆ˜์˜ ์ดํ•ด


uploadImage


#$_FILES๋Š” #PHP๊ฐ€ #HTTP_POST_๋ฉ”์„œ๋“œ๋ฅผ ํ†ตํ•ด #์—…๋กœ๋“œ๋œ_ํŒŒ์ผ์˜_์ •๋ณด๋ฅผ_์ž๋™์œผ๋กœ_์ˆ˜์ง‘ํ•˜์—ฌ_์ €์žฅํ•˜๋Š” #์—ฐ๊ด€_๋ฐฐ์—ด(Associative Array)์ž…๋‹ˆ๋‹ค. ์ด ๋ณ€์ˆ˜๋Š” ์˜ค์ง #enctype="multipart/form-data"๋กœ ์„ค์ •๋œ #HTML #ํผ์—์„œ๋งŒ ์œ ํšจํ•˜๊ฒŒ ์ฑ„์›Œ์ง‘๋‹ˆ๋‹ค.



$_FILES ๋ฐฐ์—ด์€ #ํผ์˜ #input type="file" ํƒœ๊ทธ์˜ #name ์†์„ฑ ๊ฐ’์„ #ํ‚ค(Key)๋กœ ์‚ฌ์šฉํ•˜๋ฉฐ, ๊ฐ ํŒŒ์ผ์— ๋Œ€ํ•œ ์ƒ์„ธํ•œ ์ •๋ณด๋ฅผ ๋‹ด๊ณ  ์žˆ๋Š” ๋˜ ๋‹ค๋ฅธ ๋ฐฐ์—ด์„ ๊ฐ’์œผ๋กœ ๊ฐ€์ง‘๋‹ˆ๋‹ค.




$_FILES ๋ฐฐ์—ด์˜ ์ฃผ์š” ์š”์†Œ




$_FILES['input_name'] (์—ฌ๊ธฐ์„œ input_name์€ HTML <input type="file"> ํƒœ๊ทธ์˜ name ์†์„ฑ ๊ฐ’)์€ ๋‹ค์Œ๊ณผ ๊ฐ™์€ 5๊ฐ€์ง€ ์ฃผ์š” ์ •๋ณด๋ฅผ ํฌํ•จํ•ฉ๋‹ˆ๋‹ค.



  1. name: ํด๋ผ์ด์–ธํŠธ #์ปดํ“จํ„ฐ์—์„œ #์—…๋กœ๋“œ๋œ_ํŒŒ์ผ์˜ #์›๋ณธ_์ด๋ฆ„(Original Name)์ž…๋‹ˆ๋‹ค. ์‚ฌ์šฉ์ž๊ฐ€ ์„ ํƒํ•œ ํŒŒ์ผ์˜ ์‹ค์ œ ์ด๋ฆ„์„ ๋‚˜ํƒ€๋ƒ…๋‹ˆ๋‹ค.

    • ์˜ˆ์‹œ: my_document.pdf

  2. type: ์—…๋กœ๋“œ๋œ ํŒŒ์ผ์˜ #MIME_ํƒ€์ž…(MIME Type)์ž…๋‹ˆ๋‹ค. ๋ธŒ๋ผ์šฐ์ €๊ฐ€ ์ œ๊ณตํ•˜๋Š” ์ •๋ณด์ด๋ฏ€๋กœ, #๋ณด์•ˆ_๊ฒ€์‚ฌ_์‹œ_์ด_๊ฐ’์—๋งŒ_์˜์กดํ•ด์„œ๋Š”_์•ˆ_๋ฉ๋‹ˆ๋‹ค. ์ด ๊ฐ’์€ ํด๋ผ์ด์–ธํŠธ ์ธก์—์„œ ์‰ฝ๊ฒŒ ์œ„๋ณ€์กฐ๋  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

    • ์˜ˆ์‹œ: image/jpeg, application/pdf, text/plain

  3. tmp_name: ์„œ๋ฒ„์— #์ž„์‹œ๋กœ_์ €์žฅ๋œ_ํŒŒ์ผ์˜ #์ „์ฒด_๊ฒฝ๋กœ์™€_์ด๋ฆ„์ž…๋‹ˆ๋‹ค. ์—…๋กœ๋“œ๋œ ํŒŒ์ผ์€ ์„œ๋ฒ„์˜ ํŠน์ • ์ž„์‹œ ๋””๋ ‰ํ„ฐ๋ฆฌ(php.ini์˜ upload_tmp_dir ์„ค์ • ๋˜๋Š” ์‹œ์Šคํ…œ ๊ธฐ๋ณธ ์ž„์‹œ ๋””๋ ‰ํ„ฐ๋ฆฌ)์— ์ €์žฅ๋ฉ๋‹ˆ๋‹ค. #PHP_์Šคํฌ๋ฆฝํŠธ์—์„œ ์ด ์ž„์‹œ ํŒŒ์ผ์„ ์ฝ๊ฑฐ๋‚˜ ์˜๊ตฌ์ ์ธ ์œ„์น˜๋กœ ์ด๋™์‹œ์ผœ์•ผ ํ•ฉ๋‹ˆ๋‹ค.

    • ์˜ˆ์‹œ: /tmp/phpA2F3g5 (๋ฆฌ๋ˆ…์Šค), C:WindowsTempphp1A2B.tmp (์œˆ๋„์šฐ)

  4. error: #ํŒŒ์ผ_์—…๋กœ๋“œ_์‹œ_๋ฐœ์ƒํ•œ_์˜ค๋ฅ˜๋ฅผ_๋‚˜ํƒ€๋‚ด๋Š”_์˜ค๋ฅ˜_์ฝ”๋“œ(Error Code)์ž…๋‹ˆ๋‹ค. #UPLOAD_ERR_OK (๊ฐ’: 0)๋Š” ํŒŒ์ผ์ด ์„ฑ๊ณต์ ์œผ๋กœ ์—…๋กœ๋“œ๋˜์—ˆ์Œ์„ ์˜๋ฏธํ•˜๋ฉฐ, ๋‹ค๋ฅธ ๊ฐ’๋“ค์€ ์˜ค๋ฅ˜๋ฅผ ๋‚˜ํƒ€๋ƒ…๋‹ˆ๋‹ค.

    • UPLOAD_ERR_OK (0): ์˜ค๋ฅ˜ ์—†์ด ํŒŒ์ผ ์—…๋กœ๋“œ ์„ฑ๊ณต.

    • UPLOAD_ERR_INI_SIZE (1): php.ini์˜ upload_max_filesize๋ฅผ ์ดˆ๊ณผ.

    • UPLOAD_ERR_FORM_SIZE (2): HTML ํผ์˜ MAX_FILE_SIZE ๊ฐ’์„ ์ดˆ๊ณผ.

    • UPLOAD_ERR_PARTIAL (3): ํŒŒ์ผ์ด ๋ถ€๋ถ„์ ์œผ๋กœ๋งŒ ์—…๋กœ๋“œ๋จ.

    • UPLOAD_ERR_NO_FILE (4): ํŒŒ์ผ์ด ์—…๋กœ๋“œ๋˜์ง€ ์•Š์Œ.

    • UPLOAD_ERR_NO_TMP_DIR (6): ์ž„์‹œ ๋””๋ ‰ํ„ฐ๋ฆฌ๊ฐ€ ์—†์Œ.

    • UPLOAD_ERR_CANT_WRITE (7): ํŒŒ์ผ ์“ฐ๊ธฐ ์‹คํŒจ.

    • UPLOAD_ERR_EXTENSION (8): PHP ํ™•์žฅ ๊ธฐ๋Šฅ์— ์˜ํ•ด ์—…๋กœ๋“œ ์ค‘์ง€๋จ.

  5. size: ์—…๋กœ๋“œ๋œ #ํŒŒ์ผ์˜_ํฌ๊ธฐ๋ฅผ #๋ฐ”์ดํŠธ(Byte) ๋‹จ์œ„๋กœ ๋‚˜ํƒ€๋ƒ…๋‹ˆ๋‹ค.

    • ์˜ˆ์‹œ: 102400 (100KB)





2. $_FILES ๋ณ€์ˆ˜ ํ™œ์šฉ ์˜ˆ์‹œ

uploadImage



์ง€๋‚œ ์‹œ๊ฐ„์— ์ž‘์„ฑํ–ˆ๋˜ #HTML #ํผ (upload_form.html)์—์„œ name="my_file"๋กœ ํŒŒ์ผ์„ ์—…๋กœ๋“œํ–ˆ์„ ๋•Œ, $_FILES ๋ณ€์ˆ˜๋ฅผ ์ถœ๋ ฅํ•ด๋ณด๋ฉด ๋‹ค์Œ๊ณผ ๊ฐ™์€ ๊ตฌ์กฐ๋ฅผ ๊ฐ€์ง‘๋‹ˆ๋‹ค.



PHP

<?php
// upload_process.php

if (isset($_FILES['my_file'])) {
    echo "<pre>";
    print_r($_FILES['my_file']);
    echo "</pre>";
} else {
    echo "ํŒŒ์ผ์ด ์—…๋กœ๋“œ๋˜์ง€ ์•Š์•˜์Šต๋‹ˆ๋‹ค.";
}

/*
์œ„ print_r($_FILES['my_file'])์˜ ์ถœ๋ ฅ ์˜ˆ์‹œ:
Array
(
    [name] => example.jpg
    [type] => image/jpeg
    [tmp_name] => /tmp/phpABCD12
    [error] => 0
    [size] => 123456
)
*/
?>





3. $_FILES๋ฅผ ์ด์šฉํ•œ ํŒŒ์ผ ์—…๋กœ๋“œ ์ฒ˜๋ฆฌ ๋กœ์ง (์‹ฌํ™”)


uploadImage


์ด์ œ $_FILES ๋ณ€์ˆ˜์˜ ๊ฐ ์š”์†Œ๋ฅผ ํ™œ์šฉํ•˜์—ฌ ์‹ค์ œ #ํŒŒ์ผ_์—…๋กœ๋“œ_์ฒ˜๋ฆฌ_์Šคํฌ๋ฆฝํŠธ๋ฅผ ์ž‘์„ฑํ•ด ๋ณด๊ฒ ์Šต๋‹ˆ๋‹ค. ์ด ๊ณผ์ •์—์„œ #๋ณด์•ˆ_๊ฒ€์‚ฌ๊ฐ€_๋งค์šฐ_์ค‘์š”ํ•ฉ๋‹ˆ๋‹ค.



PHP

<?php
// upload_process.php

// 1. ์—…๋กœ๋“œ ๋””๋ ‰ํ† ๋ฆฌ ์„ค์ • (๋ณด์•ˆ์ƒ ์›น ์ ‘๊ทผ ๋ถˆ๊ฐ€ํ•œ ์ƒ์œ„ ๊ฒฝ๋กœ ๊ถŒ์žฅ)
$upload_dir = './uploads/'; // ํ˜„์žฌ ์Šคํฌ๋ฆฝํŠธ ๊ธฐ์ค€ 'uploads' ํด๋”

// ํด๋”๊ฐ€ ์—†์œผ๋ฉด ์ƒ์„ฑ (๊ถŒํ•œ 0755)
if (!is_dir($upload_dir)) {
    mkdir($upload_dir, 0755, true);
}

// 2. ํŒŒ์ผ ์—…๋กœ๋“œ ์˜ค๋ฅ˜ ํ™•์ธ (ํ•„์ˆ˜)
if (!isset($_FILES['my_file']) || $_FILES['my_file']['error'] !== UPLOAD_ERR_OK) {
    switch ($_FILES['my_file']['error']) {
        case UPLOAD_ERR_INI_SIZE:
        case UPLOAD_ERR_FORM_SIZE:
            echo "์˜ค๋ฅ˜: ์—…๋กœ๋“œ ํŒŒ์ผ ํฌ๊ธฐ๊ฐ€ ํ—ˆ์šฉ๋œ ์ตœ๋Œ€ ํฌ๊ธฐ๋ฅผ ์ดˆ๊ณผํ–ˆ์Šต๋‹ˆ๋‹ค.";
            break;
        case UPLOAD_ERR_NO_FILE:
            echo "์˜ค๋ฅ˜: ํŒŒ์ผ์ด ์„ ํƒ๋˜์ง€ ์•Š์•˜์Šต๋‹ˆ๋‹ค.";
            break;
        default:
            echo "์˜ค๋ฅ˜: ํŒŒ์ผ ์—…๋กœ๋“œ ์ค‘ ์•Œ ์ˆ˜ ์—†๋Š” ์˜ค๋ฅ˜๊ฐ€ ๋ฐœ์ƒํ–ˆ์Šต๋‹ˆ๋‹ค. ์ฝ”๋“œ: " . $_FILES['my_file']['error'];
            break;
    }
    exit;
}

// 3. ์—…๋กœ๋“œ๋œ ํŒŒ์ผ ์ •๋ณด ๋ณ€์ˆ˜์— ์ €์žฅ
$file_name_original = $_FILES['my_file']['name'];
$file_tmp_name = $_FILES['my_file']['tmp_name'];
$file_type = $_FILES['my_file']['type'];
$file_size = $_FILES['my_file']['size'];

// 4. ์—„๊ฒฉํ•œ ๋ณด์•ˆ ๊ฒ€์‚ฌ (๋งค์šฐ ์ค‘์š”!)

// 4-1. ํŒŒ์ผ ํฌ๊ธฐ ์ œํ•œ (์˜ˆ: 2MB)
$max_file_size = 2 * 1024 * 1024; // 2MB
if ($file_size > $max_file_size) {
    echo "์˜ค๋ฅ˜: ํŒŒ์ผ ํฌ๊ธฐ๊ฐ€ ๋„ˆ๋ฌด ํฝ๋‹ˆ๋‹ค. (์ตœ๋Œ€ 2MB)";
    exit;
}

// 4-2. ํ—ˆ์šฉ๋œ ํ™•์žฅ์ž์™€ MIME ํƒ€์ž… ๊ฒ€์‚ฌ
$allowed_extensions = ['jpg', 'jpeg', 'png', 'gif', 'pdf'];
$allowed_mime_types = ['image/jpeg', 'image/png', 'image/gif', 'application/pdf'];

// ํ™•์žฅ์ž ์ถ”์ถœ (์†Œ๋ฌธ์ž๋กœ ๋ณ€ํ™˜)
$file_ext = strtolower(pathinfo($file_name_original, PATHINFO_EXTENSION));

// MIME ํƒ€์ž… ํ™•์ธ ($_FILES['type']์€ ํด๋ผ์ด์–ธํŠธ์—์„œ ์ „์†กํ•˜๋ฏ€๋กœ ์ฐธ๊ณ ์šฉ)
// ๋” ์•ˆ์ „ํ•œ ๋ฐฉ๋ฒ•์€ ์‹ค์ œ ํŒŒ์ผ์˜ MIME ํƒ€์ž…์„ ์„œ๋ฒ„์—์„œ ์žฌํ™•์ธํ•˜๋Š” ๊ฒƒ (์˜ˆ: finfo_open())
if (!in_array($file_ext, $allowed_extensions)) {
    echo "์˜ค๋ฅ˜: ํ—ˆ์šฉ๋˜์ง€ ์•Š๋Š” ํŒŒ์ผ ํ™•์žฅ์ž์ž…๋‹ˆ๋‹ค. (ํ—ˆ์šฉ: " . implode(', ', $allowed_extensions) . ")";
    exit;
}
if (!in_array($file_type, $allowed_mime_types)) { // 1์ฐจ์ ์ธ MIME ํƒ€์ž… ๊ฒ€์‚ฌ
    echo "์˜ค๋ฅ˜: ํ—ˆ์šฉ๋˜์ง€ ์•Š๋Š” ํŒŒ์ผ MIME ํƒ€์ž…์ž…๋‹ˆ๋‹ค. (ํ—ˆ์šฉ: " . implode(', ', $allowed_mime_types) . ")";
    exit;
}

// 5. ํŒŒ์ผ ์ด๋ฆ„ ๋ณ€๊ฒฝ (๋ณด์•ˆ์ƒ ํ•„์ˆ˜: ์›๋ณธ ์ด๋ฆ„์„ ๊ทธ๋Œ€๋กœ ์‚ฌ์šฉํ•˜์ง€ ๋งˆ์„ธ์š”!)
// ์œ ๋‹ˆํฌํ•œ ํŒŒ์ผ ์ด๋ฆ„ ์ƒ์„ฑ (๊ฒน์น˜์ง€ ์•Š๊ฒŒ, ์ถ”์ธก ๋ถˆ๊ฐ€๋Šฅํ•˜๊ฒŒ)
$new_file_name = uniqid('upload_') . '.' . $file_ext;
$destination = $upload_dir . $new_file_name; // ์ตœ์ข… ์ €์žฅ ๊ฒฝ๋กœ

// 6. ์ž„์‹œ ํŒŒ์ผ์„ ์˜๊ตฌ ์ €์žฅ์†Œ๋กœ ์ด๋™
// move_uploaded_file() ํ•จ์ˆ˜๋Š” ์ž„์‹œ ๋””๋ ‰ํ† ๋ฆฌ์— ์žˆ๋Š” ์—…๋กœ๋“œ๋œ ํŒŒ์ผ์„ ์•ˆ์ „ํ•˜๊ฒŒ ์ง€์ •๋œ ๋ชฉ์ ์ง€๋กœ ์ด๋™์‹œํ‚ต๋‹ˆ๋‹ค.
// ์ด ํ•จ์ˆ˜๋Š” ์ž„์‹œ ํŒŒ์ผ ์—ฌ๋ถ€์™€ ๊ถŒํ•œ ๋“ฑ์„ ๋‚ด๋ถ€์ ์œผ๋กœ ํ™•์ธํ•˜์—ฌ ๋ณด์•ˆ์ƒ ์•ˆ์ „ํ•ฉ๋‹ˆ๋‹ค.
if (move_uploaded_file($file_tmp_name, $destination)) {
    echo "ํŒŒ์ผ์ด ์„ฑ๊ณต์ ์œผ๋กœ ์—…๋กœ๋“œ๋˜์—ˆ์Šต๋‹ˆ๋‹ค.n";
    echo "์ €์žฅ๋œ ํŒŒ์ผ๋ช…: " . htmlspecialchars($new_file_name) . "n";
    echo "ํŒŒ์ผ ๊ฒฝ๋กœ: " . htmlspecialchars($destination) . "n";

    // ์ด๋ฏธ์ง€๊ฐ€ ์›น์—์„œ ์ ‘๊ทผ ๊ฐ€๋Šฅํ•˜๊ณ  ์ด๋ฏธ์ง€์ธ ๊ฒฝ์šฐ์—๋งŒ ํ‘œ์‹œ
    if (strpos($file_type, 'image/') === 0) {
        echo "<img src='" . htmlspecialchars($destination) . "' alt='์—…๋กœ๋“œ๋œ ์ด๋ฏธ์ง€' style='max-width:400px; height:auto; display:block; margin-top:20px;'>n";
    }

} else {
    echo "์˜ค๋ฅ˜: ํŒŒ์ผ ์—…๋กœ๋“œ์— ์‹คํŒจํ–ˆ์Šต๋‹ˆ๋‹ค. (์ด๋™ ์‹คํŒจ)";
}
?>





4. ๋‹ค์ค‘ ํŒŒ์ผ ์—…๋กœ๋“œ ์ฒ˜๋ฆฌ

uploadImage



HTML ํผ์—์„œ <input type="file" name="my_files[]" multiple>๊ณผ ๊ฐ™์ด #name ์†์„ฑ์— #๋ฐฐ์—ด_ํ˜•์‹([])์„ ์ถ”๊ฐ€ํ•˜๋ฉด ์—ฌ๋Ÿฌ ํŒŒ์ผ์„ ๋™์‹œ์— ์—…๋กœ๋“œํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์ด๋•Œ $_FILES ๋ฐฐ์—ด์˜ ๊ตฌ์กฐ๋Š” ์•ฝ๊ฐ„ ๋‹ฌ๋ผ์ง‘๋‹ˆ๋‹ค.



HTML (upload_form_multiple.html)

HTML

<form action="upload_process_multiple.php" method="POST" enctype="multipart/form-data">
    <label for="my_files">์—ฌ๋Ÿฌ ํŒŒ์ผ ์„ ํƒ:</label>
    <input type="file" name="my_files[]" id="my_files" multiple required>
    <input type="submit" value="ํŒŒ์ผ ์—…๋กœ๋“œ">
</form>



PHP (์˜ˆ์‹œ: upload_process_multiple.php)



PHP

<?php
// upload_process_multiple.php

// $_FILES['my_files'] ๋ฐฐ์—ด ๊ตฌ์กฐ:
/*
Array
(
    [name] => Array
        (
            [0] => file1.jpg
            [1] => file2.png
        )

    [type] => Array
        (
            [0] => image/jpeg
            [1] => image/png
        )
    ...
)
*/

if (isset($_FILES['my_files'])) {
    $total_files = count($_FILES['my_files']['name']);

    echo "์ด " . $total_files . "๊ฐœ์˜ ํŒŒ์ผ์ด ์—…๋กœ๋“œ ์‹œ๋„๋˜์—ˆ์Šต๋‹ˆ๋‹ค.nn";

    for ($i = 0; $i < $total_files; $i++) {
        // ๊ฐ ํŒŒ์ผ์˜ ์ •๋ณด ์ถ”์ถœ
        $file_name_original = $_FILES['my_files']['name'][$i];
        $file_tmp_name = $_FILES['my_files']['tmp_name'][$i];
        $file_error = $_FILES['my_files']['error'][$i];
        $file_size = $_FILES['my_files']['size'][$i];
        $file_type = $_FILES['my_files']['type'][$i];

        echo "--- ํŒŒ์ผ " . ($i + 1) . ": " . htmlspecialchars($file_name_original) . " ---n";

        if ($file_error !== UPLOAD_ERR_OK) {
            echo "์˜ค๋ฅ˜ ๋ฐœ์ƒ: " . $file_error . "n";
            continue; // ๋‹ค์Œ ํŒŒ์ผ๋กœ ๋„˜์–ด๊ฐ
        }

        // ๋ณด์•ˆ ๊ฒ€์‚ฌ ๋ฐ ํŒŒ์ผ ์ด๋™ ๋กœ์ง์€ ๋‹จ์ผ ํŒŒ์ผ๊ณผ ๋™์ผํ•˜๊ฒŒ ์ ์šฉ
        // (์œ„์˜ ๋‹จ์ผ ํŒŒ์ผ ์ฒ˜๋ฆฌ ๋กœ์ง์„ ์ด ๋ฐ˜๋ณต๋ฌธ ์•ˆ์— ๋„ฃ์œผ๋ฉด ๋จ)
        // ์—ฌ๊ธฐ์„œ๋Š” ๊ฐ„๋‹จํžˆ ์ด๋™๋งŒ ์˜ˆ์‹œ
        $upload_dir = './uploads/';
        if (!is_dir($upload_dir)) { mkdir($upload_dir, 0755, true); }

        $file_ext = strtolower(pathinfo($file_name_original, PATHINFO_EXTENSION));
        $new_file_name = uniqid('multi_') . '.' . $file_ext;
        $destination = $upload_dir . $new_file_name;

        if (move_uploaded_file($file_tmp_name, $destination)) {
            echo "์„ฑ๊ณต: " . htmlspecialchars($new_file_name) . " ๋กœ ์ €์žฅ๋˜์—ˆ์Šต๋‹ˆ๋‹ค.n";
        } else {
            echo "์‹คํŒจ: ํŒŒ์ผ์„ ์ด๋™ํ•  ์ˆ˜ ์—†์Šต๋‹ˆ๋‹ค.n";
        }
        echo "n";
    }
} else {
    echo "์—…๋กœ๋“œ๋œ ํŒŒ์ผ์ด ์—†์Šต๋‹ˆ๋‹ค.";
}
?>




#$_FILES ์Šˆํผ ๊ธ€๋กœ๋ฒŒ ๋ณ€์ˆ˜๋Š” #PHP์—์„œ #ํŒŒ์ผ_์—…๋กœ๋“œ๋ฅผ ๋‹ค๋ฃจ๋Š” ๋ฐ ์žˆ์–ด ํ•ต์‹ฌ์ ์ธ ์—ญํ• ์„ ํ•ฉ๋‹ˆ๋‹ค. name, type, tmp_name, error, size ๋“ฑ์˜ ์ •๋ณด๋ฅผ ํ†ตํ•ด ์—…๋กœ๋“œ๋œ ํŒŒ์ผ์„ #์•ˆ์ „ํ•˜๊ฒŒ_์ฒ˜๋ฆฌํ•˜๊ณ  #์ €์žฅํ• _์ˆ˜_์žˆ์Šต๋‹ˆ๋‹ค. ํŠนํžˆ #๋ณด์•ˆ_์ทจ์•ฝ์ ์„_๋ง‰๊ธฐ_์œ„ํ•ด #ํŒŒ์ผ_์ด๋ฆ„_๋ณ€๊ฒฝ, #ํ™•์žฅ์ž_๋ฐ_MIME_ํƒ€์ž…_๊ฒ€์‚ฌ, #ํŒŒ์ผ_ํฌ๊ธฐ_์ œํ•œ ๋“ฑ์˜ #๋ณด์•ˆ_๋กœ์ง์„_๋ฐ˜๋“œ์‹œ_์ ์šฉํ•ด์•ผ_ํ•œ๋‹ค๋Š”_์ _์žŠ์ง€_๋งˆ์„ธ์š”! ๋‹ค์Œ ์‹œ๊ฐ„์—๋Š” ์—…๋กœ๋“œ๋œ #์ด๋ฏธ์ง€๋ฅผ_๋‹ค๋ฃจ๋Š”_๋ฐฉ๋ฒ•์— ๋Œ€ํ•ด ์ž์„ธํžˆ ์•Œ์•„๋ณด๊ฒ ์Šต๋‹ˆ๋‹ค.