4

일부 동영상이 재생 될 때이 오류가 발생합니다. Chrome에서 동영상을 완전히 다운로드하면이 오류로 재생이 중지됩니다. 또한 206에서 요청 변경의 상태에 (실패) 한 후 크롬 Range:bytes=2990775-와 다른 요청을 보내고 서버의 응답은 다음과 같습니다동영상을 Chrome에로드하는 경우 ERR_CONTENT_LENGTH_MISMATCH

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 

나는 동일한 서버에 다른 웹 사이트가 있고 거기 잘 작동합니다. 내 나쁜 영어에 대한

 $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); 

죄송합니다 :

여기 내 PHP 코드입니다.

+0

나는 Flask와 비슷한 문제가 있습니다. –

답변

1

문제점을 발견했습니다.

내가 $data = fread($file, $length);에서 $data = fread($file, $length + 1);으로 변경되었습니다.

요청한 길이가 1이되어야하는 이유는 모르지만 그 문제는 해결 된 것입니다.