当前位置:首页 > 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() 逐块读取大文件

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

$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;
}

强制下载特定类型文件

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

$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)) {
    // 执行下载逻辑
}

处理中文文件名

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

php代码实现文件下载

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

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

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

相关文章

java如何删除文件

java如何删除文件

删除文件的基本方法 使用 java.io.File 类的 delete() 方法可以删除文件。如果文件存在且删除成功,返回 true;否则返回 false。 import java.io…

vue 实现文件目录

vue 实现文件目录

Vue 实现文件目录结构 Vue 项目通常采用模块化设计,合理的目录结构有助于代码维护和团队协作。以下是常见的 Vue 项目目录结构及说明: 基础目录结构(基于 Vue CLI 生成) proje…

css网页制作代码

css网页制作代码

以下是一些常用的CSS网页制作代码示例,涵盖布局、样式和交互效果: 基础布局与样式 重置浏览器默认样式 * { margin: 0; padding: 0; box-sizing: b…

php下载文件实现

php下载文件实现

PHP 下载文件实现方法 使用 header() 函数强制下载 设置合适的 HTTP 头信息,强制浏览器下载文件而非直接打开。 $file_path = '/path/to/file.pdf'; $…

vue实现登录代码

vue实现登录代码

以下是一个基于 Vue.js 的登录功能实现示例,包含表单验证和异步请求处理: 基础组件结构 <template> <div class="login-container"&g…

vue拖拽实现低代码

vue拖拽实现低代码

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