4

Je reçois donc cette erreur lors de la lecture de certaines vidéos. Lorsque Chrome télécharge complètement la vidéo, il arrête de jouer avec cette erreur. De plus, le statut de la demande passe de 206 à (échec), puis Chrome envoie d'autres demandes avec Range:bytes=2990775- et la réponse du serveur est:ERR_CONTENT_LENGTH_MISMATCH lors du chargement de la vidéo en 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 

J'ai un autre site sur le même serveur et il fonctionne très bien là-bas.

Voici mon code 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); 

Désolé pour mon mauvais anglais.

+0

J'ai un problème similaire avec Flask. –

Répondre

1

J'ai trouvé le problème.

je changé $data = fread($file, $length); à $data = fread($file, $length + 1);.

Je ne sais pas pourquoi la longueur demandée devrait être plus un mais il solve'd le problème.