php实现文件下载

小文件下载

<?php
// 要下载的文件路径
$file = 'path/to/your/file.zip';

// 检查文件是否存在
if (!file_exists($file)) {
    die('文件不存在');
}

// 获取文件信息
$filename = basename($file);
$filesize = filesize($file);
$filetype = mime_content_type($file); // 注意:mime_content_type() 可能在某些环境中不可用

// 如果 mime_content_type() 不可用,可以手动设置 Content-Type,例如对于 ZIP 文件:
// $filetype = 'application/zip';

// 设置HTTP头信息
header('Content-Description: File Transfer');
header('Content-Type: ' . $filetype);
header('Content-Disposition: attachment; filename="' . $filename . '"');
header('Content-Transfer-Encoding: binary');
header('Expires: 0');
header('Cache-Control: must-revalidate');
header('Pragma: public');
header('Content-Length: ' . $filesize);

// 清除输出缓冲区并关闭输出缓冲(通常不是必需的,但在某些情况下可能有用)
clearstatcache();
flush();

// 读取文件并输出到浏览器
readfile($file);

// 脚本执行完毕
exit;
?>

大文件下载

<?php
// 要下载的文件路径
$file = 'path/to/your/file.zip';

// 检查文件是否存在
if (!file_exists($file)) {
    die('文件不存在');
}

// 获取文件信息
$filename = basename($file);
// 注意:filesize() 在这里不是必需的,但如果你想要设置 Content-Length 头,可以使用它
// $filesize = filesize($file);

// 设置一个默认的 MIME 类型,或者根据文件扩展名动态设置
$filetype = 'application/zip'; // 对于 ZIP 文件
// 或者使用更复杂的逻辑来确定 MIME 类型,例如通过文件扩展名

// 设置HTTP头信息
header('Content-Description: File Transfer');
header('Content-Type: ' . $filetype);
header('Content-Disposition: attachment; filename="' . $filename . '"');
header('Content-Transfer-Encoding: binary');
header('Expires: 0');
header('Cache-Control: must-revalidate');
header('Pragma: public');
// 如果你知道文件大小,可以取消注释下一行并设置正确的 $filesize
// header('Content-Length: ' . $filesize);

// 打开文件以二进制读取模式
$fp = fopen($file, 'rb');

// 检查文件是否成功打开
if ($fp === false) {
    die('无法打开文件');
}

// 循环读取文件内容并输出到浏览器
while (!feof($fp)) {
    echo fread($fp, 1024); // 每次读取1024字节,可以根据需要调整块大小
    flush(); // 强制将输出缓冲区的内容发送到浏览器(对于大文件很有用)
}

// 关闭文件指针
fclose($fp);

// 脚本执行完毕
exit;
?>

我的个人PHP项目:

PHP搜索引擎 WindSearch: https://github.com/rock365/windsearch
WindSearch在线开发文档:https://rock365.github.io/ 偶尔无法访问,多刷新几次就行

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值