当前位置:首页 > PHP

php实现文件下载

2026-01-13 12:24:47PHP

PHP实现文件下载的方法

通过PHP实现文件下载功能,可以采用多种方式,以下是几种常见的实现方法:

使用header()函数强制下载

设置HTTP头信息,强制浏览器下载文件而非直接打开:

$file_path = '/path/to/file.pdf';
$file_name = 'document.pdf';

header('Content-Description: File Transfer');
header('Content-Type: application/octet-stream');
header('Content-Disposition: attachment; filename="'.basename($file_name).'"');
header('Expires: 0');
header('Cache-Control: must-revalidate');
header('Pragma: public');
header('Content-Length: ' . filesize($file_path));
readfile($file_path);
exit;

分块下载大文件

对于大文件下载,可以采用分块读取方式,避免内存溢出:

$file_path = '/path/to/large_file.zip';
$chunk_size = 1024 * 1024; // 1MB chunks

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

$handle = fopen($file_path, 'rb');
while (!feof($handle)) {
    echo fread($handle, $chunk_size);
    ob_flush();
    flush();
}
fclose($handle);
exit;

动态生成文件并下载

当需要动态生成文件内容时,可以直接输出到浏览器:

header('Content-Type: text/csv');
header('Content-Disposition: attachment; filename="data.csv"');

$output = fopen('php://output', 'w');
fputcsv($output, ['Name', 'Email', 'Phone']);
fputcsv($output, ['John Doe', 'john@example.com', '123456789']);
fclose($output);
exit;

安全注意事项

  • 验证文件路径,防止目录遍历攻击:
    
    $base_dir = '/safe/directory/';
    $file_name = $_GET['file'];
    $file_path = realpath($base_dir . $file_name);

if (strpos($file_path, $base_dir) !== 0 || !file_exists($file_path)) { die('Invalid file'); }

php实现文件下载



- 设置适当的MIME类型,确保浏览器正确处理文件类型

这些方法涵盖了从简单文件下载到大文件处理的各种场景,开发者可以根据具体需求选择合适的方式实现文件下载功能。

标签: 文件php
分享给朋友:

相关文章

java如何创建文件

java如何创建文件

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

php实现搜索

php实现搜索

PHP实现搜索功能的方法 在PHP中实现搜索功能通常涉及数据库查询和用户输入的匹配。以下是几种常见的实现方式: 使用MySQL LIKE语句 通过简单的LIKE语句实现基础搜索: $searchT…

php搜索功能实现

php搜索功能实现

实现基本的PHP搜索功能 使用MySQL数据库和PHP实现简单的关键词搜索功能。需要确保数据库中有可供搜索的表和数据。 // 连接数据库 $conn = new mysqli('localhost'…

php 线程实现

php 线程实现

PHP 线程实现方法 PHP 本身是单线程语言,但可以通过扩展或库实现多线程功能。以下是几种常见的实现方式: 使用 pthreads 扩展 pthreads 是一个 PHP 扩展,允许在 PHP 中…

uniapp 服务文件

uniapp 服务文件

uniapp 服务文件的概念 在 uniapp 中,服务文件通常指用于封装业务逻辑、接口请求或通用功能的 JavaScript 文件。这类文件通常存放在项目的 common 或 utils 目录下,便…

php变量的实现

php变量的实现

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