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

PHP 檔案上傳完整實戰教學:從表單建立到安全驗證

     編輯:PHP 相關知識

PHP 檔案上傳核心概念

PHP 作為廣泛應用的伺服器端腳本語言,擁有強大的檔案處理能力。本文將詳細示範如何建立一個完整的檔案上傳功能,涵蓋 HTML 表單建立、PHP 後端處理、安全性驗證與錯誤處理等關鍵步驟。

前端表單:正確設定編碼類型

檔案上傳的第一步是建立正確的 HTML 表單。關鍵在於 enctype="multipart/form-data" 屬性,這才能確保瀏覽器以正確的編碼方式傳送二進位檔案資料。

<form enctype="multipart/form-data" action="upload.php" method="post">
    請選擇檔案:<br>
    <input name="upload_file" type="file"><br>
    <input type="submit" value="上傳檔案">
</form>

後端處理:核心邏輯與安全檢查

PHP 透過 $_FILES 超全域陣列接收上傳檔案資訊。以下是完整的處理流程:

1. 取得檔案資訊

$upload_file = $_FILES['upload_file']['tmp_name'];
$upload_file_name = $_FILES['upload_file']['name'];
$upload_file_size = $_FILES['upload_file']['size'];
$upload_file_type = $_FILES['upload_file']['type'];
$upload_file_error = $_FILES['upload_file']['error'];

2. 基本驗證:檔案大小限制

$file_size_max = 1000 * 1000; // 1MB 限制
if ($upload_file_size > $file_size_max) {
    die("錯誤:檔案大小超過限制 (1MB)");
}

3. 防止檔案覆蓋與路徑安全

$store_dir = "uploads/"; // 建議使用相對路徑
$accept_overwrite = false;

if (file_exists($store_dir . $upload_file_name) && !$accept_overwrite) {
    die("錯誤:同名檔案已存在");
}

4. 移動暫存檔案到永久儲存位置

if (!move_uploaded_file($upload_file, $store_dir . $upload_file_name)) {
    die("錯誤:檔案移動失敗,請檢查目錄權限");
}

完整錯誤代碼對照表

上傳過程中可能發生的錯誤代碼($_FILES['upload_file']['error']):

代碼常數說明
0UPLOAD_ERR_OK上傳成功
1UPLOAD_ERR_INI_SIZE超過 php.ini 的 upload_max_filesize
2UPLOAD_ERR_FORM_SIZE超過表單 MAX_FILE_SIZE 限制
3UPLOAD_ERR_PARTIAL檔案僅部分上傳
4UPLOAD_ERR_NO_FILE沒有檔案被上傳

成功回饋與檔案資訊顯示

echo "<p>上傳成功!</p>";
echo "原始檔名:{$_FILES['upload_file']['name']}<br>";
echo "MIME 類型:{$_FILES['upload_file']['type']}<br>";
echo "檔案大小:{$_FILES['upload_file']['size']} bytes<br>";
echo "暫存路徑:{$_FILES['upload_file']['tmp_name']}<br>";

進階安全建議

  • 檔案類型驗證:不要只信任 MIME 類型,應使用 finfo_file() 檢測真實檔案類型
  • 檔案重命名:使用時間戳或亂數重命名,避免中文檔名與覆蓋問題
  • 儲存路徑隔離:上傳目錄應設為不可執行 PHP 腳本
  • php.ini 設定:調整 upload_max_filesize、post_max_size、max_execution_time

掌握這些核心概念後,您就能建立安全可靠的 PHP 檔案上傳功能了。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved