当前位置:首页 > 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 头实现断点续传功能。

$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 数据。

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';
}

进度显示和限速控制

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

php 实现下载功能

$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.js 是一个渐进式 JavaScript 框架,广泛用于构建用户界面。以下是 Vue 功能的常见实现方法。 数据绑定 Vue 的核心功能之一是数据绑定,通过 v-mod…

vue实现聊天功能

vue实现聊天功能

Vue实现聊天功能的方法 使用WebSocket实现实时通信 安装WebSocket客户端库如socket.io-client,在Vue组件中建立连接。创建一个消息列表和数据输入框,通过WebSock…

vue前端实现打印功能

vue前端实现打印功能

使用Vue实现前端打印功能 使用window.print()方法 Vue中可以直接调用浏览器的window.print()方法实现打印功能。这种方法简单快捷,适用于打印整个页面或特定区域。 meth…

vue实现用户添加功能

vue实现用户添加功能

实现用户添加功能的步骤 表单设计与数据绑定 在Vue组件中设计一个表单,包含用户名、邮箱、密码等字段。使用v-model指令实现双向数据绑定,将表单输入与组件的数据属性关联起来。 <templ…

php如何实现直播

php如何实现直播

实现直播功能的方法 PHP可以通过结合其他技术和工具来实现直播功能。以下是几种常见的方法: 使用流媒体服务器 配置流媒体服务器如Nginx-RTMP、Red5或Wowza。这些服务器支持RTMP协…

php实现mysql

php实现mysql

PHP 连接 MySQL 的基本方法 PHP 提供了多种方式与 MySQL 数据库进行交互,以下是最常用的几种方法。 使用 MySQLi 扩展 MySQLi 是 MySQL 的改进扩展,支持面向对…