当前位置:首页 > PHP

php怎么实现下载文件

2026-02-27 21:16:59PHP

实现文件下载的基本方法

在PHP中实现文件下载可以通过设置HTTP头信息强制浏览器下载文件而非直接显示。以下是基本实现方式:

$file_path = '/path/to/your/file.ext';
$file_name = 'download_name.ext';

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));
    readfile($file_path);
    exit;
}

处理大文件下载

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

php怎么实现下载文件

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

安全下载实现

为防止目录遍历攻击,应对文件路径进行验证:

php怎么实现下载文件

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

if($real_path && strpos($real_path, $base_dir) === 0 && is_file($real_path)){
    // 安全下载代码
} else {
    die('Invalid file');
}

断点续传支持

实现断点续传需要处理HTTP_RANGE头:

$size = filesize($file_path);
$start = 0;
$end = $size - 1;

if(isset($_SERVER['HTTP_RANGE'])){
    $range = $_SERVER['HTTP_RANGE'];
    $range = str_replace('bytes=', '', $range);
    list($start, $end) = explode('-', $range);

    header('HTTP/1.1 206 Partial Content');
    header('Content-Range: bytes '.$start.'-'.$end.'/'.$size);
} else {
    header('HTTP/1.1 200 OK');
}

header('Accept-Ranges: bytes');
header('Content-Length: '.($end - $start + 1));

常见MIME类型设置

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

$mime_types = [
    'txt' => 'text/plain',
    'pdf' => 'application/pdf',
    'jpg' => 'image/jpeg',
    'png' => 'image/png',
    'zip' => 'application/zip'
];

$ext = strtolower(pathinfo($file_path, PATHINFO_EXTENSION));
if(array_key_exists($ext, $mime_types)){
    header('Content-Type: '.$mime_types[$ext]);
} else {
    header('Content-Type: application/octet-stream');
}

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

相关文章

php实现websocket

php实现websocket

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

php怎么实现登录功能

php怎么实现登录功能

数据库准备 创建用户表存储登录信息,通常包括用户名、密码(需加密)等字段。示例SQL: CREATE TABLE users ( id INT AUTO_INCREMENT PRIMARY…

php实现博客

php实现博客

使用PHP实现博客系统 数据库设计 创建数据库表存储博客文章和用户信息。常见的表包括posts(文章)和users(用户)。 CREATE TABLE users ( id INT AUTO…

php实现mvc

php实现mvc

PHP 实现 MVC 架构 MVC(Model-View-Controller)是一种常用的软件设计模式,将应用程序分为三个核心组件:模型(Model)、视图(View)和控制器(Controller…

php mvc实现

php mvc实现

PHP MVC 实现步骤 模型(Model)层 模型负责数据处理和业务逻辑,通常与数据库交互。创建一个基类模型,其他具体模型继承它。 class Model { protected $db;…

vue 实现文件目录

vue 实现文件目录

Vue 实现文件目录结构 Vue 项目通常采用模块化设计,合理的目录结构有助于代码维护和团队协作。以下是常见的 Vue 项目目录结构及说明: 基础目录结构(基于 Vue CLI 生成) proje…