当前位置:首页 > 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
分享给朋友:

相关文章

php实现文件上传

php实现文件上传

文件上传的基本实现 在PHP中实现文件上传需要使用$_FILES超全局数组处理上传的文件数据。表单必须设置enctype="multipart/form-data"属性,并采用POST方法提交。 创…

css文件制作详细点

css文件制作详细点

CSS 文件制作指南 CSS(层叠样式表)用于控制网页的样式和布局。以下是详细的制作方法: 创建 CSS 文件 新建一个文本文件,将其保存为 .css 扩展名,例如 styles.css。确保文件名…

vue实现录音文件播放

vue实现录音文件播放

实现录音文件播放的方法 在Vue中实现录音文件播放需要结合HTML5的Web Audio API或第三方库。以下是两种常见的方法: 使用HTML5 Audio元素 通过Vue动态绑定<aud…

php实现递归

php实现递归

递归的基本概念 递归是一种函数调用自身的技术,适用于解决可以分解为相同子问题的问题。在PHP中,递归需要明确的终止条件(基线条件),否则会导致无限循环。 递归实现阶乘 阶乘是经典的递归案例,n! =…

php 实现队列

php 实现队列

PHP 实现队列的方法 PHP 可以通过多种方式实现队列功能,以下是几种常见的实现方法: 使用数组实现队列 PHP 数组可以通过 array_push 和 array_shift 函数模拟队列的先进…

如何编译java文件

如何编译java文件

安装JDK 确保系统已安装Java Development Kit(JDK)。可通过命令行输入 javac -version 和 java -version 验证。若未安装,需从Oracle或Open…