1
我想让用户下载大型视频文件。由于安全原因,这些文件位于公用文件夹之外。IIS 7.5上的PHP - 大文件下载块连接,直到下载完成
我正在使用fopen(),feof()和fread()的组合来下载chunck中的文件。
下载工作正常。该视频已下载,并且工作得很好。问题在于下载过程中。任何正在下载文件的用户都无法继续浏览该网站,直到该文件被下载。浏览器尝试建立连接,但在文件下载时挂起。下载完成后,立即建立连接。其他用户在下载过程中可以很好地浏览网站,所以它不像整个服务器挂起或者其他任何东西。
我正在使用安装在IIS服务器上的PHP(CakePHP)。
的代码片段:
$name = "filename.mp4";
$folder = "private/folder/";
$handle = fopen($folder.$name, "rb");
if(!$handle)
{
echo "File not found";
}
else
{
header("Content-length:".filesize($folder.$name));
header("Content-Type: video/mp4");
header("Content-Disposition: attachment; filename='filename.mp4'");
header("Content-Transfer-Encoding: binary");
session_write_close(); // this is the solution
while(!feof($handle))
{
$buffer = fread($handle, 1*(1024*1024));
echo $buffer;
ob_flush();
flush();
}
}
您是否在下载中使用会话? –
你的代码出现错误,添加一个“after filename.mp4” – Geert
引用错误只在这个例子中,在实际的代码中它是正确的,我现在已经修复它在代码片段中了 – Botch