当前位置:首页 > PHP

php代码实现文件下载

2026-04-03 01:25:42PHP

PHP 文件下载实现方法

使用 PHP 实现文件下载功能可以通过设置 HTTP 头部信息并输出文件内容来完成。以下是几种常见方法:

使用 readfile() 函数

$file = 'path/to/file.ext';
if (file_exists($file)) {
    header('Content-Description: File Transfer');
    header('Content-Type: application/octet-stream');
    header('Content-Disposition: attachment; filename="'.basename($file).'"');
    header('Expires: 0');
    header('Cache-Control: must-revalidate');
    header('Pragma: public');
    header('Content-Length: ' . filesize($file));
    readfile($file);
    exit;
}

使用 fread() 逐块读取大文件

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

php代码实现文件下载

$file = 'large_file.zip';
$chunk_size = 1024*1024; // 1MB chunks

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

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

强制下载特定类型文件

控制特定文件类型的下载行为:

php代码实现文件下载

$file = 'document.pdf';
if (file_exists($file)) {
    header('Content-Type: application/pdf');
    header('Content-Disposition: attachment; filename="downloaded.pdf"');
    readfile($file);
    exit;
}

安全下载注意事项

  1. 验证文件路径,防止目录遍历攻击
  2. 限制可下载文件目录
  3. 对用户权限进行检查

安全下载示例:

$base_dir = '/safe/download/directory/';
$requested_file = basename($_GET['file']); // 防止路径遍历
$file_path = $base_dir . $requested_file;

if (file_exists($file_path) && is_file($file_path)) {
    // 执行下载逻辑
}

处理中文文件名

解决中文文件名乱码问题:

$file = '中文文件.txt';
$encoded_filename = urlencode($file);
header('Content-Disposition: attachment; filename="'.$encoded_filename.'"');

这些方法覆盖了从简单文件下载到大文件处理、安全考虑以及特殊字符处理等常见需求。根据实际应用场景选择合适的方法,特别注意安全性方面的处理。

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

相关文章

vue扫码登录代码实现

vue扫码登录代码实现

Vue 扫码登录实现方案 准备工作 确保项目已安装 Vue 2/3 及相关依赖,需要后端提供生成二维码和验证扫码状态的接口。 生成二维码 使用 qrcode 库生成登录二维码,需调用后端接口获取唯一…

php实现文件下载

php实现文件下载

PHP实现文件下载的方法 通过PHP实现文件下载功能,可以采用多种方式,以下是几种常见的实现方法: 使用header()函数强制下载 设置HTTP头信息,强制浏览器下载文件而非直接打开: $fi…

php实现文件的下载

php实现文件的下载

PHP 实现文件下载的方法 在 PHP 中实现文件下载功能通常需要设置正确的 HTTP 头信息,并输出文件内容。以下是几种常见的实现方式: 使用 header() 函数强制下载 通过设置 Conte…

vue实现动画代码

vue实现动画代码

Vue 动画实现方法 Vue 提供了多种方式实现动画效果,包括内置过渡组件、CSS 动画库集成以及第三方动画库结合。以下是几种常见实现方法: 使用 Vue 内置过渡组件 Vue 的 <tran…

vue实现文件进度

vue实现文件进度

Vue 实现文件上传进度 使用 Vue 实现文件上传进度可以通过结合 axios 或原生 XMLHttpRequest 的进度事件来实现。以下是两种常见方法: 使用 axios 上传文件并显…

vue拖拽实现低代码

vue拖拽实现低代码

Vue拖拽实现低代码方案 基于现成库的方案(推荐) 使用成熟的拖拽库可以快速实现低代码功能,例如: vuedraggable:基于Sortable.js的Vue拖拽组件 vue-draggable-…