当前位置:首页 > PHP

php实现下载文件

2026-04-03 01:45:40PHP

PHP实现下载文件的方法

使用header()函数强制下载

设置合适的HTTP头部信息,强制浏览器下载文件而非直接打开。以下是一个基本示例:

$file_path = '/path/to/your/file.pdf';
$file_name = 'document.pdf';

if (file_exists($file_path)) {
    header('Content-Description: File Transfer');
    header('Content-Type: application/octet-stream');
    header('Content-Disposition: attachment; filename="' . basename($file_name) . '"');
    header('Expires: 0');
    header('Cache-Control: must-revalidate');
    header('Pragma: public');
    header('Content-Length: ' . filesize($file_path));
    flush();
    readfile($file_path);
    exit;
} else {
    http_response_code(404);
    die('File not found');
}

分块下载大文件

对于大文件,使用分块读取可以降低内存消耗:

php实现下载文件

$chunk_size = 1024 * 1024; // 1MB per chunk
$handle = fopen($file_path, 'rb');
while (!feof($handle)) {
    echo fread($handle, $chunk_size);
    flush();
}
fclose($handle);

动态生成内容下载

直接输出动态生成的内容作为下载文件:

php实现下载文件

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 Doe', 'john@example.com', '123456789']);
fclose($output);

安全注意事项

验证文件路径防止目录遍历攻击:

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

if (strpos($real_path, $base_dir) === 0 && file_exists($real_path)) {
    // 安全的文件路径
} else {
    die('Invalid file path');
}

处理中文文件名

确保中文文件名正确显示:

$encoded_name = rawurlencode($file_name);
header('Content-Disposition: attachment; filename*=UTF-8\'\'' . $encoded_name);

以上方法涵盖了PHP实现文件下载的主要场景,包括静态文件下载、大文件处理和动态内容生成下载。根据实际需求选择合适的方法,并始终注意安全性问题。

标签: 文件php
分享给朋友:

相关文章

vue实现静态文件下载

vue实现静态文件下载

实现静态文件下载的方法 在Vue项目中实现静态文件下载可以通过多种方式完成,以下是几种常见的方法: 使用<a>标签下载 将静态文件放置在项目的public目录下,通过<a>…

php实现购物车

php实现购物车

PHP实现购物车功能 购物车功能是电商网站的核心模块之一,通常涉及商品添加、删除、数量修改和结算等操作。以下是使用PHP实现购物车功能的几种方法。 使用Session存储购物车数据 Session是…

php实现搜索功能

php实现搜索功能

实现基本的搜索功能 在PHP中实现搜索功能通常涉及数据库查询。以下是一个简单的实现方式,假设使用MySQL数据库: <?php // 连接数据库 $conn = new mysqli('loc…

php 实现登录

php 实现登录

PHP 登录功能实现 使用 PHP 实现登录功能通常需要结合数据库验证和会话管理。以下是一个基本的登录实现流程: 数据库准备 创建用户表存储用户名和密码(建议使用哈希加密): CREATE TAB…

php 实现秒杀

php 实现秒杀

PHP 实现秒杀的关键技术 秒杀系统需要解决高并发、超卖、性能瓶颈等问题。以下是实现秒杀的核心方案: 使用 Redis 预减库存 将商品库存提前加载到 Redis 中,通过原子操作保证库存准确性:…

php 实现单链表

php 实现单链表

单链表的基本概念 单链表是一种线性数据结构,由节点组成,每个节点包含数据域和指向下一个节点的指针域。链表的头节点是访问整个链表的入口。 单链表的节点类实现 在PHP中,可以通过类来定义链表节点。每个…