【问题标题】:Page does not load during download下载期间页面未加载
【发布时间】:2020-02-16 16:19:00
【问题描述】:

自从我更换了主机后,我遇到了下载文件时无法再浏览页面的问题。 不同的是,新服务器使用的是 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;
}

还有其他人有问题吗?或者有人知道该怎么做吗?提前致谢。

【问题讨论】:

  • http/2 不应该以任何方式影响应用程序
  • 是的。但自从我移动了我的网络服务器后,它就没有用了。这是我看到的唯一区别。在旧服务器上,它工作得非常好。您可以下载多个文件并继续在网站上冲浪,现在您必须等到下载完成。
  • 使用<?php print phpinfo(); ?> 创建一个简单的页面。比较版本、加载的库等。了解不同之处可能会有所帮助(如果超过 HTTP2)。
  • 我不能再访问旧服务器了。

标签: php apache download http2


【解决方案1】:

这就是我现在解决的方法:

所有下载都在服务器上可用,它们是通过post请求请求的,您可以检查用户是否有权限。

如果点击了下载,那么 PHP 函数(带有标题)就会开始下载。但是因为在运行一次下载时无法下载和冲浪。

现在下载不是通过单击下载开始的,而是下载 ID 和唯一 ID 存储在数据库中。

在此之前,我创建了几个子域(mirror001.domain.tld、mirror002.domain.tld 等),它们都可以访问我的镜像脚本。

点击下载按钮不会开始下载,而是将“权限”保存在数据库中,并将其重定向到一个随机的镜像子域。

X = sprintf("%03d",mt_rand(1,50));
Location: mirrorX.domain.tld/UNIQUEID

镜像脚本现在使用唯一 ID 检查是否生成了下载,如果是,则脚本从数据库中删除条目并开始下载。因为下载总是在不同的距离执行,所以现在每个访问者都可以继续在我的网站上冲浪。

【讨论】:

    猜你喜欢
    • 2019-10-22
    • 1970-01-01
    • 2018-06-22
    • 2015-04-21
    • 2012-05-12
    • 1970-01-01
    • 1970-01-01
    • 2016-06-10
    • 2017-10-11
    相关资源
    最近更新 更多