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

PHP 文件上傳核心機制與安全實踐詳解

     編輯:PHP 綜合知識

$_FILES 超全局變量結構

表單需設置 enctype="multipart/form-data",上傳後 $_FILES['myfile'] 包含:

鍵名含義
name客戶端原始文件名
typeMIME 類型(客戶端提供,不可信)
size文件大小(字節)
tmp_name服務端臨時存儲路徑(請求結束自動刪除)
error錯誤代碼(0 表示成功)

基礎上傳處理流程

if ($_FILES['myfile']['error'] === UPLOAD_ERR_OK) {
    $dest = 'uploads/' . basename($_FILES['myfile']['name']);
    if (move_uploaded_file($_FILES['myfile']['tmp_name'], $dest)) {
        echo '上傳成功';
    } else {
        echo '移動文件失敗';
    }
} elseif ($_FILES['myfile']['error'] === UPLOAD_ERR_NO_FILE) {
    echo '請選擇文件';
} else {
    echo '上傳錯誤碼:' . $_FILES['myfile']['error'];
}

關鍵安全檢查清單

  1. 驗證 MIME 類型:使用 finfo_file 檢測真實類型,勿信任 $_FILES['type']。
  2. 限制文件大小:PHP 配置 upload_max_filesize、post_max_size + 代碼雙重校驗。
  3. 重命名存儲:使用 uniqid() 或哈希值作為文件名,防止覆蓋、路徑遍歷。
  4. 存儲目錄非執行權限:上傳目錄禁用腳本執行(Nginx/Apache 配置)。
  5. 圖片二次渲染:GD/Imagick 重寫圖片,剝離潛在惡意代碼。
  6. 病毒掃描:集成 ClamAV 等引擎異步掃描。

進階:分塊上傳與斷點續傳

大文件上傳建議前端分片(如 WebUploader、Plupload),後端合併分片,配合 session 或數據庫記錄上傳狀態。

常見錯誤代碼對照

UPLOAD_ERR_INI_SIZE      // 1 超過 php.ini upload_max_filesize
UPLOAD_ERR_FORM_SIZE     // 2 超過表單 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 被擴展阻止
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved