当前位置:首页 > PHP

php实现下载

2026-02-13 13:41:36PHP

PHP 实现文件下载的方法

使用 header()readfile()

通过设置 HTTP 头信息并直接输出文件内容实现下载功能。

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

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;

分块下载大文件

对于大文件,使用分块读取避免内存溢出。

php实现下载

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

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;

强制下载非本地文件

从远程 URL 下载并直接转发给用户。

$remote_url = 'https://example.com/file.zip';
header('Content-Type: application/octet-stream');
header('Content-Disposition: attachment; filename="downloaded.zip"');
readfile($remote_url);
exit;

安全注意事项

  • 验证文件路径防止目录遍历攻击:

    php实现下载

    $base_dir = '/safe/directory/';
    $user_path = $_GET['file'];
    $real_path = realpath($base_dir . $user_path);
    
    if (strpos($real_path, $base_dir) === 0 && file_exists($real_path)) {
        // 安全下载逻辑
    }
  • 对于敏感文件,建议存储在 web 根目录之外并通过 PHP 脚本代理访问。

处理浏览器缓存

添加随机参数强制浏览器重新下载:

header("Cache-Control: no-cache, must-revalidate");
header("Expires: Sat, 26 Jul 1997 05:00:00 GMT");

标签: php
分享给朋友:

相关文章

php队列的实现

php队列的实现

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

php实现推送

php实现推送

PHP 实现推送功能的方法 PHP 实现推送功能可以通过多种方式完成,包括 WebSocket、Server-Sent Events (SSE)、长轮询或第三方推送服务。以下是几种常见的方法: 使用…

php实现https

php实现https

PHP 实现 HTTPS 请求 在 PHP 中实现 HTTPS 请求,可以通过多种方式完成,包括使用内置函数、cURL 扩展或第三方库。以下是几种常见的方法: 使用 file_get_content…

php变量的实现

php变量的实现

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

php 链表实现

php 链表实现

在 PHP 中实现链表可以通过类来模拟链表节点(Node)和链表(LinkedList)结构。以下是链表的完整实现示例,包含基础操作如插入、删除、遍历等。 链表节点类(Node) 链表的基本单元是节…

php 实现锁

php 实现锁

PHP 实现锁的常见方法 文件锁(flock) 利用 flock 函数对文件进行独占锁定,适用于单机环境。 $fp = fopen("lockfile.lock", "w+"); if (f…