當前位置: 首頁> 最新文章列表> PHP實現文件上傳與下載功能教程:從零搭建完整示例

PHP實現文件上傳與下載功能教程:從零搭建完整示例

M66 2025-10-09

PHP實現文件上傳與下載功能

在網站開發中,文件上傳和下載是非常常見的功能。無論是圖片、文檔還是壓縮包,很多網站都會提供上傳與下載的入口。本文將詳細介紹如何使用PHP編寫一個簡單的文件上傳與下載功能,包括HTML表單、上傳邏輯和下載腳本。

文件上傳功能實現

首先,我們需要在頁面上創建一個表單,用於用戶選擇並上傳文件:

 <form action="upload.php" method="post" enctype="multipart/form-data">
    <input type="file" name="file">
    <input type="submit" value="上傳">
</form>

在上面的代碼中:

  • action屬性指定表單提交的處理腳本為upload.php
  • method屬性設置為POST
  • enctype屬性為multipart/form-data ,用於支持文件上傳

接下來,在upload.php文件中編寫後端邏輯:

 <?php
$targetDir = "uploads/"; // 上傳文件的存储目录
$targetFile = $targetDir . basename($_FILES["file"]["name"]); // 上傳后的文件路径

// 檢查文件類型
$fileType = strtolower(pathinfo($targetFile, PATHINFO_EXTENSION));
$allowedTypes = array("jpg", "jpeg", "png", "gif");

if (!in_array($fileType, $allowedTypes)) {
    echo "只允许上傳图片文件!";
    exit;
}

// 移動文件到指定目錄
if (move_uploaded_file($_FILES["file"]["tmp_name"], $targetFile)) {
    echo "文件上傳成功!";
} else {
    echo "文件上傳失败!";
}
?>

以上代碼通過move_uploaded_file()函數將臨時文件移動到目標文件夾,並在上傳前對文件類型進行了安全檢查。實際開發中可進一步增強安全性,如驗證文件大小、隨機重命名文件等。

文件下載功能實現

文件上傳後,我們可以在頁面上顯示可供下載的文件列表。例如:

 <?php
$files = glob("uploads/*"); // 獲取uploads目錄下的所有文件

foreach ($files as $file) {
    $fileName = basename($file);
    echo "<a href='download.php?file={$fileName}'>{$fileName}</a><br>";
}
?>

上面的代碼使用glob()函數掃描uploads目錄,並為每個文件生成一個可點擊下載的超鏈接。

然後,在download.php文件中編寫下載處理邏輯:

 <?php
$fileName = $_GET["file"];
$filePath = "uploads/" . $fileName;

if (file_exists($filePath)) {
    header("Content-Type: application/octet-stream");
    header("Content-Disposition: attachment; filename={$fileName}");
    readfile($filePath);
} else {
    echo "文件不存在!";
}
?>

腳本通過file_exists()檢查文件是否存在,並設置響應頭部讓瀏覽器觸發下載。為了防止安全問題,建議在生產環境中加入文件名過濾和權限驗證。

總結

通過本文的示例,你可以快速掌握PHP中實現文件上傳與下載功能的基本方法。雖然示例較為基礎,但非常適合初學者理解文件處理的流程。實際項目中可在此基礎上擴展,如增加文件大小限制、上傳日誌記錄、權限控制等,以提升安全性與穩定性。