可恢复下载脚本锁定页面问题——php+;IIS7

可恢复下载脚本锁定页面问题——php+;IIS7,php,iis,download,resume-download,Php,Iis,Download,Resume Download,我有一个可恢复的下载php脚本 它可以在Apache服务器上正常工作,但不能在IIS 7(我的客户端当前使用的)上正常工作 IIS的问题是: 下载文件时,同一站点的其他页面将冻结。 (有时甚至显示500服务器错误) (Apache服务器上的相同脚本不会带来相同的问题) 如果我关闭可恢复支持,问题就消失了 (即使在下载管理器上下载,也会冻结查看同一站点的所有浏览器) 这让我相信IIS需要一些配置?还是php.ini 到目前为止,我与谷歌的合作并不顺利,任何帮助都将不胜感激 和是的,我可以访问IIS

我有一个可恢复的下载php脚本

它可以在Apache服务器上正常工作,但不能在IIS 7(我的客户端当前使用的)上正常工作

IIS的问题是:

下载文件时,同一站点的其他页面将冻结。 (有时甚至显示500服务器错误) (Apache服务器上的相同脚本不会带来相同的问题)

如果我关闭可恢复支持,问题就消失了 (即使在下载管理器上下载,也会冻结查看同一站点的所有浏览器)

这让我相信IIS需要一些配置?还是php.ini

到目前为止,我与谷歌的合作并不顺利,任何帮助都将不胜感激 和是的,我可以访问IIS和php.ini 是的..我已经在IIS上设置了最大连接时间(大文件传输需要)

这个脚本是。。 (任何人在这里遇到并想在IIS上使用此脚本进行大文件传输,请阅读-->>>FastCGI超时设置“视频/x-flv”, “mp4”=>“视频/mp4”, “mov”=>“视频/快速时间”, “avi”=>“视频/x-msvideo”, “wmv”=>“视频/x-ms-wmv” ); 如果($mime_type==''){ $file_extension=strtolower(substr(strrchr($filepath,“.”,1)); 如果(数组\密钥\存在($file\扩展名,$known\ mime\类型)){ $mime_type=$known_mime_type[$file_extension]; }否则{ $mime_type=“应用程序/强制下载”; }; }; 标题(“连接:保持活动”); 标题(“保持活动:超时=65000”); $fsize=filesize($filepath); 设置时间限制(0); //关闭缓冲区 ob_end_clean(); if(ini_get('zlib.output_compression')) ini_集('zlib.output_compression','Off'); 标题(“内容描述:文件传输”); 标题(“内容类型:”.$mime\U类型); 标题(“内容处置:附件;文件名=\”.$filename.\”); 标题(“内容传输编码:二进制”); 标头(“缓存控制:必须重新验证,后检查=0,前检查=0”); 标题('Accept-Ranges:bytes'); 标头(“缓存控制:公共”); 标题(“Pragma:public”); 标题(“到期日:0”); //可恢复的支持。。 如果(isset($\u服务器['HTTP\u范围]])){ //删除此部分以关闭可恢复支持 列表($a,$range)=分解(“=”,$\u服务器['HTTP\u range',2); 列表($range)=分解(“,”,$range,2); 列表($range,$range_end)=分解(“-”,$range); $range=intval($range); 如果(!$range\u end){ $range_end=$fsize-1; }否则{ $range\u end=intval($range\u end); } $new\u length=$range\u end-$range+1; 标题(“HTTP/1.1 206部分内容”); 标题(“内容长度:$new_长度”); 标题(“内容范围:字节$Range-$Range_end/$fsize”); //可恢复支护端 }否则{ $new_length=$fsize; 标题(“内容长度:.$fsize”); } /*输出文件本身*/ $chunksize=3*(1024*1024)//你可能想改变这个 $bytes\u send=0; 如果($Source_File=fopen($filepath,'rb')){ 如果(isset($\u服务器['HTTP\u范围]])){ fseek($Source\u File,$range); } 而(!feof($Source_File)&&(!connection_aborted())&($bytes_send注意。 无php脚本不受影响。 只有php页面受下载影响。。
因此,我猜问题与fastcgi模块有关?

这应该是答案吗?如果不是,请将其删除并将信息添加到您的问题中。如果是,请通过编辑您的答案进行澄清。
$filename="test.flv";
$filepath="zekkai.flv"; 
//set mime
 $mime_type="";
 $known_mime_types=array(
    "flv" => "video/x-flv",
    "mp4" => "video/mp4",
    "mov" => "video/quicktime",
    "avi" => "video/x-msvideo",
    "wmv" => " video/x-ms-wmv "
 );
 if($mime_type==''){
     $file_extension = strtolower(substr(strrchr($filepath,"."),1));
     if(array_key_exists($file_extension, $known_mime_types)){
        $mime_type=$known_mime_types[$file_extension];
     } else {
        $mime_type="application/force-download";
     };
 };
header("Connection: Keep-Alive"); 
header("Keep-Alive: timeout=65000"); 
$fsize=filesize($filepath);
set_time_limit(0);
//turn off buffer
ob_end_clean();
if(ini_get('zlib.output_compression'))
ini_set('zlib.output_compression', 'Off');
header("Content-Description: File Transfer");
header("Content-type: ".$mime_type);
header("Content-Disposition: attachment; filename=\"".$filename."\"");
header("Content-Transfer-Encoding: binary");
header("Cache-Control: must-revalidate, post-check=0, pre-check=0");
header('Accept-Ranges: bytes');
header("Cache-control: public");
header('Pragma: public');
header("Expires: 0");
// resumable support..
if(isset($_SERVER['HTTP_RANGE'])){
                 // delete this part to turnoff resumable support 
    list($a, $range) = explode("=",$_SERVER['HTTP_RANGE'],2);
    list($range) = explode(",",$range,2);
    list($range, $range_end) = explode("-", $range);
    $range=intval($range);
    if(!$range_end) {
        $range_end=$fsize-1;
    } else {
        $range_end=intval($range_end);
    }
    $new_length = $range_end-$range+1;
    header("HTTP/1.1 206 Partial Content");
    header("Content-Length: $new_length");
    header("Content-Range: bytes $range-$range_end/$fsize");
                // resumable support end 
} else {
    $new_length=$fsize;
    header("Content-Length: ".$fsize);
}

/* output the file itself */
 $chunksize = 3*(1024*1024); //you may want to change this
 $bytes_send = 0;
 if ($Source_File = fopen($filepath, 'rb')){
    if(isset($_SERVER['HTTP_RANGE'])){
        fseek($Source_File, $range);
    }
    while(!feof($Source_File) && (!connection_aborted()) && ($bytes_send<$new_length) ) {
        $buffer = fread($Source_File, $chunksize);
        print($buffer); //echo($buffer); // is also possible
        flush();
        $bytes_send += strlen($buffer);
    }
    fclose($Source_File);
 } else die('Error - can not open file.');
exit();