当前位置:首页 > PHP

php怎么实现下载文件

2026-02-13 22:23:22PHP

实现文件下载的基本方法

使用PHP的header()函数设置HTTP头信息,配合readfile()函数实现文件下载。确保在输出文件内容前没有其他输出,避免头信息发送失败。

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

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;

处理大文件下载

对于大文件下载,使用分块读取方式避免内存耗尽问题。

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

安全验证

添加权限验证和路径安全检查,防止目录遍历攻击。

if (!user_has_permission()) {
    die('Access denied');
}

$base_dir = '/secure/downloads/';
$real_path = realpath($base_dir . $requested_file);
if (strpos($real_path, $base_dir) !== 0) {
    die('Invalid file path');
}

断点续传支持

实现HTTP Range请求处理,支持断点续传功能。

$file_size = filesize($file_path);
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/$file_size");
    header("Content-Length: " . ($end - $start + 1));

    $fp = fopen($file_path, 'rb');
    fseek($fp, $start);
    echo fread($fp, ($end - $start + 1));
    fclose($fp);
}

下载统计功能

记录下载日志到数据库,用于统计分析。

$stmt = $pdo->prepare("INSERT INTO download_logs 
    (file_id, user_id, download_time) 
    VALUES (?, ?, NOW())");
$stmt->execute([$file_id, $user_id]);

php怎么实现下载文件

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

相关文章

php实现打印功能

php实现打印功能

PHP 实现打印功能的方法 PHP 可以通过多种方式实现打印功能,具体取决于打印的目标(如打印机、PDF、网页等)和需求(如直接打印、生成打印预览等)。以下是几种常见的实现方式: 使用 JavaSc…

java如何创建文件

java如何创建文件

使用 File 类创建文件 通过 File 类的 createNewFile() 方法创建文件。此方法返回布尔值,表示文件是否成功创建。 import java.io.File; import j…

php实现socket

php实现socket

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

php实现栈

php实现栈

栈的基本概念 栈(Stack)是一种遵循后进先出(LIFO)原则的数据结构。核心操作包括: push:元素入栈。 pop:元素出栈(返回并移除栈顶元素)。 peek:查看栈顶元素(不移…

php验证码实现

php验证码实现

验证码实现方法 在PHP中实现验证码功能通常涉及生成随机字符串或数字,将其转换为图像,并通过会话(Session)进行验证。以下是几种常见的实现方式: 使用GD库生成图像验证码 GD库是PHP内置…

php 登录实现

php 登录实现

PHP 登录实现 PHP 登录功能通常包括用户认证、会话管理和安全性措施。以下是实现 PHP 登录功能的关键步骤。 数据库准备 创建一个用户表存储用户信息,通常包括用户名、密码(加密存储)和其他必…