当前位置:首页 > 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中实现注册功能通常需要结合前端表单和后端API交互。以下是常见的实现方式: 创建注册表单组件 <template> <div class…

git php实现

git php实现

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

php实现linux关机重启功能

php实现linux关机重启功能

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

vue电影功能实现

vue电影功能实现

Vue 电影功能实现 数据获取与展示 使用 Axios 或 Fetch API 从电影 API(如 TMDb、豆瓣 API)获取数据。在 Vue 的 created 或 mounted 生命周期钩子中…

php实现注册登录

php实现注册登录

PHP 注册功能实现 创建数据库表(以 MySQL 为例) CREATE TABLE users ( id INT AUTO_INCREMENT PRIMARY KEY, usern…

php 实现面包屑导航

php 实现面包屑导航

实现面包屑导航的方法 面包屑导航(Breadcrumb Navigation)是一种常见的网站导航方式,用于显示用户当前页面的路径。以下是几种在 PHP 中实现面包屑导航的方法。 基于 URL 路径…