PHP关于断点续传的问题!求助!
想做一个认证后下载的模块,支持断点续传功能,写好后发现在老的虚拟主机Apache+php4 跑没有问题,用迅雷下可以多线程+断点续传!
可是放到IIS+php5就出错了,用IE直接下载没问题,用迅雷或者其他下载工具就不行了,不支持多线程,而且下几秒钟就失败了。求高手帮助!
下面是测试代码:
PHP code
在测试的时候 我加入了一段记录请求 $_SERVER['HTTP_RANGE'] 和返回header Content-Range: bytes 的值,
发现如果Content-Range: bytes 不是以0开头的话,下载工具就会出错,但是一模一样的代码放到Apache+php4一点问题都没有! 郁闷死我了!
可是放到IIS+php5就出错了,用IE直接下载没问题,用迅雷或者其他下载工具就不行了,不支持多线程,而且下几秒钟就失败了。求高手帮助!
下面是测试代码:
PHP code
<?php $fname = 'PDF.rar'; $fp = fopen($fname,'rb'); $fsize = filesize($fname); if (isset($_SERVER['HTTP_RANGE'])) { list($start) = explode('-',(str_replace('bytes=', '', $_SERVER['HTTP_RANGE']))); } else { $start = 0; } header('Cache-control: public'); header("Content-Type: application/octet-stream"); header("Content-Disposition: attachment; filename=PDF.rar"); if ($start> 0) { fseek($fp, $start); header("HTTP/1.1 206 Partial Content"); header('Accept-Ranges: bytes'); header("Content-Length: " . ($fsize - $start)); header("Content-Range: bytes " . $start . "-" . ($fsize - 1) . "/" . $fsize); } else { header("Content-Length: $fsize"); header("Accept-Ranges: bytes"); } fpassthru($fp); ?>
在测试的时候 我加入了一段记录请求 $_SERVER['HTTP_RANGE'] 和返回header Content-Range: bytes 的值,
发现如果Content-Range: bytes 不是以0开头的话,下载工具就会出错,但是一模一样的代码放到Apache+php4一点问题都没有! 郁闷死我了!
作者: futurecs 发布时间: 2011-06-10
呃..自己解决了...结贴...
作者: futurecs 发布时间: 2011-06-10