首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> 網頁程式設計 >> PHP 程式設計 >> PHP 相關知識

PHP 多文件上傳表單設計與 $_FILES 多維數組解析

     編輯:PHP 相關知識

PHP 多文件上傳:從表單設計到後端處理

多文件上傳的核心在於 HTML 表單的 name 屬性使用數組語法 name="myfile[]",PHP 端通過 $_FILES 三維數組接收。

1. 前端表單設計

<form action="mul_upload.php" method="post" enctype="multipart/form-data">
    <input type="hidden" name="MAX_FILE_SIZE" value="1000000">
    選擇文件1:<input type="file" name="myfile[]"><br>
    選擇文件2:<input type="file" name="myfile[]"><br>
    選擇文件3:<input type="file" name="myfile[]"><br>
    <input type="submit" value="上傳文件">
</form>

關鍵點:

  • enctype="multipart/form-data" 必須設置。
  • name="myfile[]" 方括號讓瀏覽器將同名文件組成數組提交。
  • MAX_FILE_SIZE 隱藏字段限制客戶端文件大小(單位字節,僅作提示,服務端必須再驗證)。

2. 後端 $_FILES 結構解析

提交三個文件後,print_r($_FILES) 輸出結構如下:

Array
(
    [myfile] => Array
        (
            [name] => Array
                (
                    [0] => Rav.ini
                    [1] => msgsocm.log
                    [2] => NOTEPAD.EXE
                )
            [type] => Array
                (
                    [0] => application/octet-stream
                    [1] => application/octet-stream
                    [2] => application/octet-stream
                )
            [tmp_name] => Array
                (
                    [0] => C:\WINDOWS\Temp\phpAF.tmp
                    [1] => C:\WINDOWS\Temp\phpB0.tmp
                    [2] => C:\WINDOWS\Temp\phpB1.tmp
                )
            [error] => Array
                (
                    [0] => 0
                    [1] => 0
                    [2] => 0
                )
            [size] => Array
                (
                    [0] => 64
                    [1] => 1350
                    [2] => 66560
                )
        )
)

對比單文件上傳(二維數組),多文件上傳在 $_FILES['myfile'] 下每個屬性(name, type, tmp_name, error, size)都變成了索引數組,索引對應文件順序。

3. 遍歷處理多文件上傳

<?php
$uploadDir = 'uploads/';
if (!is_dir($uploadDir)) mkdir($uploadDir, 0755, true);

$files = $_FILES['myfile'];
$count = count($files['name']);

for ($i = 0; $i < $count; $i++) {
    // 檢查錯誤碼
    if ($files['error'][$i] !== UPLOAD_ERR_OK) {
        echo "文件 {$files['name'][$i]} 上傳失敗,錯誤碼: {$files['error'][$i]}<br>";
        continue;
    }

    // 安全:驗證文件類型、大小等(此處略)

    $src = $files['tmp_name'][$i];
    $dest = $uploadDir . basename($files['name'][$i]);

    if (move_uploaded_file($src, $dest)) {
        echo "文件 {$files['name'][$i]} 上傳成功<br>";
    } else {
        echo "文件 {$files['name'][$i]} 移動失敗<br>";
    }
}
?>

4. 進階:HTML5 multiple 屬性(單 input 選多文件)

<input type="file" name="myfile[]" multiple>

配合 multiple 屬性,用戶可在一個文件選擇框中按住 Ctrl/Shift 選擇多個文件,後端處理邏輯完全相同。

總結

  • 表單用 name="xxx[]" + enctype="multipart/form-data"。
  • 後端 $_FILES 變為三維數組,用 for 迴圈遍歷索引處理。
  • 務必檢查 error 碼,驗證類型大小,防止惡意上傳。
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved