在網站開發中,文件上傳和下載是非常常見的功能。無論是圖片、文檔還是壓縮包,很多網站都會提供上傳與下載的入口。本文將詳細介紹如何使用PHP編寫一個簡單的文件上傳與下載功能,包括HTML表單、上傳邏輯和下載腳本。
首先,我們需要在頁面上創建一個表單,用於用戶選擇並上傳文件:
<form action="upload.php" method="post" enctype="multipart/form-data">
<input type="file" name="file">
<input type="submit" value="上傳">
</form>在上面的代碼中:
接下來,在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中實現文件上傳與下載功能的基本方法。雖然示例較為基礎,但非常適合初學者理解文件處理的流程。實際項目中可在此基礎上擴展,如增加文件大小限制、上傳日誌記錄、權限控制等,以提升安全性與穩定性。