当前位置:首页 > PHP

php实现文件的下载

2026-02-13 13:09:50PHP

使用 header() 函数实现文件下载

通过设置 HTTP 头部信息,强制浏览器下载文件而非直接打开。核心是 Content-DispositionContent-Type 头部。

$file_path = '/path/to/file.pdf';
$file_name = 'document.pdf';

header('Content-Description: File Transfer');
header('Content-Type: application/octet-stream');
header('Content-Disposition: attachment; filename="' . basename($file_name) . '"');
header('Content-Length: ' . filesize($file_path));
readfile($file_path);
exit;

处理大文件下载

对于大文件,使用分块读取避免内存耗尽:

php实现文件的下载

$chunk_size = 1024 * 1024; // 1MB chunks
$handle = fopen($file_path, 'rb');
while (!feof($handle)) {
    echo fread($handle, $chunk_size);
    ob_flush();
    flush();
}
fclose($handle);

安全下载注意事项

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

php实现文件的下载

$base_dir = '/secure/downloads/';
$requested_file = $_GET['file'];
$real_path = realpath($base_dir . $requested_file);

if ($real_path && strpos($real_path, $base_dir) === 0 && is_file($real_path)) {
    // 安全下载逻辑
} else {
    die('Invalid file requested');
}

动态生成文件下载

对于动态生成的内容(如 CSV),直接输出到下载流:

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

$output = fopen('php://output', 'w');
fputcsv($output, ['Column1', 'Column2']);
// 添加数据行...
fclose($output);

断点续传支持

实现 Range 请求支持,允许暂停后继续下载:

if (isset($_SERVER['HTTP_RANGE'])) {
    // 解析Range头并实现分片发送
} else {
    // 普通完整下载
}

每种方法适用于不同场景,需根据实际需求选择实现方式。安全验证和内存管理是文件下载功能的关键考虑因素。

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

相关文章

js实现文件下载

js实现文件下载

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

php实现树

php实现树

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

php实现定时任务

php实现定时任务

PHP 实现定时任务的几种方法 在 PHP 中实现定时任务可以通过多种方式完成,具体选择取决于项目需求和服务器环境。以下是常见的实现方法: 使用 Cron 任务 Cron 是 Linux 系统中常用…

php无限分类的实现

php无限分类的实现

PHP无限分类的实现 无限分类是一种常见的树形结构数据组织方式,适用于商品分类、菜单管理、地区选择等场景。以下是几种实现方法: 递归实现法 递归是最直观的实现方式,通过函数自身调用来遍历子分类。数据…

php实现定时

php实现定时

PHP 实现定时任务的方法 PHP 本身是脚本语言,通常需要借助外部工具或框架实现定时任务。以下是几种常见方法: 使用 Cron 任务 Linux 系统自带的 Cron 是常用的定时任务工具。通过编…

如何运行java文件

如何运行java文件

运行Java文件的方法 确保已安装Java Development Kit (JDK),可通过命令行输入java -version和javac -version验证安装。 编写Java代码并保存为.…