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 超全域陣列接收上傳檔案資訊。以下是完整的處理流程:
$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'];
$file_size_max = 1000 * 1000; // 1MB 限制
if ($upload_file_size > $file_size_max) {
die("錯誤:檔案大小超過限制 (1MB)");
}
$store_dir = "uploads/"; // 建議使用相對路徑
$accept_overwrite = false;
if (file_exists($store_dir . $upload_file_name) && !$accept_overwrite) {
die("錯誤:同名檔案已存在");
}
if (!move_uploaded_file($upload_file, $store_dir . $upload_file_name)) {
die("錯誤:檔案移動失敗,請檢查目錄權限");
}
上傳過程中可能發生的錯誤代碼($_FILES['upload_file']['error']):
| 代碼 | 常數 | 說明 |
|---|---|---|
| 0 | UPLOAD_ERR_OK | 上傳成功 |
| 1 | UPLOAD_ERR_INI_SIZE | 超過 php.ini 的 upload_max_filesize |
| 2 | UPLOAD_ERR_FORM_SIZE | 超過表單 MAX_FILE_SIZE 限制 |
| 3 | UPLOAD_ERR_PARTIAL | 檔案僅部分上傳 |
| 4 | UPLOAD_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>";
finfo_file() 檢測真實檔案類型upload_max_filesize、post_max_size、max_execution_time掌握這些核心概念後,您就能建立安全可靠的 PHP 檔案上傳功能了。