温馨提示×

温馨提示×

您好,登录后才能下订单哦!

密码登录×
登录注册×
其他方式登录
点击 登录注册 即表示同意《亿速云用户服务条款》

如何在PHP中使用range协议实现一个文件断点续传功能

发布时间:2021-01-27 16:00:21 阅读:248 作者:Leah 栏目:开发技术
PHP开发者专用服务器限时活动,0元免费领,库存有限,领完即止! 点击查看>>

这期内容当中小编将会给大家带来有关如何在PHP中使用range协议实现一个文件断点续传功能,文章内容丰富且以专业的角度为大家分析和叙述,阅读完这篇文章希望大家可以有所收获。

range协议用途:一般是用在断点续传的时候,但是实际的用户很大,例如你的web server需要输出一个大文件,那么用range可以分段输出,缓解压力。同时在提供音乐视频等服务时可以缓冲下载,如果用户中途关闭,可以节约网络带宽。

<?php

// 文件名
$filename $_GET ['filename'];

// 文件路径
$location 'media/' . $filename;

// 后缀
$extension substr strrchr $filename'.' ), 1 );

if ($extension == "mp3") {
	$mimeType "audio/mpeg";
} else if ($extension == "ogg") {
	$mimeType "audio/ogg";
}

if (! file_exists $location )) {
	header "HTTP/1.1 404 Not Found" );
	return;
}

$size filesize $location );
$time date 'r'filemtime $location ) );

$fm = @fopen $location'rb' );
if (! $fm) {
	header "HTTP/1.1 505 Internal server error" );
	return;
}

$begin 0;
$end $size 1;

if (isset $_SERVER ['HTTP_RANGE'] )) {
	if (preg_match '/bytes=\h*(\d+)-(\d*)[\D.*]?/i'$_SERVER ['HTTP_RANGE'], $matches )) {
		// 读取文件,起始节点
		$begin intval $matches [1] );

		// 读取文件,结束节点
		if (! empty $matches [2] )) {
			$end intval $matches [2] );
		}
	}
}

if (isset $_SERVER ['HTTP_RANGE'] )) {
	header 'HTTP/1.1 206 Partial Content' );
} else {
	header 'HTTP/1.1 200 OK' );
}

header "Content-Type: $mimeType" );
header 'Cache-Control: public, must-revalidate, max-age=0' );
header 'Pragma: no-cache' );
header 'Accept-Ranges: bytes' );
header 'Content-Length:' . (($end $begin) + 1) );

if (isset $_SERVER ['HTTP_RANGE'] )) {
	header "Content-Range: bytes $begin-$end/$size" );
}

header "Content-Disposition: inline; filename=$filename" );
header "Content-Transfer-Encoding: binary" );
header "Last-Modified: $time" );

$cur $begin;

// 定位指针
fseek $fm$begin0 );

while ( ! feof $fm ) && $cur <= $end && (connection_status () == 0) ) {
	print fread $fmmin 1024 * 16, ($end $cur) + 1 ) );
	$cur += 1024 * 16;
}

上述就是小编为大家分享的如何在PHP中使用range协议实现一个文件断点续传功能了,如果刚好有类似的疑惑,不妨参照上述分析进行理解。如果想知道更多相关知识,欢迎关注亿速云行业资讯频道。

亿速云「云服务器」,即开即用、新一代英特尔至强铂金CPU、三副本存储NVMe SSD云盘,价格低至29元/月。点击查看>>

向AI问一下细节

免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。

AI

开发者交流群×