在大型文件传输(IIS7.5 PHP)中未使用网页



出于某种原因,我们的Web服务器在提供大文件时没有响应。我们使用Windows平台,因为我们需要远程调用Win32应用程序才能生成要提供的文件。该文件是通过PHP的函数提供的:fpassthru,使用此代码:

if (file_exists($file)) {
$handle = @fopen($file, "rb");
header('Content-Description: File Transfer');
header('Content-Type: video/mp4');
if($stream==0){
    header('Content-Disposition: attachment; filename='.basename($filename.".mp4"));
}
header('Content-Transfer-Encoding: binary');
header('Expires: 0');
header('Cache-Control: must-revalidate');
header('Pragma: public');
header('Content-Length: ' . filesize($file));
ob_end_clean();
fpassthru($handle);
exit;
}

这些文件的大小通常超过1GB,需要一段时间才能传输,但是在此期间,网络服务器将无法提供任何页面。我的Firefox表示它是"连接"的,但别无其他。请注意,其他人正在转移此文件,而不是我,所以IP,不同的会话。

在哪里看?显然,不得不等待5分钟才能获得网站是无法容忍的。预先感谢!

这通常是当您开始发送文件数据之前不关闭会话时引起的。这是因为会话缓存文件只能一次通过一个PHP进程打开,因此下载有效地阻止了session_start()的所有其他PHP进程。

解决方案是在开始输出文件数据之前调用session_write_close()将会话数据提交为磁盘并关闭文件句柄。

最新更新