当前位置: 首页> 最新文章列表> 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中实现文件上传与下载功能的基本方法。虽然示例较为基础,但非常适合初学者理解文件处理的流程。实际项目中可在此基础上扩展,如增加文件大小限制、上传日志记录、权限控制等,以提升安全性与稳定性。