当前位置:首页 > PHP

php 实现下载功能

2026-01-28 21:10:21PHP

使用 header 函数强制下载

在 PHP 中,可以通过设置 HTTP 头信息强制浏览器下载文件而不是直接打开。关键头信息包括 Content-TypeContent-DispositionContent-Length

$file_path = '/path/to/file.pdf';
$file_name = basename($file_path);
$file_size = filesize($file_path);

header('Content-Type: application/octet-stream');
header('Content-Disposition: attachment; filename="' . $file_name . '"');
header('Content-Length: ' . $file_size);

readfile($file_path);
exit;

处理大文件分块下载

对于大文件,可以使用分块读取方式避免内存问题。通过设置 Content-Range 头实现断点续传功能。

php 实现下载功能

$file_path = '/path/to/large_file.iso';
$chunk_size = 1024 * 1024; // 1MB chunks

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

生成动态内容下载

可以直接输出动态生成的内容作为下载文件。常见场景如导出 CSV 或 Excel 数据。

php 实现下载功能

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

$data = [['Name', 'Email'], ['John', 'john@example.com']];
$output = fopen('php://output', 'w');
foreach ($data as $row) {
    fputcsv($output, $row);
}
fclose($output);

安全下载控制

实现安全下载需要验证文件路径,防止目录遍历攻击。使用 realpath 确保文件在指定目录内。

$base_dir = '/safe/download/directory/';
$requested_file = $_GET['file'];
$file_path = realpath($base_dir . $requested_file);

if ($file_path && strpos($file_path, $base_dir) === 0 && is_file($file_path)) {
    header('Content-Type: application/octet-stream');
    header('Content-Disposition: attachment; filename="' . basename($file_path) . '"');
    readfile($file_path);
} else {
    header('HTTP/1.0 404 Not Found');
    echo 'File not found';
}

进度显示和限速控制

通过控制输出速度和计算已传输字节数,可以实现下载进度显示和限速功能。

$speed = 1024 * 50; // 50KB/s
$file_path = '/path/to/file.zip';
$handle = fopen($file_path, 'rb');

while (!feof($handle)) {
    $buffer = fread($handle, $speed);
    echo $buffer;
    ob_flush();
    flush();
    sleep(1);
}
fclose($handle);

标签: 功能php
分享给朋友:

相关文章

vue实现收货功能

vue实现收货功能

Vue实现收货功能的基本思路 收货功能通常涉及前端界面交互、后端数据更新和状态管理。在Vue中,可以通过组件化开发实现这一功能,结合API调用与状态管理工具(如Vuex或Pinia)。 创建收货按钮…

前端实现拖拽功能vue

前端实现拖拽功能vue

使用 HTML5 拖放 API 在 Vue 中可以通过 HTML5 的原生拖放 API 实现拖拽功能。需要监听 dragstart、dragover 和 drop 事件。 <template&…

php 实现自动收货

php 实现自动收货

PHP 实现自动收货功能 自动收货功能通常用于电商系统,在订单超过一定时间未手动确认收货时自动完成订单。以下是实现方法: 数据库设计 需要订单表包含以下关键字段: CREATE TABLE ord…

git php实现

git php实现

Git 与 PHP 的集成实现 使用 PHP 执行 Git 命令 通过 PHP 的 exec()、shell_exec() 或 passthru() 函数可以直接调用 Git 命令,适用于服务器端操作…

php实现留言板功能

php实现留言板功能

PHP 留言板功能实现 数据库设计 创建数据库表 messages,包含以下字段: id:自增主键 name:留言者姓名(VARCHAR) email:留言者邮箱(VARCHAR) content:…

php实现注册

php实现注册

注册功能实现步骤 数据库准备 创建用户表,包含字段如id、username、password、email等。示例SQL: CREATE TABLE users ( id INT AUTO_I…