当前位置:首页 > 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() 清理文件名,避免注入恶意字符。

示例安全处理:

php 实现下载功能

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

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

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

相关文章

vue实现名字查找功能

vue实现名字查找功能

实现名字查找功能 在Vue中实现名字查找功能,可以通过多种方式完成。以下是几种常见的实现方法: 使用v-model和computed属性 创建一个输入框,使用v-model绑定输入的值,通过comp…

git php实现

git php实现

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

php长连接实现

php长连接实现

PHP 长连接实现方法 长连接(Keep-Alive)允许客户端与服务器在一次TCP连接中发送和接收多个HTTP请求/响应,减少重复建立连接的开销。以下是PHP中实现长连接的几种方式: 配置HTTP…

php实现分页功能

php实现分页功能

PHP实现分页功能的方法 数据库查询与分页逻辑 使用SQL的LIMIT和OFFSET实现分页。假设每页显示10条数据,当前页码为$page: $perPage = 10; $page = isset…

php实现排序

php实现排序

PHP 数组排序方法 PHP 提供了多种内置函数用于数组排序,适用于不同的排序需求。以下是常见的排序方法: 按值升序排序 sort() 函数对数组按值升序排序,重置键名(索引数组适用): $num…

vue实现拨号功能

vue实现拨号功能

Vue 实现拨号功能 使用 tel: 协议实现基础拨号 在 Vue 中可以通过 HTML 的 <a> 标签结合 tel: 协议实现拨号功能。这种方式适用于移动端浏览器,点击后会直接调用系统…