PHP下载冻结其他所有内容

时间:2017-08-08 19:28:36

标签: php download

我运行以下代码在后台下载文件,而不是仅仅重定向到浏览器中的文件,但是我无法点击页面上的任何其他内容,直到整个文件被下载。我可以在代码中修改一下来修复它吗?

当点击一个链接时,它被加载到一个单独的php文件中,因此用户不会看到从哪里获取文件($ filepath),它也受到会话的保护:

header("Cache-control: private");
header("Content-Type: application/octet-stream");

if ($download) {
       header("Content-Disposition: attachment; filename=\"" . $title . "\"");
       header('Content-Transfer-Encoding: binary');
} else {
       header("Content-Disposition: inline; filename=\"" . $title . "\"");
}

// Disable caching
header('Cache-Control: no-cache, no-store, must-revalidate'); // HTTP 1.1.
header('Pragma: no-cache'); // HTTP 1.0.
header('Expires: 0'); // Proxies.

readfile($filepath);

编辑//我仍然无法解决这个问题。现在我尝试使用这个AJAX代码,但它仍然锁定整个页面,直到文件完全下载,它只在后台加载,而不是加载到硬盘。

$('.download').on('click', function(e) {
    e.preventDefault();
    var self = $(this);
    $.ajax({ type: 'POST',
         url: self.attr('href'),   
         async: true,
         success : function(response)
         {
         }
    })
});

1 个答案:

答案 0 :(得分:2)

免责声明:以下所有内容均适用于默认的基于文件的会话。对于其他处理程序,它可能不会成立。

会话阻止:只要一个页面打开会话,就不会提供相同会话ID的其他页面。

解决方案是在完成后立即关闭会话。

所以放

session_write_close();

在您开始提供文件之前。

它会关闭提供该文件的页面的会话,之后可以提供其他页面,即使该文件尚未完全下载。

参考文献: