当前位置:首页 > PHP

php实现文件上传下载

2026-02-27 17:21:01PHP

PHP 文件上传实现

文件上传需要使用 $_FILES 超全局变量处理上传的文件数据。确保 HTML 表单设置 enctype="multipart/form-data" 属性。

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

PHP 处理上传文件代码示例:

$targetDir = "uploads/";
$targetFile = $targetDir . basename($_FILES["fileToUpload"]["name"]);
$uploadOk = 1;

// 检查文件是否已存在
if (file_exists($targetFile)) {
    echo "文件已存在";
    $uploadOk = 0;
}

// 限制文件大小(5MB)
if ($_FILES["fileToUpload"]["size"] > 5000000) {
    echo "文件过大";
    $uploadOk = 0;
}

// 允许特定文件类型
$allowedTypes = ["jpg", "png", "pdf"];
$fileType = strtolower(pathinfo($targetFile, PATHINFO_EXTENSION));
if (!in_array($fileType, $allowedTypes)) {
    echo "只允许 JPG, PNG, PDF 文件";
    $uploadOk = 0;
}

// 检查上传标志并移动文件
if ($uploadOk == 1) {
    if (move_uploaded_file($_FILES["fileToUpload"]["tmp_name"], $targetFile)) {
        echo "文件上传成功";
    } else {
        echo "上传失败";
    }
}

PHP 文件下载实现

文件下载可以通过设置适当的 HTTP 头实现强制下载而非在浏览器中打开。

$file = 'path/to/file.pdf';
if (file_exists($file)) {
    header('Content-Description: File Transfer');
    header('Content-Type: application/octet-stream');
    header('Content-Disposition: attachment; filename="'.basename($file).'"');
    header('Expires: 0');
    header('Cache-Control: must-revalidate');
    header('Pragma: public');
    header('Content-Length: ' . filesize($file));
    readfile($file);
    exit;
} else {
    echo "文件不存在";
}

安全注意事项

验证文件类型不应仅依赖文件扩展名,应使用 finfo_file() 函数检测实际 MIME 类型:

$finfo = finfo_open(FILEINFO_MIME_TYPE);
$mime = finfo_file($finfo, $_FILES["fileToUpload"]["tmp_name"]);
finfo_close($finfo);

限制上传目录的执行权限,防止上传的恶意脚本被执行。建议将上传目录放在 web 根目录之外,或通过 .htaccess 禁止脚本执行:

php实现文件上传下载

<FilesMatch "\.(php|pl|py|jsp|asp|sh|cgi)$">
    Deny from all
</FilesMatch>

分享给朋友:

相关文章

js实现文件下载

js实现文件下载

使用 a 标签下载文件 通过动态创建 a 标签并设置 download 属性实现文件下载。适用于已知文件 URL 或 Blob 数据的情况。 function downloadFile(url, f…

实现.vue文件

实现.vue文件

创建Vue单文件组件 Vue单文件组件(.vue文件)是Vue.js框架的核心特性之一,它将模板、脚本和样式封装在一个文件中。一个典型的.vue文件结构包含三个部分:<template>、…

php 实现文件下载

php 实现文件下载

实现文件下载的基本方法 使用 PHP 实现文件下载的核心是通过设置 HTTP 头部信息,强制浏览器将文件作为附件下载而非直接显示。以下是一个基础实现示例: $file_path = '/path/t…

php下载文件实现

php下载文件实现

PHP 下载文件实现方法 使用 header() 函数强制下载 设置合适的 HTTP 头信息,强制浏览器下载文件而非直接打开。 $file_path = '/path/to/file.pdf'; $…

vue实现文件管理系统

vue实现文件管理系统

Vue 文件管理系统实现方案 核心功能模块设计 文件展示组件:使用树形结构展示目录层级,配合递归组件实现无限嵌套 上传下载功能:通过axios与后端API交互,支持拖拽上传和分片上传 权限控制系统:基…

vue中实现文件导入

vue中实现文件导入

文件导入的基本实现 在Vue中实现文件导入通常通过HTML的<input type="file">元素结合Vue的事件处理完成。创建一个文件选择按钮,监听change事件获取用户选择的文件…