"Se um trabalhador quiser fazer bem o seu trabalho, ele deve primeiro afiar suas ferramentas." - Confúcio, "Os Analectos de Confúcio. Lu Linggong"
Primeira página > Programação > Como posso ativar downloads recuperáveis ​​em meu script de transferência de arquivos PHP?

Como posso ativar downloads recuperáveis ​​em meu script de transferência de arquivos PHP?

Publicado em 2025-01-19
Navegar:171

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

Habilitando downloads recuperáveis ​​com um script de transferência de arquivos PHP

Introdução

Ao transferir arquivos usando scripts PHP para fins de segurança, o caminho absoluto dos arquivos para download muitas vezes precisa ser ocultado. No entanto, os scripts tradicionais de transferência de arquivos PHP podem não suportar downloads recuperáveis, causando transtornos para os usuários finais que enfrentam interrupções de conexão. take:

Send the Accept-Ranges: bytes header:

Este cabeçalho informa ao cliente que o conteúdo parcial é suportado.
  1. Tratar solicitações de conteúdo parcial: Ao receber uma solicitação com o cabeçalho Range: bytes=x-y, analise o intervalo, procure o deslocamento desejado no arquivo e envie o byte solicitado range.
  2. Defina o código de status HTTP do conteúdo parcial: Responda com HTTP/1.0 206 Partial Content para indicar uma parcial bem-sucedida transfer.
  3. Implementação de PHP
  4. Abaixo está um exemplo de implementação desses princípios em PHP:

$filesize = filesize($file); $deslocamento = 0; $comprimento = $tamanho do arquivo; if (isset($_SERVER['HTTP_RANGE'])) { preg_match('/bytes=(\d )-(\d )?/', $_SERVER['HTTP_RANGE'], $matches); $offset = intval($correspondências[1]); $comprimento = intval($correspondências[2]) - $offset; } $arquivo = fopen($arquivo, 'r'); fseek($arquivo, $offset); $dados = fread($arquivo, $comprimento); fclose($arquivo); if ($deslocamento > 0) { header('HTTP/1.1 206 Conteúdo Parcial'); header('Content-Range: bytes ' . $offset . '-' . ($offset $length) . '/' . $filesize); } header('Tipo de conteúdo: '. $ctype); header('Content-Length: '. $filesize); header('Content-Disposition: anexo; filename="' . $fileName . '"'); header('Accept-Ranges: bytes'); print($data);

Este script primeiro verifica se uma solicitação de conteúdo parcial foi feita. Nesse caso, ele analisa o intervalo do cabeçalho Range, procura o deslocamento apropriado no arquivo e envia o intervalo de bytes solicitado. O script também define o cabeçalho Accept-Ranges para bytes e envia o código de status HTTP apropriado para conteúdo parcial, se necessário.

$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);
Tutorial mais recente Mais>

Isenção de responsabilidade: Todos os recursos fornecidos são parcialmente provenientes da Internet. Se houver qualquer violação de seus direitos autorais ou outros direitos e interesses, explique os motivos detalhados e forneça prova de direitos autorais ou direitos e interesses e envie-a para o e-mail: [email protected]. Nós cuidaremos disso para você o mais rápido possível.

Copyright© 2022 湘ICP备2022001581号-3