当前位置:首页 > 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中实现文件上传通常结合HTML的<input type="file">元素和FormData对象。通过监听文件选择事件获取文件对象,再通过AJAX或axios发…

如何编译java文件

如何编译java文件

安装JDK 确保系统已安装Java Development Kit(JDK)。可通过命令行输入 javac -version 和 java -version 验证。若未安装,需从Oracle或Open…

vue实现动画代码

vue实现动画代码

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

vue 实现代码

vue 实现代码

Vue 是一个流行的前端框架,用于构建用户界面。以下是一个简单的 Vue 实现代码示例,展示如何创建一个基本的 Vue 应用。 安装 Vue 通过 CDN 引入 Vue: <script s…

vue如何实现文件下载

vue如何实现文件下载

Vue 实现文件下载的方法 使用 <a> 标签下载 通过动态创建 <a> 标签并设置 download 属性实现文件下载。适用于已知文件 URL 或 Blob 对象的情况。…

vue实现预览各种文件

vue实现预览各种文件

实现文件预览功能的方法 在Vue中实现文件预览功能,可以通过多种方式实现,具体取决于文件类型。以下是常见的文件类型及其预览方法: PDF文件预览 使用pdf.js库可以实现PDF文件的预览。安装依赖…