当前位置:首页 > PHP

php怎么实现下载

2026-02-13 21:37:19PHP

使用 PHP 实现文件下载

通过设置 HTTP 头信息强制浏览器下载文件而非直接打开。以下是一个基本实现方法:

$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 '文件不存在';
}

大文件分块下载

处理大文件时使用分块读取避免内存问题:

php怎么实现下载

$file_path = '/path/to/large/file.zip';
$chunk_size = 1024 * 1024; // 1MB 分块

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

动态生成内容下载

将动态生成的内容(如 CSV 数据)直接提供下载:

php怎么实现下载

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', 'john@example.com', '123456']);
fclose($output);

安全注意事项

验证用户权限和文件路径防止任意文件下载:

$allowed_files = [
    '/safe/path/file1.pdf',
    '/safe/path/file2.zip'
];

$requested_file = $_GET['file'];
if (in_array($requested_file, $allowed_files)) {
    // 安全下载逻辑
} else {
    die('非法文件请求');
}

进度显示实现

通过输出缓冲实现下载进度显示(需客户端JavaScript配合):

ob_start();
$file_path = '/path/to/file';
$total_size = filesize($file_path);
$downloaded = 0;

$handle = fopen($file_path, 'rb');
while (!feof($handle)) {
    $buffer = fread($handle, 8192);
    echo $buffer;
    $downloaded += strlen($buffer);

    $progress = round(($downloaded / $total_size) * 100);
    echo "<script>parent.updateProgress($progress)</script>";
    ob_flush();
    flush();
}
fclose($handle);

这些方法覆盖了从基本文件下载到高级功能的实现,可根据具体需求选择合适的方式。

标签: php
分享给朋友:

相关文章

php实现验证码

php实现验证码

PHP实现验证码的方法 使用GD库生成验证码 GD库是PHP中处理图像的扩展,可用于生成验证码图片。 <?php session_start(); $width = 120; $height…

php 实现接口

php 实现接口

PHP 实现接口的方法 在 PHP 中,接口(Interface)用于定义一组方法的规范,而不包含具体的实现。类可以实现(implement)接口,并必须实现接口中定义的所有方法。 定义接口 接口…

php队列的实现

php队列的实现

PHP队列的实现方式 PHP中实现队列功能可以通过多种方式,根据需求选择适合的方案: 使用数组实现基础队列 PHP数组本身支持队列操作,利用array_push和array_shift函数:…

php实现定时

php实现定时

PHP 实现定时任务的方法 PHP 本身是脚本语言,通常需要借助外部工具或框架实现定时任务。以下是几种常见方法: 使用 Cron 任务 Linux 系统自带的 Cron 是常用的定时任务工具。通过编…

php 实现聊天功能

php 实现聊天功能

PHP 实现聊天功能的方法 使用 WebSocket 和 Ratchet 库 WebSocket 是实现实时聊天的理想选择。Ratchet 是一个 PHP 库,用于处理 WebSocket 连接。…

php实现验证码的识别

php实现验证码的识别

验证码识别的基本方法 验证码识别通常分为手动实现和第三方工具两种方式。手动实现需要图像处理和机器学习知识,而第三方工具则更快捷。 使用Tesseract OCR识别验证码 Tesseract是一个开…