当前位置:首页 > 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);

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

相关文章

旋转相册制作css文件

旋转相册制作css文件

旋转相册制作CSS文件 旋转相册通常通过CSS动画和3D变换实现,以下是一个完整的CSS文件示例,用于创建一个3D旋转相册效果。 基础HTML结构 在CSS文件之前,需确保HTML结构包含相册容器和…

vue文件下载后端实现

vue文件下载后端实现

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

java如何创建文件

java如何创建文件

使用 File 类创建文件 通过 File 类的 createNewFile() 方法创建文件。此方法返回布尔值,表示文件是否成功创建。 import java.io.File; import ja…

react如何代码优化

react如何代码优化

减少不必要的重新渲染 使用 React.memo 包装函数组件以避免在 props 未变化时重新渲染。对于类组件,可以通过 shouldComponentUpdate 或继承 PureComponen…

vue文件底层实现

vue文件底层实现

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

js实现轮播代码

js实现轮播代码

基础轮播实现 使用HTML、CSS和JavaScript创建一个简单的轮播效果。HTML部分定义轮播容器和图片元素。 <div class="carousel"> <div c…