用户
 找回密码
 入住 CI 中国社区
搜索
查看: 3000|回复: 3
收起左侧

[已解决] CI里面同一时间只能下载一个文件?http请求没响应?

[复制链接]
发表于 2011-3-9 11:17:36 | 显示全部楼层 |阅读模式
把下面的函数封装在CI的自定义library中,再通过controller调用的。
浏览器在等待这次文件下载完成之后,才会去响应其他请求
QQ截图未命名.png
其他请求貌似被阻塞掉了!这难道是CI本身的原因?有什么办法解决吗?

下面是文件下载的代码:
PHP复制代码
 
function file_down($url,$filename)
        {
                $CI = & get_instance();
                $CI->load->helper('file');
               
                $filename = str_replace(' ', '_', $filename);//存在空格则转化成下划线
                $size = filesize($url);
                $size2 = $size - 1;
                $range = 0;
                if(isset($_SERVER['HTTP_RANGE']))
                {
                        header("HTTP/1.1 206 Partial Content");
                        $range = str_replace("=", "-", $_SERVER['HTTP_RANGE']);
                        $range = explode("-", $range);
                        $range = trim($range[1]);
                        $length = $size2-$range;
                        header("Content-Length: ".$length);
                        header("Content-Range: bytes " .$range."-" .$size2 ."/".$size);
                }
                else
                {
                        header("Content-Length:".$size);
                        header("Content-Range:bytes 0-$size2/$size");
                }
                @header("Cache-control: private");
                header("Accept-Ranges: bytes");
                $mime = get_mime_by_extension($url); //获取文件MIME类型
                if(!$mime)
                {
                        $mime="application/octet-stream";
                }
                header("Content-Type: $mime");
                $encode_name = urlencode($filename);
        $encode_name = str_replace("+","%20",$encode_name);
        $ua = $_SERVER["HTTP_USER_AGENT"];
        if(preg_match("/MSIE/",$ua))
        {
               header("Content-Disposition:attachment;filename=".$encode_name);
        }
        else if(preg_match("/Firefox/",$ua))
        {
               header('Content-Disposition:attachment;filename*="utf8\'\''.$filename.'"');
        }
        else
        {
               header("Content-Disposition:attachment;filename=".$filename);
        }
        $fp = @fopen($url, "rb");
        fseek($fp,$range);
        while(!feof($fp))
                {
                        set_time_limit(0);
                        print(fread($fp,1024));
                        @flush();
                        @ob_flush();
                }
                fclose($fp);
                exit();
        }
 
复制代码
 楼主| 发表于 2011-3-9 15:14:27 | 显示全部楼层
这和CI里面自定义的library是单例模式的有关系吗?
发表于 2011-3-10 23:25:10 | 显示全部楼层
这怎么可能是 CI 的问题~
PHP 的每次请求都是互不影响的,你应该检查下服务器是否有问题。
发表于 2012-7-18 23:51:26 | 显示全部楼层
我也遇到类似的问题,一个页面阻塞了,其他请求全部阻塞,不知道是什么原因??

本版积分规则