当前位置:首页 > 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;

通过文件流输出

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

php怎么实现下载文件

$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 并下载:

php怎么实现下载文件

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 处理部分下载请求:

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

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

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

相关文章

php实现文件下载

php实现文件下载

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

php实现树

php实现树

PHP实现树结构的方法 在PHP中实现树结构通常可以通过递归或迭代的方式完成。以下是几种常见的实现方法: 递归实现树结构 递归是处理树结构的自然方式,尤其适用于具有未知深度的树。 class Tr…

php验证码实现

php验证码实现

验证码实现方法 在PHP中实现验证码功能通常涉及生成随机字符串或数字,将其转换为图像,并通过会话(Session)进行验证。以下是几种常见的实现方式: 使用GD库生成图像验证码 GD库是PHP内置的…

php 购物车实现

php 购物车实现

数据库设计 购物车功能通常需要设计数据库表存储商品和用户信息。常见的表包括products(商品表)、users(用户表)和cart(购物车表)。cart表通常包含字段:id(主键)、user_id(…

php搜索功能实现

php搜索功能实现

实现基本的PHP搜索功能 使用MySQL数据库和PHP实现简单的关键词搜索功能。需要确保数据库中有可供搜索的表和数据。 // 连接数据库 $conn = new mysqli('localhost'…

php实现博客

php实现博客

使用PHP实现博客系统 数据库设计 创建数据库表存储博客文章和用户信息。常见的表包括posts(文章)和users(用户)。 CREATE TABLE users ( id INT AUTO…