如何透過PHP寫一個簡單的檔案上傳和下載功能
隨著網路科技的發展,檔案上傳和下載功能成為了許多網站必備的功能之一。透過編寫一個簡單的文件上傳和下載功能,可以讓使用者方便地上傳和下載文件,提高使用者體驗。本文將介紹如何使用PHP編寫一個簡單的檔案上傳和下載功能,並提供具體的程式碼範例。
一、檔案上傳功能的實作
建立表單
首先,在HTML頁面上建立表單,用於使用者上傳檔案。表單的程式碼如下所示:
<form action="upload.php" method="post" enctype="multipart/form-data"> <input type="file" name="file"> <input type="submit" value="上传"> </form>
其中,form標籤的action
屬性指定了表單提交後的處理腳本為upload.php
#,method
屬性指定了表單提交的方式為POST,enctype
屬性指定了表單的編碼類型為multipart/form-data
,以支援檔案上傳。
編寫上傳腳本
在upload.php
檔案中,編寫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 "文件上传失败!"; } ?>
以上程式碼中,首先定義了一個變數$targetDir
來指定檔案上傳後的儲存目錄,接著使用basename()
函數取得上傳檔案的路徑,然後使用strtolower()
函數將檔案類型轉換為小寫,使用pathinfo()
函數取得檔案的副檔名,然後檢查檔案副檔名是否在允許的類型範圍內。如果文件類型不符合要求,則輸出提示資訊並終止程式。如果檔案類型符合要求,則使用move_uploaded_file()
函數將檔案從暫存目錄移至指定目錄。
二、檔案下載功能的實作
建立檔案清單
首先,需要在頁面上展示可供下載的檔案列表。程式碼如下所示:
<?php $files = glob("uploads/*"); // 获取上传文件的列表 foreach ($files as $file) { $fileName = basename($file); echo "<a href='download.php?file={$fileName}'>{$fileName}</a><br>"; } ?>
以上程式碼中,使用glob()
函數取得上傳檔案的列表,然後使用basename()
函數取得檔案名,最後使用echo
輸出檔案列表,並為每個檔案產生一個下載連結。
編寫下載腳本
在download.php
檔案中,編寫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 "文件不存在!"; } ?>
以上程式碼中,首先使用$_GET
超全域陣列取得要下載的檔案名,然後根據檔案名稱拼接出檔案的路徑。接著,使用file_exists()
函數檢查檔案是否存在,如果檔案存在,則設定HTTP頭訊息,使瀏覽器將檔案作為附件下載,然後使用readfile()
函數將文件輸出到瀏覽器。如果文件不存在,則輸出提示訊息。
以上就是透過PHP寫一個簡單的檔案上傳和下載功能的範例程式碼。透過這些程式碼,我們可以輕鬆實現文件上傳和下載功能,提高網站的使用者體驗。當然,這只是一個簡單的範例,實際開發中可能需要考慮更多的安全性和效能優化問題,但這些範例程式碼可以作為入門和學習的基礎,幫助初學者快速掌握文件上傳和下載的原理和實現方式。
以上是如何透過PHP編寫一個簡單的檔案上傳和下載功能的詳細內容。更多資訊請關注PHP中文網其他相關文章!