当前位置:首页 > 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字符的文件名进行编码处理。

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

php代码实现文件下载

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

相关文章

淘宝css代码制作

淘宝css代码制作

在淘宝店铺装修中,CSS代码用于自定义页面样式,提升视觉效果和用户体验。以下是常见的CSS代码制作方法和应用场景: 自定义店铺背景 通过CSS可以修改店铺背景颜色或图片,代码示例如下: body…

vue实现文件预览展示

vue实现文件预览展示

Vue 实现文件预览展示的方法 使用第三方库预览常见文件类型 对于常见的文件类型(如 PDF、图片、视频等),可以使用现成的 Vue 组件库来实现预览功能。 PDF 预览:使用 vue-pdf…

vue怎么实现文本代码实现

vue怎么实现文本代码实现

Vue 实现文本代码展示的方法 在 Vue 中展示代码文本通常需要结合语法高亮和格式化的功能,以下是几种常见的实现方式: 使用 <pre> 和 <code> 标签 通过 H…

java如何删除文件

java如何删除文件

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

css网页制作代码

css网页制作代码

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

网页表格制作css代码

网页表格制作css代码

基础表格样式 使用CSS为HTML表格添加基础样式,包括边框、间距和背景色: table { width: 100%; border-collapse: collapse; margin…