当前位置:首页 > PHP

php下载文件实现

2026-01-15 13:41:32PHP

PHP 下载文件实现方法

使用 header() 函数强制下载

设置合适的 HTTP 头信息,强制浏览器下载文件而非直接打开。

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

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;

分块下载大文件

对于大文件,可采用分块读取方式减少内存消耗。

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

动态生成内容下载

直接将字符串内容作为文件下载,无需物理文件。

$content = "This will be downloaded as text file";
header('Content-Type: text/plain');
header('Content-Disposition: attachment; filename="data.txt"');
echo $content;

安全注意事项

  • 验证文件路径防止目录遍历攻击
  • 限制可下载文件类型
  • 对用户输入进行严格过滤
$allowed_path = '/safe/directory/';
$requested_file = $_GET['file'];
if (strpos(realpath($requested_file), $allowed_path) !== 0) {
    die('Invalid file path');
}

进度显示实现

结合 JavaScript 可创建进度条显示。

// PHP 部分
header('Content-Length: ' . filesize($file_path));

// JavaScript 部分
/*
xhr.onprogress = function(e) {
    if (e.lengthComputable) {
        var percent = (e.loaded / e.total) * 100;
        progressBar.style.width = percent + '%';
    }
};
*/

常见 MIME 类型对照

根据文件类型设置正确的 Content-Type:

  • PDF: application/pdf
  • ZIP: application/zip
  • JPEG: image/jpeg
  • Excel: application/vnd.ms-excel
  • Word: application/msword

断点续传支持

实现 Range 请求支持:

php下载文件实现

if (isset($_SERVER['HTTP_RANGE'])) {
    // 解析Range头并实现部分内容发送
    header('HTTP/1.1 206 Partial Content');
    header('Content-Range: bytes ' . $start . '-' . $end . '/' . $size);
}

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

相关文章

php实现socket

php实现socket

PHP 实现 Socket 通信 PHP 可以通过 socket 扩展实现网络通信,支持 TCP/UDP 协议。以下是实现 Socket 通信的核心步骤和代码示例。 创建 TCP 服务器 //…

php 实现登录

php 实现登录

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

基于php的设计与实现

基于php的设计与实现

PHP 设计与实现的关键要素 环境搭建与框架选择 PHP开发需配置服务器环境(如Apache/Nginx)、PHP版本(建议7.4+)及数据库(MySQL/MariaDB)。主流框架包括Laravel…

php实现接口

php实现接口

PHP 实现接口的方法 在 PHP 中,接口(Interface)用于定义一组方法的规范,而不实现具体功能。类可以实现一个或多个接口,并必须实现接口中定义的所有方法。 定义接口 接口使用 inter…

php实现定时

php实现定时

PHP 实现定时任务的方法 PHP 本身是脚本语言,通常需要借助外部工具或框架实现定时任务。以下是几种常见方法: 使用 Cron 任务 Linux 系统自带的 Cron 是常用的定时任务工具。通过编…

php 无限分类的实现

php 无限分类的实现

无限分类的实现方法 无限分类通常用于构建树形结构数据,如商品分类、多级菜单等。以下是几种常见的实现方式: 邻接列表模型(Adjacency List) 邻接列表是最简单的实现方式,通过在每个节点中存…