当前位置:首页 > PHP

php实现文件下载代码

2026-04-02 23:42:41PHP

实现文件下载的基本方法

使用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('Content-Length: ' . filesize($file_path));
    readfile($file_path);
    exit;
} else {
    echo '文件不存在';
}

处理大文件下载

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

php实现文件下载代码

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

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

安全下载注意事项

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

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) {
    // 安全下载逻辑
} else {
    die('非法文件请求');
}

支持断点续传

实现HTTP Range请求支持:

$file_path = '/path/to/resumable.file';
$file_size = filesize($file_path);
$range = isset($_SERVER['HTTP_RANGE']) ? $_SERVER['HTTP_RANGE'] : false;

if ($range) {
    list($size_unit, $range_orig) = explode('=', $range, 2);
    if ($size_unit == 'bytes') {
        list($range, $extra_ranges) = explode(',', $range_orig, 2);
    } else {
        $range = '';
    }
} else {
    $range = '';
}

if ($range) {
    // 处理范围请求
} else {
    // 完整文件下载
}

常用MIME类型设置

根据文件扩展名设置正确的Content-Type:

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

$ext = strtolower(pathinfo($file_path, PATHINFO_EXTENSION));
if (isset($mime_types[$ext])) {
    header('Content-Type: ' . $mime_types[$ext]);
} else {
    header('Content-Type: application/octet-stream');
}

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

相关文章

vue文件下载后端实现

vue文件下载后端实现

Vue 文件下载后端实现 在 Vue 项目中实现文件下载功能通常需要前后端配合。后端主要负责生成文件并提供下载接口,前端通过调用接口触发下载。以下是常见的后端实现方法(以 Node.js/Expres…

如何生成react代码

如何生成react代码

使用 Create React App 生成项目 安装 Node.js 后,通过命令行工具运行以下命令创建新项目: npx create-react-app my-app cd my-app npm…

php 实现文件下载

php 实现文件下载

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

vue文件底层实现

vue文件底层实现

Vue 文件的底层实现 Vue 单文件组件(SFC,即 .vue 文件)的底层实现依赖于 Vue 的编译工具链,主要包括 @vue/compiler-sfc 和构建工具(如 Vite 或 Webpac…

vue抽奖代码实现

vue抽奖代码实现

Vue 抽奖代码实现 基础抽奖组件结构 使用 Vue 3 的 Composition API 实现抽奖功能,核心包括转盘动画、奖品列表和抽奖逻辑。以下为组件基础结构: <templat…

vue实现文件导入

vue实现文件导入

文件导入的基本实现 在Vue中实现文件导入通常通过HTML的<input type="file">元素结合File API完成。创建一个文件选择组件,监听change事件获取用户选择的文件…