您好,欢迎访问一九零五行业门户网

下载大文件在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 ();}

虽然成功下载了大文件,这个没解决感觉不完美,求帮助
代码缩进好了
回复内容: 下载代码
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 ();}

虽然成功下载了大文件,这个没解决感觉不完美,求帮助
代码缩进好了
其它类似信息

推荐信息