小文件下载
<?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/ 偶尔无法访问,多刷新几次就行