我正在尝试使用HTTP / 1.1 Partial Content标头将mp3文件流式传输到SoundManager,以便为我的媒体文件提供一些保护,并允许用户搜索到轨道的不同位置.我在IE7-10,Firefox,Safari和Opera中使用过的代码,但拒绝在Google Chrome中使用.如果我要删除部分内容标题,它将播放该文件但不允许用户搜索.
原文链接:https://www.f2er.com/php/136122.html在检查Chrome开发工具中的网络选项卡时,有2个请求,其中一个处于暂挂状态,另一个处于取消状态.这两个请求的大小都是13B.我要播放的文件是9.11MB.
$name = $_GET['name']; $file_size = filesize($file); $file = "C:\xampp\htdocs\..\protected\music\testsong.mp3"; // song,user and all other checks are performed before this to get the file path. $etag = md5(uniqid(rand(),true)); $open_file = fopen($file,'rb'); if( !$open_file ) throw new Exception('Could not open file'); $start = 0; $end = $file_size - 1; if( isset($_SERVER['HTTP_RANGE']) && !empty($_SERVER['HTTP_RANGE']) ) { $range = explode('-',substr($_SERVER['HTTP_RANGE'],strlen('bytes='))); $start = $range[0]; if( $range[1] > 0 ) $end = $range[1]; header('HTTP/1.1 206 Partial Content'); header('Status: 206'); header('Accept-Ranges: bytes'); header('Content-Range: ' . $_SERVER['HTTP_RANGE'] . '/' . $file_size); header('Content-Length: ' . ($end - $start + 1)); } else header('Content-Length: ' . $file_size); header('Content-Type: ' . $content_type); if( $download ) header('Content-Disposition: attachment; filename="' . $name . '"'); header('Last-Modified: ' . date('D,d M Y H:i:s \G\M\T',filemtime($file))); header('ETag: "' . $etag . '"'); header('Expires: 0'); header('Pragma: no-cache'); header('Cache-Control: must-revalidate'); if( $start > 0 ) fseek($open_file,$start); $bytes_position = $start; while( !feof($open_file) && $bytes_position <= $end ) { if( connection_aborted() || connection_status() != 0 ) throw New Exception('Connection Aborted'); $chunk = 1048000; if( $bytes_position + $chunk > $end + 1 ) $chunk = $end - $bytes_position + 1; $chunk = fread($open_file,$chunk); if( !$chunk ) throw New Exception('Could not read file'); print($chunk); flush(); $bytes_position += $chunk; } fclose($open_file);