当前位置:首页 > PHP

php怎么实现下载

2026-02-13 21:37:19PHP

使用 PHP 实现文件下载

通过设置 HTTP 头信息强制浏览器下载文件而非直接打开。以下是一个基本实现方法:

$file_path = '/path/to/your/file.pdf'; // 文件路径
$file_name = 'download.pdf'; // 下载时显示的文件名

if (file_exists($file_path)) {
    header('Content-Description: File Transfer');
    header('Content-Type: application/octet-stream');
    header('Content-Disposition: attachment; filename="' . $file_name . '"');
    header('Expires: 0');
    header('Cache-Control: must-revalidate');
    header('Pragma: public');
    header('Content-Length: ' . filesize($file_path));
    readfile($file_path);
    exit;
} else {
    echo '文件不存在';
}

大文件分块下载

处理大文件时使用分块读取避免内存问题:

$file_path = '/path/to/large/file.zip';
$chunk_size = 1024 * 1024; // 1MB 分块

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

动态生成内容下载

将动态生成的内容(如 CSV 数据)直接提供下载:

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

$output = fopen('php://output', 'w');
fputcsv($output, ['Name', 'Email', 'Phone']);
fputcsv($output, ['John', 'john@example.com', '123456']);
fclose($output);

安全注意事项

验证用户权限和文件路径防止任意文件下载:

$allowed_files = [
    '/safe/path/file1.pdf',
    '/safe/path/file2.zip'
];

$requested_file = $_GET['file'];
if (in_array($requested_file, $allowed_files)) {
    // 安全下载逻辑
} else {
    die('非法文件请求');
}

进度显示实现

通过输出缓冲实现下载进度显示(需客户端JavaScript配合):

php怎么实现下载

ob_start();
$file_path = '/path/to/file';
$total_size = filesize($file_path);
$downloaded = 0;

$handle = fopen($file_path, 'rb');
while (!feof($handle)) {
    $buffer = fread($handle, 8192);
    echo $buffer;
    $downloaded += strlen($buffer);

    $progress = round(($downloaded / $total_size) * 100);
    echo "<script>parent.updateProgress($progress)</script>";
    ob_flush();
    flush();
}
fclose($handle);

这些方法覆盖了从基本文件下载到高级功能的实现,可根据具体需求选择合适的方式。

标签: php
分享给朋友:

相关文章

php实现websocket

php实现websocket

PHP 实现 WebSocket WebSocket 是一种在单个 TCP 连接上进行全双工通信的协议。PHP 可以通过多种方式实现 WebSocket 功能,以下是几种常见的方法: 使用 Ratc…

php 购物车实现

php 购物车实现

数据库设计 购物车功能通常需要设计数据库表存储商品和用户信息。常见的表包括products(商品表)、users(用户表)和cart(购物车表)。cart表通常包含字段:id(主键)、user_id(…

php实现一个

php实现一个

PHP 实现一个简单的计算器 创建一个基本的计算器,支持加、减、乘、除运算。以下是一个完整的实现代码示例: <?php $result = ""; if ($_SERVER["REQUEST_…

无限分类实现 php

无限分类实现 php

无限分类的实现方法 无限分类通常用于构建多层级结构的数据,如商品分类、部门架构等。以下是几种常见的实现方式: 邻接列表模式(Adjacency List) 邻接列表是最简单的实现方式,通过在每个记录…

php 实现聊天功能

php 实现聊天功能

PHP 实现聊天功能的方法 使用 WebSocket 和 Ratchet 库 WebSocket 是实现实时聊天的理想选择。Ratchet 是一个 PHP 库,用于处理 WebSocket 连接。…

php 实现目录树

php 实现目录树

实现目录树的方法 在PHP中实现目录树功能,可以通过递归或迭代方式遍历文件系统。以下是两种常见的实现方法: 递归方法 递归是处理目录树的自然方式,适合层级不深的结构: function build…