当前位置:首页 > PHP

php 实现下载

2026-02-15 15:57:59PHP

实现文件下载的基本方法

在PHP中实现文件下载通常涉及设置正确的HTTP头信息,以便浏览器将响应视为文件下载而非页面显示。以下是几种常见方法:

直接输出文件内容

$file_path = '/path/to/file.pdf';
header('Content-Description: File Transfer');
header('Content-Type: application/octet-stream');
header('Content-Disposition: attachment; filename="'.basename($file_path).'"');
header('Content-Length: ' . filesize($file_path));
readfile($file_path);
exit;

从数据库读取二进制数据

// 假设$file_content包含二进制数据,$file_name是下载文件名
header('Content-Type: application/octet-stream');
header('Content-Disposition: attachment; filename="'.$file_name.'"');
echo $file_content;
exit;

处理大文件下载

对于大文件下载,可以使用分块读取方式减少内存消耗:

$file = @fopen($file_path, 'rb');
if ($file) {
    header('Content-Type: application/octet-stream');
    header('Content-Disposition: attachment; filename="'.basename($file_path).'"');
    while (!feof($file)) {
        print fread($file, 1024*8);
        ob_flush();
        flush();
    }
    fclose($file);
}
exit;

安全注意事项

验证用户权限和文件路径非常重要,防止目录遍历攻击:

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

// 检查文件是否在允许的目录中
if (strpos($real_path, $base_dir) === 0 && file_exists($real_path)) {
    // 安全下载代码
} else {
    die('Invalid file request');
}

常见问题解决

中文文件名乱码问题

$file_name = '中文文件.txt';
header('Content-Disposition: attachment; filename*=UTF-8\'\'' . rawurlencode($file_name));

强制下载而非浏览器打开

即使文件类型可以被浏览器直接显示(如PDF),强制下载:

header('Content-Type: application/force-download');

进度显示实现

通过输出缓冲可以实现简单的下载进度显示:

ob_start();
$file_size = filesize($file_path);
$chunk_size = 1024*1024;
$bytes_sent = 0;

while ($bytes_sent < $file_size) {
    echo file_get_contents($file_path, false, null, $bytes_sent, $chunk_size);
    $bytes_sent += $chunk_size;
    ob_flush();
    flush();
}

php   实现下载

标签: php
分享给朋友:

相关文章

git php实现

git php实现

Git 与 PHP 的集成实现 使用 PHP 执行 Git 命令 通过 PHP 的 exec()、shell_exec() 或 passthru() 函数可以直接调用 Git 命令,适用于服务器端操作…

php实现表单

php实现表单

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

php验证码实现

php验证码实现

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

php实现搜索

php实现搜索

PHP实现搜索功能的方法 在PHP中实现搜索功能通常涉及数据库查询和用户输入的匹配。以下是几种常见的实现方式: 使用MySQL LIKE语句 通过简单的LIKE语句实现基础搜索: $searchT…

基于php的设计与实现

基于php的设计与实现

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

php实现跳转

php实现跳转

PHP 实现页面跳转的方法 在 PHP 中实现页面跳转有多种方式,以下是常见的几种方法及其适用场景: 使用 header() 函数 通过 header() 函数发送 HTTP 头部信息实现跳转。注意…