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

PHP 超全局變量 $_FILES 詳解:文件上傳數組結構與處理流程

     編輯:PHP 相關知識

$_FILES 結構

表單 `` 提交後,`$_FILES['myFile']` 為關聯數組:

鍵名含義示例
name客戶端原始文件名photo.jpg
type瀏覽器報告 MIME (不可信)image/jpeg
size文件大小 (字節)245760
tmp_name服務器臨時文件路徑/tmp/phpXyZ123
error錯誤碼 (0=成功)0

多文件上傳結構

``

$_FILES['photos'] = [
    'name'     => ['a.jpg', 'b.png'],
    'type'     => ['image/jpeg', 'image/png'],
    'tmp_name' => ['/tmp/php1', '/tmp/php2'],
    'size'     => [10000, 20000],
    'error'    => [0, 0],
];
// 處理需遍歷索引
foreach ($_FILES['photos']['name'] as $i => $name) {
    $single = [
        'name' => $name,
        'type' => $_FILES['photos']['type'][$i],
        'tmp_name' => $_FILES['photos']['tmp_name'][$i],
        'size' => $_FILES['photos']['size'][$i],
        'error' => $_FILES['photos']['error'][$i],
    ];
    // 處理 $single
}

完整上傳處理示例

<?php
$allowedExt = ['gif', 'jpeg', 'jpg', 'png'];
$maxSize = 200 * 1024; // 200KB

if ($_SERVER['REQUEST_METHOD'] === 'POST') {
    $file = $_FILES['file'] ?? null;
    if (!$file || $file['error'] !== UPLOAD_ERR_OK) {
        die('上傳失敗: ' . ($file['error'] ?? '無文件'));
    }
    
    $ext = strtolower(pathinfo($file['name'], PATHINFO_EXTENSION));
    if (!in_array($ext, $allowedExt)) {
        die('非法擴展名');
    }
    
    if ($file['size'] > $maxSize) {
        die('文件過大');
    }
    
    // 真實 MIME 驗證
    $finfo = new finfo(FILEINFO_MIME_TYPE);
    $mime = $finfo->file($file['tmp_name']);
    if (!in_array($mime, ['image/gif','image/jpeg','image/png'])) {
        die('非法文件類型');
    }
    
    $dest = 'uploads/' . bin2hex(random_bytes(8)) . ".{$ext}";
    if (move_uploaded_file($file['tmp_name'], $dest)) {
        echo "上傳成功: {$dest}";
    } else {
        echo "移動失敗";
    }
}
?>

關鍵點總結

  1. 表單必須 `enctype="multipart/form-data"`
  2. 臨時文件腳本結束自動刪除,必須 `move_uploaded_file` 持久化
  3. 不信任 `$_FILES['type']`,使用 `finfo` 或 `getimagesize` 驗證
  4. 重命名文件防止覆蓋、注入、編碼問題
  5. 上傳目錄禁用腳本執行權限
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved