"Si un trabajador quiere hacer bien su trabajo, primero debe afilar sus herramientas." - Confucio, "Las Analectas de Confucio. Lu Linggong"
Página delantera > Programación > ¿Cómo puedo habilitar descargas reanudables en mi secuencia de comandos de transferencia de archivos PHP?

¿Cómo puedo habilitar descargas reanudables en mi secuencia de comandos de transferencia de archivos PHP?

Publicado el 2025-01-19
Navegar:127

How Can I Enable Resumable Downloads in My PHP File Transfer Script?

Habilitación de descargas reanudables con un script de transferencia de archivos PHP

Introducción

Al transferir archivos utilizando scripts PHP por motivos de seguridad, la ruta absoluta de los archivos descargables a menudo es necesario ocultarlo. Sin embargo, es posible que los scripts de transferencia de archivos PHP tradicionales no admitan descargas reanudables, lo que genera inconvenientes para los usuarios finales que experimentan interrupciones en la conexión.

Solución: compatibilidad con descargas reanudables

Para habilitar descargas reanudables, se pueden seguir los siguientes pasos tomado:

  1. Enviar el encabezado Accept-Ranges: bytes: Este encabezado informa al cliente ese contenido parcial es compatible.
  2. Manejar solicitudes de contenido parcial: Al recibir una solicitud con el encabezado Rango: bytes=x-y, analice el rango, busque el desplazamiento deseado en el archivo y envíe el rango de bytes solicitado.
  3. Establezca el código de estado HTTP del contenido parcial: Responda con HTTP/1.0 206 Contenido parcial para indicar un parcial exitoso transfer.

Implementación de PHP

A continuación se muestra un ejemplo de implementación de estos principios en PHP:

$filesize = filesize($file);

$offset = 0;
$length = $filesize;

if (isset($_SERVER['HTTP_RANGE'])) {
    preg_match('/bytes=(\d )-(\d )?/', $_SERVER['HTTP_RANGE'], $matches);

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

$file = fopen($file, 'r');
fseek($file, $offset);
$data = fread($file, $length);
fclose($file);

if ($offset > 0) {
    header('HTTP/1.1 206 Partial Content');
    header('Content-Range: bytes ' . $offset . '-' . ($offset   $length) . '/' . $filesize);
}

header('Content-Type: ' . $ctype);
header('Content-Length: ' . $filesize);
header('Content-Disposition: attachment; filename="' . $fileName . '"');
header('Accept-Ranges: bytes');

print($data);

Este script primero verifica si se realizó una solicitud de contenido parcial. Si es así, analiza el rango desde el encabezado Rango, busca el desplazamiento apropiado en el archivo y envía el rango de bytes solicitado. El script también establece el encabezado Accept-Ranges en bytes y envía el código de estado HTTP apropiado para contenido parcial si es necesario.

Al implementar estas medidas, se pueden admitir descargas reanudables utilizando scripts de transferencia de archivos PHP, lo que proporciona una solución sólida. para transferencias de archivos que pueden reanudarse después de interrupciones.

Último tutorial Más>

Descargo de responsabilidad: Todos los recursos proporcionados provienen en parte de Internet. Si existe alguna infracción de sus derechos de autor u otros derechos e intereses, explique los motivos detallados y proporcione pruebas de los derechos de autor o derechos e intereses y luego envíelos al correo electrónico: [email protected]. Lo manejaremos por usted lo antes posible.

Copyright© 2022 湘ICP备2022001581号-3