当前位置:首页 > 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 中实现按钮点击功能可以通过多种方式完成,以下是常见的实现方法: 方法一:使用 v-on 指令 通过 v-on:click 或简写 @click 绑定事件:…

php 实现自动收货

php 实现自动收货

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

php实现linux关机重启功能

php实现linux关机重启功能

通过PHP执行Linux关机或重启命令 PHP可以通过exec()、shell_exec()或system()等函数调用系统命令实现关机或重启功能,但需注意权限问题。 使用exec函数执行命令 //…

php实现登录

php实现登录

PHP 登录功能实现 数据库连接与用户表创建 创建一个数据库连接文件 db.php,用于管理数据库连接。MySQL 示例代码如下: <?php $host = 'localhost'; $db…

vue实现功能插件

vue实现功能插件

Vue 功能插件实现方法 插件基本结构 Vue 插件通常需要暴露一个 install 方法,该方法接收 Vue 构造函数作为参数。基本结构如下: const MyPlugin = { insta…

php实现统计

php实现统计

PHP 实现统计功能 在 PHP 中实现统计功能通常涉及数据的收集、处理和展示。以下是一些常见的统计实现方法: 数据库数据统计 通过 SQL 查询可以直接从数据库中获取统计结果: $conn =…