php下载未知大小,php,_下载大文件在360显示未知大小,火狐又可以显示的,php - phpStudy...

下载大文件在360显示未知大小,火狐又可以显示的

下载代码

function downFile($filePath, $filesize) {

// 设置文件最长执行时间和内存

set_time_limit ( 0 );

ini_set ( 'memory_limit', '1024M' );

// 检测文件是否存在

if (! is_file ( $filePath )) {

die ( "404 File not found!" );

}

$filename = basename ( $filePath ); // 获取文件名字

$size = $filesize;

// 开始写输出头信息

header ( "Cache-Control: public" );

// 设置输出浏览器格式

header ( "Content-Type: application/octet-stream" );

header ( "Content-Disposition: attachment; filename=" . $filename );

header ( "Content-Transfer-Encoding: binary" );

header ( "Accept-Ranges: bytes" );

$range = 0;

// 如果有$_SERVER['HTTP_RANGE']参数

if (isset ( $_SERVER ['HTTP_RANGE'] )) {

/*

* Range头域   Range头域可以请求实体的一个或者多个子范围。 例如, 表示头500个字节:bytes=0-499 表示第二个500字节:bytes=500-999 表示最后500个字节:bytes=-500 表示500字节以后的范围:bytes=500- 第一个和最后一个字节:bytes=0-0,-1 同时指定几个范围:bytes=500-600,601-999 但是服务器可以忽略此请求头,如果无条件GET包含Range请求头,响应会以状态码206(PartialContent)返回而不是以200 (OK).

*/

// 断点后再次连接 $_SERVER['HTTP_RANGE'] 的值 bytes=4390912-

list ( $a, $range ) = explode ( "=", $_SERVER ['HTTP_RANGE'] );

// if yes, download missing part

$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}" ); // Content-Range: bytes 4908618-4988927/4988928 95%的时候

} else {

// 第一次连接

$size2 = $size - 1;

header ( "Content-Range: bytes 0-{$size2}/{$size}" ); // Content-Range: bytes 0-4988927/4988928

header ( "Content-Length: " . $size ); // 输出总长

}

// 打开文件

$fp = fopen ( "{$filePath}", "rb" );

// 设置指针位置

fseek ( $fp, $range );

// 虚幻输出

while ( ! feof ( $fp ) ) {

print (fread ( $fp, 1024 * 8 )) ; // 输出文件

flush (); // 输出缓冲

ob_flush ();

}

fclose ( $fp );

exit ();

}

虽然成功下载了大文件,这个没解决感觉不完美,求帮助

代码缩进好了

相关阅读:

看不懂quro上关于android解锁种数的代码

php extract 导入变量问题?

求解,ios7下 setNavigationBarHidden:YES 之后 页面会跟 Statusbar 叠在一起

php 打包压缩包问题0 0

做项目的时候,是一个ajax请求对应一个php文件还是把php代码写在一个文件里?

ubuntu环境使用gcc编译objective-c多个文件出现问题如何解决?

有没有啥好用的chrome插件(前端用的)

ajax跨域和不跨域有什么区别?

下拉刷新,网络请求数据刷新

iframe和selection结合使用,为什么焦点会失去?

关于前端工程化问题?

mybatis的核心配置文件中如何配置和数据库连接的编码方式

想把2个tableview竖着放在scrollview上

componentWillUpdate 里的 blur 没有执行是为什么?

上传的图片如何做成App要的列表数据

c#定时器问题

flask命令方式启动卡住了

Java后台,如何把服务器上图片用base64编码传到Android端?

iOS中table view点击动画有残影,web view显示模糊

php post不能获取 在线等 着急

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值