应用程序/八位字节流阻止浏览器


application/octet-stream blocks browser

我编写了一个小型下载门户,并使用application/octet流下载文件。

function fu($filename)
{
     header("Content-Type: application/octet-stream");  
     $save_as_name = basename($filename);   
     header("Content-Disposition: attachment; filename='"$save_as_name'""); 
     readfile($filename);   
}

当我下载一个大文件时,在下载完成之前,无法浏览目录树。

有没有机会同时做到这一点?

您可能正在使用会话。当您在忙于提供下载服务的窗口a中打开了一个会话时,窗口B将无法获得任何页面,因为为a提供服务的PHP进程仍然打开/锁定了会话数据,而B正在等待释放该锁定。

简单的解决方案是在调用readfile()之前的某个时刻调用session_write_close()。这将把会话提交到服务器上的磁盘上,关闭它,然后释放锁,这样其他PHP进程就可以把它取回来。