PHP - 正在下载大文件时阻止页面

时间:2015-01-07 15:59:44

标签: php asynchronous download

我有一个download.php页面,每次用户点击时都会调用它。#34;下载"我页面上的按钮。该文件大约为1 GB。但是,在完全下载文件之前,当前页面被阻止。有没有办法让我可以将其作为异步任务,以便用户在将文件下载到他的计算机时仍然可以使用该网站。

感谢。

2 个答案:

答案 0 :(得分:0)

如果您正在使用会话,那么在开始任何长时间运行的过程之前,您应该致电session_write_close(),否则您将在整个网站范围内受阻。从那里的文档:

  

会话数据通常在脚本终止后存储,无需调用session_write_close(),但由于会话数据被锁定以防止并发写入,因此任何时候只有一个脚本可以对会话进行操作。

因此,如果你有一个长时间运行的脚本调用session_start()并且没有调用session_write_close()然后结果是,那么现在需要访问会话的任何页面都必须等待长时间运行的脚本在它开始之前完成执行。因此,网站范围内阻止。

这可能会或可能不会解决您的问题,因为我不确定您的意思"阻止"在你的问题中。

答案 1 :(得分:0)

首先创建如下的下载链接: -

<a class="download" href="/myfiles/video/file.pdf"> Dow

nload file.pdf

然后在Jquery:

$(document).ready(function(){

   $(document).on('.download', 'click', function(){

       var href = $(this).href;
       $('<iframe />', { src :  href }).appendTo('body');    
       return false; // prevent from default action, can be done with e.preventDefault() also

   }) // __download

}); // __ document ready

这种技术被许多大型网站如facebook,github等使用,它不会阻止当前页面,一切都会像以前一样工作但浏览器会显示文件保存对话框下载文件,我没有测试这个代码所以可能是一些syntex错误,谢谢:)