当前位置:首页 > 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实现推送

php实现推送

PHP 实现推送功能的方法 PHP 实现推送功能可以通过多种方式完成,包括 WebSocket、Server-Sent Events (SSE)、长轮询或第三方推送服务。以下是几种常见的方法: 使用…

php实现下载

php实现下载

PHP实现文件下载 使用PHP实现文件下载可以通过设置HTTP头部信息强制浏览器下载文件而非直接打开。以下是几种常见的方法: 方法一:直接输出文件内容 $file_path = 'path/to/…

php实现统计

php实现统计

PHP 实现统计功能 在 PHP 中实现统计功能通常涉及数据的收集、处理和展示。以下是一些常见的统计实现方法: 数据库数据统计 通过 SQL 查询可以直接从数据库中获取统计结果: $conn =…

php 实现跳转

php 实现跳转

PHP 实现页面跳转的方法 在PHP中,实现页面跳转可以通过多种方式完成,以下是几种常用的方法: 使用header函数 header函数是PHP中最常用的跳转方法,通过发送HTTP头部信息实现跳转。…

php 无限分类的实现

php 无限分类的实现

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

php实现视频直播

php实现视频直播

PHP 实现视频直播的基本方法 PHP 本身并不直接处理视频流,但可以作为后端支持视频直播系统的搭建。以下是几种常见的实现方式: 使用第三方流媒体服务 利用现成的流媒体平台(如 Wowza、Red5…