当前位置:首页 > PHP

php 实现下载

2026-02-15 15:57:59PHP

实现文件下载的基本方法

在PHP中实现文件下载通常涉及设置正确的HTTP头信息,以便浏览器将响应视为文件下载而非页面显示。以下是几种常见方法:

直接输出文件内容

$file_path = '/path/to/file.pdf';
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));
readfile($file_path);
exit;

从数据库读取二进制数据

// 假设$file_content包含二进制数据,$file_name是下载文件名
header('Content-Type: application/octet-stream');
header('Content-Disposition: attachment; filename="'.$file_name.'"');
echo $file_content;
exit;

处理大文件下载

对于大文件下载,可以使用分块读取方式减少内存消耗:

$file = @fopen($file_path, 'rb');
if ($file) {
    header('Content-Type: application/octet-stream');
    header('Content-Disposition: attachment; filename="'.basename($file_path).'"');
    while (!feof($file)) {
        print fread($file, 1024*8);
        ob_flush();
        flush();
    }
    fclose($file);
}
exit;

安全注意事项

验证用户权限和文件路径非常重要,防止目录遍历攻击:

$base_dir = '/secure/download/directory/';
$requested_file = $_GET['file'];
$real_path = realpath($base_dir . $requested_file);

// 检查文件是否在允许的目录中
if (strpos($real_path, $base_dir) === 0 && file_exists($real_path)) {
    // 安全下载代码
} else {
    die('Invalid file request');
}

常见问题解决

中文文件名乱码问题

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

强制下载而非浏览器打开

即使文件类型可以被浏览器直接显示(如PDF),强制下载:

header('Content-Type: application/force-download');

进度显示实现

通过输出缓冲可以实现简单的下载进度显示:

php   实现下载

ob_start();
$file_size = filesize($file_path);
$chunk_size = 1024*1024;
$bytes_sent = 0;

while ($bytes_sent < $file_size) {
    echo file_get_contents($file_path, false, null, $bytes_sent, $chunk_size);
    $bytes_sent += $chunk_size;
    ob_flush();
    flush();
}

标签: php
分享给朋友:

相关文章

php实现即时通讯

php实现即时通讯

PHP 实现即时通讯的方案 即时通讯(IM)可以通过多种方式实现,PHP 作为服务器端语言,通常需要结合前端技术(如 WebSocket、AJAX)或第三方服务来实现实时通信。以下是几种常见的实现方式…

php实现一个

php实现一个

PHP 实现一个简单的计算器 创建一个基本的计算器,支持加、减、乘、除运算。以下是一个完整的实现代码示例: <?php $result = ""; if ($_SERVER["REQUEST_…

php实现统计

php实现统计

PHP 实现统计功能 在 PHP 中实现统计功能通常涉及数据的收集、处理和展示。以下是一些常见的统计实现方法: 数据库数据统计 通过 SQL 查询可以直接从数据库中获取统计结果: $conn =…

php 伪静态实现

php 伪静态实现

PHP 伪静态实现方法 伪静态(URL Rewrite)是一种通过服务器配置将动态URL转换为静态URL的技术,提升URL的可读性和SEO效果。以下是几种常见的实现方式: 使用Apache的mod_…

php变量的实现

php变量的实现

PHP变量的实现机制 PHP变量的实现基于Zend引擎的底层数据结构。核心结构体zval用于存储变量类型和值,其设计允许动态类型转换和高效内存管理。 zval结构体 PHP变量通过zval结构体实现…

php数据库实现

php数据库实现

PHP 连接 MySQL 数据库 使用 mysqli 扩展连接 MySQL 数据库: <?php $servername = "localhost"; $username = "usernam…