在网站开发中,文件上传和下载是非常常见的功能。无论是图片、文档还是压缩包,很多网站都会提供上传与下载的入口。本文将详细介绍如何使用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中实现文件上传与下载功能的基本方法。虽然示例较为基础,但非常适合初学者理解文件处理的流程。实际项目中可在此基础上扩展,如增加文件大小限制、上传日志记录、权限控制等,以提升安全性与稳定性。