php - 下载期间页面未加载
问题描述
自从我更换了主机后,我遇到了下载文件时无法再浏览页面的问题。不同的是,新服务器使用的是 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;
}
有没有其他人有这个问题,或者有人知道该怎么做吗?提前致谢。
解决方案
这就是我现在解决的方法:
下载都在服务器上可用,它们是通过发布请求请求的,您可以检查用户是否具有权限。
如果单击了下载,则开始下载 PHP 函数(带有标题)。但是因为在运行一次下载时无法下载和冲浪。
现在下载不是通过单击下载开始的,而是下载 ID 和唯一 ID 存储在数据库中。
在此之前,我创建了几个子域(mirror001.domain.tld、mirror002.domain.tld 等),它们都可以访问我的镜像脚本。
单击下载按钮不会开始下载,而是将“权限”保存在数据库中并将其重定向到随机镜像子域。
X = sprintf("%03d",mt_rand(1,50));
Location: mirrorX.domain.tld/UNIQUEID
镜像脚本现在使用唯一 ID 检查是否生成了下载,如果是,则脚本从数据库中删除条目并开始下载。因为下载总是在不同的距离执行,所以现在每个访问者都可以继续在我的网站上冲浪。
推荐阅读
- node.js - 如何在 node.js 中上传图像文件?
- sum - 如何计算当月的金额总和,包括 Power Bi 中前几个月的金额?
- clojure - 消除clojure中的依赖关系
- node.js - 如何避免在量角器中悬停?
- reactjs - 如何在 React Navigation 5 中全局应用应用程序背景颜色
- tensorflow - 我只需要等效于 cv2.threshold nad np.std 的 tensorflow 函数即可在 tensorflow 1.8 中使用
- angularjs - 有没有办法在angularJS中翻译成另一种语言的月份和日期名称?
- mysql - 这个使用 order by 和 left join 的 sql 查询有什么问题?这是正确的方法吗?
- c# - 如何使用信号器以正确的方式处理更新?
- c# - C# Windsor.Castle 异常无法实例化 ApplicatioName.MainWindow