当前位置:首页 > PHP

php 实现下载功能

2026-02-13 19:18:43PHP

使用 header 函数实现文件下载

在 PHP 中,可以通过设置 HTTP 头部信息实现文件下载功能。以下是一个基本示例:

$file_path = '/path/to/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="' . $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 '文件不存在';  
}  

通过文件流动态生成下载内容

如果需要动态生成文件内容(如 CSV 或文本文件),可以直接输出到浏览器:

$content = "姓名,年龄,职业\n张三,25,工程师\n李四,30,设计师";  
$file_name = 'data.csv';  

header('Content-Type: text/csv');  
header('Content-Disposition: attachment; filename="' . $file_name . '"');  
echo $content;  
exit;  

处理大文件下载

对于大文件下载,可以使用分块读取以避免内存问题:

$file_path = '/path/to/large_file.zip';  
$file_name = 'large_file.zip';  

if (file_exists($file_path)) {  
    header('Content-Type: application/octet-stream');  
    header('Content-Disposition: attachment; filename="' . $file_name . '"');  
    header('Content-Length: ' . filesize($file_path));  

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

安全性注意事项

  • 验证文件路径,防止目录遍历攻击(如 ../)。
  • 限制用户权限,确保只能下载允许的文件。
  • 使用 basename() 清理文件名,避免注入恶意字符。

示例安全处理:

$user_file = $_GET['file'];  
$safe_file = basename($user_file);  
$file_path = '/safe_dir/' . $safe_file;  

以上方法覆盖了从简单文件下载到动态内容生成和大文件处理的常见需求。

php 实现下载功能

标签: 功能php
分享给朋友:

相关文章

前端vue登录功能实现

前端vue登录功能实现

Vue 登录功能实现步骤 创建登录表单组件 在 Vue 项目中创建一个登录组件,通常命名为 Login.vue。该组件包含用户名和密码输入框以及提交按钮。 <template> &…

vue实现收货功能

vue实现收货功能

Vue实现收货功能的基本思路 收货功能通常涉及前端界面交互、后端数据更新和状态管理。在Vue中,可以通过组件化开发实现这一功能,结合API调用与状态管理工具(如Vuex或Pinia)。 创建收货按…

vue 实现筛选功能

vue 实现筛选功能

实现筛选功能的基本思路 在Vue中实现筛选功能通常涉及以下几个核心步骤:数据绑定、筛选逻辑处理、结果展示。以下是具体实现方法。 数据准备 准备需要筛选的数据源,通常是一个数组,可以存储在Vue组件的…

php实现打印功能

php实现打印功能

PHP实现打印功能的方法 在PHP中实现打印功能可以通过多种方式完成,包括直接输出到浏览器、生成PDF文件、调用打印机接口等。以下是几种常见的方法: 直接输出HTML内容 PHP可以通过echo或…

vue实现聊天功能

vue实现聊天功能

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

vue实现产品使用功能

vue实现产品使用功能

Vue 实现产品功能的关键方法 组件化开发 使用Vue的单文件组件(.vue)将产品功能模块化,每个功能拆分为独立组件。例如产品列表、详情页、购物车等可分别封装为ProductList.vue、Pro…