由于我更改了托管服务商,所以我遇到的问题是,下载文件时无法再浏览页面。 不同之处在于新服务器使用HTTP2协议。它始终在HTTPS上运行。我怀疑这可能是原因吗?
下载受保护,并将通过具有以下功能的POST请求启动:
public static function download($file, $filename='') {
if(file_exists($file) && is_file($file)) {
$filename = $filename ? $filename : basename($file);
$filename = File::ValidateFilename($filename);
$mime = mime_content_type($file);
header('Content-Description: File Transfer');
header('Expires: 0');
header('Content-Type: '.$mime);
header('Content-Disposition: attachment; filename="'.$filename);
header('Expires: 0');
header('Cache-Control: must-revalidate');
header('Pragma: public');
header('Content-Length: '.filesize($file));
readfile($file);
exit;
}
return false;
}
还有其他人遇到问题吗?还是有人知道该怎么办?预先感谢。
答案 0 :(得分:0)
这是我现在解决的方式:
下载全部在服务器上可用,并且是发布请求所要求的,您可以检查用户是否具有权限。
如果单击“下载”,则开始下载PHP函数(带有标题)。但是因为无法在进行一次下载时下载和浏览。
现在,下载不是通过单击下载开始的,而是下载ID和唯一ID存储在数据库中。
在此之前,我创建了几个子域(mirror001.domain.tld,mirror002.domain.tld等),它们都访问了我的镜像脚本。
单击下载按钮不会开始下载,而是将“权限”保存在数据库中,并将其重定向到随机镜像子域。
X = sprintf("%03d",mt_rand(1,50));
Location: mirrorX.domain.tld/UNIQUEID
镜像脚本现在使用唯一ID来检查是否生成了下载,如果是,则该脚本从数据库中删除条目并开始下载。由于下载总是在不同的距离执行,因此每个访问者现在都可以继续在我的网站上浏览。