当前位置:首页 > PHP

php实现下载

2026-02-13 13:41:36PHP

PHP 实现文件下载的方法

使用 header()readfile()

通过设置 HTTP 头信息并直接输出文件内容实现下载功能。

$file_path = 'path/to/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;

分块下载大文件

对于大文件,使用分块读取避免内存溢出。

php实现下载

$file_path = 'path/to/large_file.zip';
$chunk_size = 1024 * 1024; // 1MB per chunk

header('Content-Type: application/octet-stream');
header('Content-Disposition: attachment; filename="' . basename($file_path) . '"');

$handle = fopen($file_path, 'rb');
while (!feof($handle)) {
    echo fread($handle, $chunk_size);
    ob_flush();
    flush();
}
fclose($handle);
exit;

强制下载非本地文件

从远程 URL 下载并直接转发给用户。

$remote_url = 'https://example.com/file.zip';
header('Content-Type: application/octet-stream');
header('Content-Disposition: attachment; filename="downloaded.zip"');
readfile($remote_url);
exit;

安全注意事项

  • 验证文件路径防止目录遍历攻击:

    php实现下载

    $base_dir = '/safe/directory/';
    $user_path = $_GET['file'];
    $real_path = realpath($base_dir . $user_path);
    
    if (strpos($real_path, $base_dir) === 0 && file_exists($real_path)) {
        // 安全下载逻辑
    }
  • 对于敏感文件,建议存储在 web 根目录之外并通过 PHP 脚本代理访问。

处理浏览器缓存

添加随机参数强制浏览器重新下载:

header("Cache-Control: no-cache, must-revalidate");
header("Expires: Sat, 26 Jul 1997 05:00:00 GMT");

标签: php
分享给朋友:

相关文章

php实现定时任务

php实现定时任务

PHP 实现定时任务的几种方法 在 PHP 中实现定时任务可以通过多种方式完成,具体选择取决于项目需求和服务器环境。以下是常见的实现方法: 使用 Cron 任务 Cron 是 Linux 系统中常用…

php记住密码怎么实现

php记住密码怎么实现

使用Cookie实现记住密码功能 在PHP中,可以通过设置Cookie来记住用户的登录状态。以下是一个简单的实现方式: // 用户登录验证成功后 if ($login_success) {…

php实现表单

php实现表单

PHP 表单基础实现 创建一个简单的 PHP 表单需要 HTML 表单结构和 PHP 处理脚本。以下是一个完整的示例: HTML 表单部分 (form.html) <form actio…

php 路由实现

php 路由实现

PHP 路由实现方法 在 PHP 中实现路由功能有多种方式,以下是几种常见的实现方法: 使用原生 PHP 实现 通过解析 URL 并匹配对应的控制器和动作: $request = $_SERVER…

php实现排序

php实现排序

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

php 实现购物车

php 实现购物车

PHP 实现购物车功能 购物车功能是电子商务网站的核心部分,可以通过 PHP 和 Session 或数据库来实现。以下是两种常见的实现方式: 使用 Session 存储购物车数据 Session…