当前位置:首页 > PHP

php下载文件实现

2026-01-15 13:41:32PHP

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));
flush();
readfile($file_path);
exit;

分块下载大文件

对于大文件,可采用分块读取方式减少内存消耗。

php下载文件实现

$chunk_size = 1024 * 1024; // 1MB per chunk
$handle = fopen($file_path, 'rb');
while (!feof($handle)) {
    echo fread($handle, $chunk_size);
    flush();
}
fclose($handle);

动态生成内容下载

直接将字符串内容作为文件下载,无需物理文件。

$content = "This will be downloaded as text file";
header('Content-Type: text/plain');
header('Content-Disposition: attachment; filename="data.txt"');
echo $content;

安全注意事项

  • 验证文件路径防止目录遍历攻击
  • 限制可下载文件类型
  • 对用户输入进行严格过滤
$allowed_path = '/safe/directory/';
$requested_file = $_GET['file'];
if (strpos(realpath($requested_file), $allowed_path) !== 0) {
    die('Invalid file path');
}

进度显示实现

结合 JavaScript 可创建进度条显示。

php下载文件实现

// PHP 部分
header('Content-Length: ' . filesize($file_path));

// JavaScript 部分
/*
xhr.onprogress = function(e) {
    if (e.lengthComputable) {
        var percent = (e.loaded / e.total) * 100;
        progressBar.style.width = percent + '%';
    }
};
*/

常见 MIME 类型对照

根据文件类型设置正确的 Content-Type:

  • PDF: application/pdf
  • ZIP: application/zip
  • JPEG: image/jpeg
  • Excel: application/vnd.ms-excel
  • Word: application/msword

断点续传支持

实现 Range 请求支持:

if (isset($_SERVER['HTTP_RANGE'])) {
    // 解析Range头并实现部分内容发送
    header('HTTP/1.1 206 Partial Content');
    header('Content-Range: bytes ' . $start . '-' . $end . '/' . $size);
}

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

相关文章

vue怎么实现文件树

vue怎么实现文件树

Vue 实现文件树的方法 使用递归组件 递归组件是处理嵌套数据结构的理想方式。文件树通常包含文件夹和文件的嵌套结构,适合用递归组件实现。 <template> <ul>…

php实现打印功能

php实现打印功能

PHP实现打印功能的方法 在PHP中实现打印功能可以通过多种方式完成,包括直接输出到浏览器、生成PDF文件、调用打印机接口等。以下是几种常见的方法: 直接输出HTML内容 PHP可以通过echo或…

vue实现文件下载

vue实现文件下载

使用 Blob 对象和 URL.createObjectURL 通过创建 Blob 对象生成文件内容,利用 URL.createObjectURL 生成临时链接,再通过动态创建 <a> 标…

vue实现静态文件下载

vue实现静态文件下载

实现静态文件下载的方法 在Vue项目中实现静态文件下载可以通过多种方式完成,以下是几种常见的方法: 使用<a>标签下载 将静态文件放置在项目的public目录下,通过<a&g…

vue实现文件预览展示

vue实现文件预览展示

Vue 实现文件预览展示的方法 使用第三方库预览常见文件类型 对于常见的文件类型(如 PDF、图片、视频等),可以使用现成的 Vue 组件库来实现预览功能。 PDF 预览:使用 vue-pdf 或…

vue实现录音文件播放

vue实现录音文件播放

实现录音文件播放的方法 在Vue中实现录音文件播放需要结合HTML5的Web Audio API或第三方库。以下是两种常见的方法: 使用HTML5 Audio元素 通过Vue动态绑定<aud…