当前位置:首页 > PHP

php怎么实现下载文件

2026-01-29 00:14:52PHP

使用 header() 函数强制下载

设置合适的 HTTP 头部信息,指定内容类型为下载文件,并设置文件名:

header('Content-Description: File Transfer');
header('Content-Type: application/octet-stream');
header('Content-Disposition: attachment; filename="example.pdf"');
header('Content-Length: ' . filesize('path/to/file.pdf'));
readfile('path/to/file.pdf');
exit;

通过文件流输出

适用于大文件或动态生成的文件内容,分块读取文件减少内存占用:

$file = 'path/to/large_file.zip';
$chunkSize = 1024 * 1024; // 1MB per chunk
if ($handle = fopen($file, 'rb')) {
    while (!feof($handle)) {
        echo fread($handle, $chunkSize);
        ob_flush();
        flush();
    }
    fclose($handle);
}

处理动态生成的文件

例如将数据库内容导出为 CSV 并下载:

header('Content-Type: text/csv');
header('Content-Disposition: attachment; filename="data.csv"');
$output = fopen('php://output', 'w');
fputcsv($output, ['ID', 'Name', 'Email']); // 写入表头
// 假设从数据库获取数据
foreach ($dataRows as $row) {
    fputcsv($output, $row);
}
fclose($output);

安全注意事项

验证文件路径防止目录遍历攻击:

$requestedFile = basename($_GET['file']); // 过滤非法字符
$filePath = '/safe/directory/' . $requestedFile;
if (!file_exists($filePath)) {
    die('File not found');
}

断点续传支持

通过 HTTP_RANGE 处理部分下载请求:

php怎么实现下载文件

if (isset($_SERVER['HTTP_RANGE'])) {
    $range = $_SERVER['HTTP_RANGE'];
    // 解析范围并处理分片输出
    // 需设置 HTTP/1.1 206 Partial Content 状态码
}

以上方法覆盖了从简单文件下载到大文件分块处理的常见场景,需根据实际需求选择合适方案。注意始终对用户输入的文件名做安全校验,避免路径穿越漏洞。

标签: 文件php
分享给朋友:

相关文章

php实现分页

php实现分页

PHP实现分页的基本方法 使用原生PHP实现分页功能需要结合数据库查询和HTML展示。以下是核心实现步骤: 数据库查询与分页逻辑 // 连接数据库 $conn = new mysqli('loca…

php实现文件下载

php实现文件下载

PHP实现文件下载的方法 通过PHP实现文件下载功能,可以采用多种方式,以下是几种常见的实现方法: 使用header()函数强制下载 设置HTTP头信息,强制浏览器下载文件而非直接打开: $fi…

php 实现验证码

php 实现验证码

使用 PHP 生成验证码 验证码(CAPTCHA)用于防止自动化脚本提交表单,以下是几种常见的 PHP 实现方法。 使用 GD 库生成图片验证码 GD 库是 PHP 的图像处理扩展,可用于生成验证码…

php搜索功能实现的

php搜索功能实现的

PHP 搜索功能实现方法 数据库搜索实现 使用 SQL 的 LIKE 语句进行模糊匹配,适用于小型网站和简单搜索需求。 $searchTerm = $_GET['search']; $query =…

php 无限分类的实现

php 无限分类的实现

无限分类的实现方法 无限分类通常用于构建树形结构数据,如商品分类、多级菜单等。以下是几种常见的实现方式: 邻接列表模型(Adjacency List) 邻接列表是最简单的实现方式,通过在每个节点中存…

vue文件底层实现

vue文件底层实现

Vue 文件的底层实现 Vue 单文件组件(SFC,即 .vue 文件)的底层实现依赖于 Vue 的编译工具链,主要包括 @vue/compiler-sfc 和构建工具(如 Vite 或 Webpac…