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

处理大文件下载

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

php实现文件下载

$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 文件。

php实现文件下载

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
分享给朋友:

相关文章

vue文件下载后端实现

vue文件下载后端实现

Vue 文件下载后端实现 在 Vue 项目中实现文件下载功能通常需要前后端配合。后端主要负责生成文件并提供下载接口,前端通过调用接口触发下载。以下是常见的后端实现方法(以 Node.js/Expres…

php实现异步

php实现异步

PHP 实现异步的方法 PHP 本身是同步执行的脚本语言,但可以通过以下方法模拟异步操作或实现异步效果: 使用多进程(pcntl_fork) 通过 pcntl_fork 创建子进程实现异步,适用于…

php实现静态

php实现静态

静态化实现方法 PHP实现静态化主要通过生成HTML文件或缓存机制来减少服务器动态解析的开销。以下是几种常见方法: 生成静态HTML文件 通过file_put_contents()将动态内容保存为H…

php mvc 实现

php mvc 实现

PHP MVC 实现方法 MVC(Model-View-Controller)是一种设计模式,用于分离应用程序的逻辑、数据和界面。以下是实现PHP MVC框架的关键步骤。 目录结构 创建以下目录结构…

php 实现无限分类

php 实现无限分类

无限分类的实现方法 无限分类通常用于构建多层级结构的数据,如商品分类、菜单管理等。以下是几种常见的实现方式: 邻接列表模型(Adjacency List) 这是最简单的实现方式,每个分类记录存储其父…

php实现支付宝支付

php实现支付宝支付

支付宝支付集成步骤 准备工作 在开始集成支付宝支付前,确保已注册支付宝开放平台账号并完成企业实名认证。创建应用后获取APPID、应用私钥和支付宝公钥。 配置支付宝SDK 通过Composer安装支付…