当前位置:首页 > PHP

php下载实现

2026-03-13 00:58:11PHP

PHP 文件下载实现方法

直接输出文件内容 通过设置 HTTP 头信息并直接输出文件内容实现下载功能。需要指定正确的 Content-Type 和 Content-Disposition。

$file = 'path/to/file.pdf';
header('Content-Description: File Transfer');
header('Content-Type: application/octet-stream');
header('Content-Disposition: attachment; filename="'.basename($file).'"');
header('Content-Length: ' . filesize($file));
readfile($file);
exit;

分块下载大文件 对于大文件下载,可以使用分块读取方式避免内存问题。

$file = 'large_file.zip';
$chunk_size = 1024*1024; // 1MB chunks
$handle = fopen($file, 'rb');
header('Content-Type: application/octet-stream');
header('Content-Disposition: attachment; filename="'.basename($file).'"');

while (!feof($handle)) {
    echo fread($handle, $chunk_size);
    ob_flush();
    flush();
}
fclose($handle);
exit;

安全下载控制 添加权限验证和日志记录等安全措施。

session_start();
if (!isset($_SESSION['user_id'])) {
    die('Access denied');
}

$safe_dir = '/var/www/downloads/';
$requested_file = basename($_GET['file']);
$full_path = $safe_dir . $requested_file;

if (!file_exists($full_path)) {
    die('File not found');
}

// 记录下载日志
file_put_contents('download.log', date('Y-m-d H:i:s').' '.$_SESSION['user_id'].' '.$requested_file.PHP_EOL, FILE_APPEND);

header('Content-Type: application/octet-stream');
header('Content-Disposition: attachment; filename="'.$requested_file.'"');
readfile($full_path);

强制下载特定类型 确保某些文件类型总是触发下载而非在浏览器中打开。

$file = 'document.pdf';
$mime_types = [
    'pdf' => 'application/pdf',
    'zip' => 'application/zip'
];

$ext = strtolower(pathinfo($file, PATHINFO_EXTENSION));
$content_type = $mime_types[$ext] ?? 'application/octet-stream';

header('Content-Type: '.$content_type);
header('Content-Disposition: attachment; filename="'.basename($file).'"');
readfile($file);

处理中文文件名 正确处理包含非ASCII字符的文件名下载。

php下载实现

$file = '中文文件.txt';
$encoded_name = rawurlencode($file);
header('Content-Type: application/octet-stream');
header('Content-Disposition: attachment; filename*=UTF-8\'\''.$encoded_name);
readfile($file);

实现文件下载功能时需要注意文件路径安全、内存使用优化和特殊字符处理等问题。根据具体需求选择合适的实现方式,并确保添加适当的安全验证措施。

标签: php
分享给朋友:

相关文章

php长连接实现

php长连接实现

PHP 长连接实现方法 长连接(Keep-Alive)允许客户端与服务器在一次TCP连接中发送和接收多个HTTP请求/响应,减少重复建立连接的开销。以下是PHP中实现长连接的几种方式: 配置HTTP…

php实现mysql

php实现mysql

PHP 连接 MySQL 的基本方法 PHP 提供了多种方式与 MySQL 数据库进行交互,以下是最常用的几种方法。 使用 MySQLi 扩展 MySQLi 是 MySQL 的改进扩展,支持面向对…

php实现跳转

php实现跳转

PHP 实现页面跳转的方法 在 PHP 中实现页面跳转有多种方式,以下是常见的几种方法及其适用场景: 使用 header() 函数 通过 header() 函数发送 HTTP 头部信息实现跳转。注意…

php 函数实现

php 函数实现

PHP 函数实现基础 PHP 函数的定义使用 function 关键字,后跟函数名和参数列表。函数名不区分大小写,但建议保持一致。 function functionName($param1, $p…

php mvc 实现

php mvc 实现

PHP MVC 实现方法 MVC(Model-View-Controller)是一种设计模式,用于分离应用程序的逻辑、数据和界面。以下是实现PHP MVC框架的关键步骤。 目录结构 创建以下目录结构…

php 实现无限分类

php 实现无限分类

无限分类的实现方法 无限分类通常用于构建多层级结构的数据,如商品分类、菜单管理等。以下是几种常见的实现方式: 邻接列表模型(Adjacency List) 这是最简单的实现方式,每个分类记录存储其父…