// download.php
<?php
require_once 'file.func.php';
$filename = $_GET['filename'];
down_file($filename);
// file.func.php中的下载函数
function down_file(string $filename, $allowDownExt=['png','jpg','jpeg','gif','txt','html','tar','zip']) {
// 检测下载文件是否存在并可读
if (!is_file($filename)) {
return false;
}
// 检测文件类型是否允许下载
$ext = strtolower(pathinfo($filename,PATHINFO_EXTENSION));
if (!in_array($ext,$allowDownExt)) {
return false;
}
// 通过heander()发送头信息
// 告诉浏览器输出的是字节流
header('content-type:application/octet-stream');
// 告诉浏览器返回的文件大小是按照字节计算的
header('Accept-Ranges:bytes');
// 告诉浏览器返回的文件大小
header('Accept-Length:'.filesize($filename));
// 告诉浏览器如何处理文件(这里是作为附件处理), 告诉浏览器最终下载完的文件名称
header('Content-Disposition:attachment:filename=Daniel_'.basename($filename));
// 读取文件中的内容
readfile($filename);
exit;
}
错误出现在
Disposition:attachment:filename=Daniel_'.basename($filename));
attachment 后面应该是分号而不是冒号, 因为这个错误下载的文件名是'download.php', 内容是tar文件里面内容的字节流形式
真是新手错误TAT