使用php实现下载断点续传,$_SERVER['HTTP_RANGE']为空。求助

发布于 2021-11-23 00:43:30 字数 1890 浏览 933 评论 5

我想使用php实现一个下载断点续传的功能,知道要使用http_range来标记每次下载的进度,但是print $_SERVER['HTTP_RANGE']发现值为空,怀疑是不是我的server不支持断点续传啊?不知道我的理解对不对。请大家多多指教

        public function downpiceAction(){
                $durl = ROOT_DIR.'/static/mysql-5.5.21.tar.gz';
                $filename = 'mysql-5.5.21.tar.gz';
                header("Content-Type:application/x-tar");
                header("Accept-Ranges:bytes");
                header("Content-Disposition:attachment;filename=".$filename);
file_put_contents('ddd',$_SERVER['HTTP_RANGE']);
                $size = filesize($durl);
                print_r($_SERVER);
                if(isset($_SERVER['HTTP_RANGE'])){
                        list($a, $range) = explode("=", $_SERVER['HTTP_RANGE']);
                        str_replace($range, "-", $range);
                        $size2 = $size -1;
                        $new_length = $size2 - $range;

                        header("HTTP/1.1 206 Partial Content");
                        header("Content-Length: $new_length");
                        header("Content-Range: bytes $range$size2/$size");
                }else{
                        $size2 = $size -1;
                        header("Content-Range: bytes 0-$size2/$size");
                        header("Content-Length: " . $size);
                }

                $fp = fopen("$durl", "rb");
                fseek($fp, $range);
                while (!feof($fp)) {
                        //设置文件最长执行时间     
                        set_time_limit(0);
                        print (fread($fp, 1024 * 8)); //输出文件
                        flush(); //输出缓冲
                        ob_flush();
                }
                fclose($fp);
                exit ();
                Yaf_Dispatcher::getInstance()->autoRender(FALSE);
        }

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(5

背叛残局 2021-11-25 05:00:29

$range$size2/$size

你觉得这句话对吗?

-----

range是会返回3种头部的哦:

100-200 // 第100到第200字节
500-    // 第500字节到文件末尾
-1000   // 最后的1000个字节

你这段代码都能适应吗?

-----

乱炖 - 研究web

http://levi.cg.am

月亮是我掰弯的 2021-11-25 04:14:51

说了多次哦,我不懂php的

醉生梦死 2021-11-24 21:49:06

@红薯 你是万能的。。。

偏爱自由 2021-11-24 20:44:23

回复
去学习

因为看清所以看轻 2021-11-24 17:51:31

@红薯 @
雪候鸟 @
rocing 蝈蝈。。求助。。

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文