4

因此,当某些视频播放时出现此错误。 Chrome完全下载视频时,会停止播放此错误。也从206请求的状态变为(失败的),然后Chrome会将一些其他要求与Range:bytes=2990775-和服务器的响应是:ERR_CONTENT_LENGTH_MISMATCH当在chrome中加载视频时

Accept-Ranges:bytes 
Cache-Control:private 
Connection:keep-alive 
Content-Disposition:attachment; filename="About The Author.mp4" 
Content-Length:0 
Content-Range:bytes 2990775-2990775/2990776 
Content-Transfer-Encoding:binary 
Content-Type:video/mp4 
Date:Tue, 14 Feb 2017 13:46:24 GMT 
Last-Modified:Wed, 08 Feb 2017 05:43:27 GMT 
Pragma:public 
Server:Apache/2 
Vary:User-Agent 
X-Powered-By:PHP/5.4.45 

我有在同一服务器上其他网站,它工作正常那里。

这是我的PHP代码:

 $filesize = filesize($resource->path); 

     $matches = explode("-", substr($_SERVER['HTTP_RANGE'],6)); 
     if (empty($matches[1])) 
     { 
      $matches[1] = $filesize - 1; 
     } 

     $offset = intval($matches[0]); 
     $length = intval($matches[1]) - $offset; 

     $file = fopen($resource->path, 'r'); 

     fseek($file, $offset); 

     $data = fread($file, $length); 
     fclose($file); 

     header('HTTP/1.1 206 Partial Content'); 
     header('Content-Range: bytes ' . $offset . '-' . ($offset + $length) . '/' . $filesize); 

     header('Pragma: public'); 
     header('Last-Modified: '.gmdate ('D, d M Y H:i:s', filemtime ($resource->path)).' GMT'); 
     header('Cache-Control: private',false); 
     header('Content-Type: ' . $mime); 
     header('Content-Length: ' . ($length + 1)); 
     header('Content-Disposition: attachment; filename="' . $resource->filename . '"'); 
     header('Content-Transfer-Encoding: binary'); 
     header('Accept-Ranges: bytes'); 

     print($data); 

对不起我的英语不好。

+0

我与Flask有类似的问题。 –

回答

1

我发现了这个问题。

我将$data = fread($file, $length);更改为$data = fread($file, $length + 1);

我不知道为什么要求的长度应该加一,但它解决了这个问题。

相关问题