Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/287.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
IIS 7.5上的PHP-大文件下载会阻止连接,直到下载完成_Php_Iis_Download - Fatal编程技术网

IIS 7.5上的PHP-大文件下载会阻止连接,直到下载完成

IIS 7.5上的PHP-大文件下载会阻止连接,直到下载完成,php,iis,download,Php,Iis,Download,我想允许用户下载大型视频文件。由于安全原因,这些文件位于公用文件夹之外 我使用fopen()、feof()和fread()的组合来下载chuncks中的文件 下载效果很好。视频已下载,而且运行正常。问题出在下载过程中。下载文件的任何用户在下载文件之前都无法继续浏览网站。浏览器正在尝试建立连接,但在下载文件时挂起。下载完成后,立即建立连接。其他用户在下载过程中可以很好地浏览该站点,因此不会像整个服务器挂起或其他任何情况一样 我正在使用安装在IIS服务器上的PHP(CakePHP) 一段代码: $n

我想允许用户下载大型视频文件。由于安全原因,这些文件位于公用文件夹之外

我使用fopen()、feof()和fread()的组合来下载chuncks中的文件

下载效果很好。视频已下载,而且运行正常。问题出在下载过程中。下载文件的任何用户在下载文件之前都无法继续浏览网站。浏览器正在尝试建立连接,但在下载文件时挂起。下载完成后,立即建立连接。其他用户在下载过程中可以很好地浏览该站点,因此不会像整个服务器挂起或其他任何情况一样

我正在使用安装在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();
    }
}

我终于解决了这个问题。如上所述,这个问题确实与会议有关。尽管session.auto_start已关闭,但CakePHP本身目前正在处理会话。因此,在while循环之前插入
session\u write\u close()
,问题就解决了。

您在下载中使用会话吗?代码中有错误,请添加一个“filename.mp4'后的引号错误仅在此示例中出现。在实际代码中,它是正确的。不过我现在已经在代码段中修复了它。@Pekka下载功能不依赖于会话的任何使用,如果这是您的意思的话。代码似乎没有使用会话,但您能否验证
session.auto_start
设置是否已禁用?