当前位置:首页 > PHP

php实现文件下载

2026-01-08 12:10:45PHP

PHP 实现文件下载的方法

使用 header() 函数强制下载

设置正确的 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;
}

处理大文件下载

对于大文件,可以使用分块读取的方式,避免内存问题。

$file = 'path/to/large_file.zip';
$chunk_size = 1024 * 1024; // 1MB chunks

if (file_exists($file)) {
    header('Content-Type: application/octet-stream');
    header('Content-Disposition: attachment; filename="'.basename($file).'"');
    header('Content-Length: ' . filesize($file));

    $handle = fopen($file, 'rb');
    while (!feof($handle)) {
        echo fread($handle, $chunk_size);
        ob_flush();
        flush();
    }
    fclose($handle);
    exit;
}

动态生成文件并下载

可以直接生成内容并作为文件下载,比如生成 CSV 文件。

header('Content-Type: text/csv');
header('Content-Disposition: attachment; filename="example.csv"');

$output = fopen('php://output', 'w');
fputcsv($output, ['Name', 'Email', 'Phone']);
fputcsv($output, ['John Doe', 'john@example.com', '123456789']);
fclose($output);
exit;

安全注意事项

确保下载文件时进行权限检查,防止任意文件下载漏洞。

$allowed_files = [
    'file1.pdf' => 'path/to/file1.pdf',
    'file2.zip' => 'path/to/file2.zip'
];

if (isset($_GET['file']) && array_key_exists($_GET['file'], $allowed_files)) {
    $file = $allowed_files[$_GET['file']];
    // 使用上面的下载代码
} else {
    die('Invalid file request');
}

处理中文文件名

对于包含中文的文件名,需要进行编码转换。

$file = 'path/to/中文文件.pdf';
$filename = rawurlencode(basename($file));
header('Content-Disposition: attachment; filename*=UTF-8\'\'' . $filename);

这些方法涵盖了 PHP 实现文件下载的主要场景,包括基本下载、大文件处理、动态文件生成和安全防护等方面。

php实现文件下载

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

相关文章

vue实现文件模板展示

vue实现文件模板展示

Vue 实现文件模板展示的方法 在 Vue 中实现文件模板展示功能,可以通过多种方式完成。以下是几种常见的实现方法: 使用动态组件 动态组件允许根据条件切换不同的模板组件。通过 :is 属性绑定组…

vue文件下载后端实现

vue文件下载后端实现

后端实现文件下载的常见方法 在Vue项目中,后端实现文件下载通常通过API接口返回文件流或URL。以下是几种常见后端技术栈的实现方式: Spring Boot实现 使用ResponseEntity返…

vue实现录音文件播放

vue实现录音文件播放

使用 Vue 实现录音文件播放 准备工作 确保项目中已安装必要的依赖,如 vue-audio-recorder 或原生 Web Audio API。录音文件播放通常涉及录音、存储和播放三个核心环节。…

实现.vue文件

实现.vue文件

创建.vue文件的基本结构 一个标准的.vue文件包含三个部分:模板(template)、脚本(script)和样式(style)。这种结构允许开发者在一个文件中管理组件的HTML、JavaScrip…

php实现打印功能

php实现打印功能

PHP实现打印功能的方法 在PHP中实现打印功能可以通过多种方式完成,包括直接输出到浏览器、生成PDF文件、调用打印机接口等。以下是几种常见的方法: 直接输出HTML内容 PHP可以通过echo或p…

php实现分页

php实现分页

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