php apache http range http-headers

Análisis del encabezado HTTP_RANGE en PHP



apache http-headers (3)

¿Existe alguna forma de analizar correctamente el encabezado HTTP_RANGE en PHP? Pensé en preguntar aquí antes de reinventar la rueda.

Actualmente estoy usando

preg_match(''/bytes=(/d+)-(/d+)/'', $_SERVER[''HTTP_RANGE''], $matches);

para analizar el encabezado pero eso no cubre todos los valores posibles del encabezado, entonces me pregunto si hay una función o biblioteca que pueda hacer esto ya?

Gracias por adelantado.


En su lugar, use expresiones regulares para probarlo antes de enviar un 416 . Luego simplemente analízalo explotando en la coma , y el guión - . También veo que usaste /d+ en tu expresión regular, pero en realidad no se requieren. Cuando se omite cualquiera de los índices de rango, significa "primer byte" o "último byte". Debería cubrir eso en su expresión regular también. Consulte también el encabezado Rango en la especificación HTTP de cómo se supone que debe manejarlo.

Ejemplo de lanzamiento:

if (isset($_SERVER[''HTTP_RANGE''])) { if (!preg_match(''^bytes=/d*-/d*(,/d*-/d*)*$'', $_SERVER[''HTTP_RANGE''])) { header(''HTTP/1.1 416 Requested Range Not Satisfiable''); header(''Content-Range: bytes */'' . filelength); // Required in 416. exit; } $ranges = explode('','', substr($_SERVER[''HTTP_RANGE''], 6)); foreach ($ranges as $range) { $parts = explode(''-'', $range); $start = $parts[0]; // If this is empty, this should be 0. $end = $parts[1]; // If this is empty or greater than than filelength - 1, this should be filelength - 1. if ($start > $end) { header(''HTTP/1.1 416 Requested Range Not Satisfiable''); header(''Content-Range: bytes */'' . filelength); // Required in 416. exit; } // ... } }

Editar: $ start siempre debe ser menor que $ end



Tomado del paquete PEAR HTTP_Download :

function getRanges() { return preg_match(''/^bytes=((/d*-/d*,? ?)+)$/'', @$_SERVER[''HTTP_RANGE''], $matches) ? $matches[1] : array(); }

¡También es una buena idea usar estos paquetes para cosas como esta!