当前位置:首页 > PHP

php代码实现文件下载

2026-01-28 19:43:52PHP

实现文件下载的基本方法

使用PHP的header()函数设置HTTP头部信息,配合readfile()函数实现文件下载。

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

if (file_exists($file_path)) {
    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;
} else {
    echo '文件不存在';
}

处理大文件下载

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

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

if (file_exists($file_path)) {
    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));

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

限制下载权限

添加权限验证确保只有授权用户可以下载文件。

session_start();
if (!isset($_SESSION['user_id'])) {
    die('请先登录');
}

$allowed_files = ['file1.pdf', 'file2.zip'];
$requested_file = $_GET['file'];

if (in_array($requested_file, $allowed_files)) {
    $file_path = '/secure/files/' . $requested_file;
    // 继续下载逻辑
} else {
    die('无权下载此文件');
}

强制下载特定MIME类型

明确指定文件类型而不是使用application/octet-stream

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

$file_ext = pathinfo($file_path, PATHINFO_EXTENSION);
if (array_key_exists($file_ext, $mime_types)) {
    header('Content-Type: ' . $mime_types[$file_ext]);
}

处理中文文件名

对包含非ASCII字符的文件名进行编码处理。

php代码实现文件下载

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

标签: 代码文件
分享给朋友:

相关文章

php 实现文件下载

php 实现文件下载

实现文件下载的基本方法 使用 PHP 实现文件下载的核心是通过设置 HTTP 头部信息,强制浏览器将文件作为附件下载而非直接显示。以下是一个基础实现示例: $file_path = '/path/t…

vue实现代码插件

vue实现代码插件

Vue 实现代码插件的方法 使用第三方库(如 Prism.js 或 Highlight.js) 安装 Prism.js 或 Highlight.js 库,这些库专门用于代码高亮显示。在 Vue 项目中…

vue实现文件的下载

vue实现文件的下载

使用 window.open 方法 通过 window.open 直接打开文件链接触发下载,适用于简单的文件下载场景。 代码示例: window.open('文件URL', '_blank'); 使…

vue实现拖动文件移动

vue实现拖动文件移动

Vue 实现文件拖动移动 实现文件拖动移动功能通常涉及 HTML5 的拖放 API 和 Vue 的事件处理。以下是具体实现方法: 基础拖放实现 在 Vue 组件中设置拖放区域并处理相关事件: &l…

vue axios实现文件下载

vue axios实现文件下载

使用 Axios 实现文件下载 在 Vue 项目中,可以通过 Axios 发送请求实现文件下载功能。以下是具体实现方法: 发送 GET 请求下载文件 axios({ method: 'get',…

vue路由实现代码

vue路由实现代码

Vue 路由实现代码 Vue Router 是 Vue.js 的官方路由库,用于构建单页面应用(SPA)。以下是 Vue Router 的基本实现代码示例: 安装 Vue Router 通过 npm…