Maison > développement back-end > tutoriel php > Comment PHP peut-il implémenter des téléchargements de fichiers avec reprise ?

Comment PHP peut-il implémenter des téléchargements de fichiers avec reprise ?

Linda Hamilton
Libérer: 2024-12-07 11:10:17
original
929 Les gens l'ont consulté

How Can PHP Implement Resumable File Downloads?

Téléchargements pouvant être repris avec le tunneling de fichiers basé sur PHP

Dans ce scénario, où PHP est utilisé comme proxy pour les téléchargements de fichiers, les utilisateurs sont confrontés à des défis en reprenant les téléchargements interrompus. Cet article vise à résoudre ce problème et à explorer les solutions possibles.

Implémentation des téléchargements avec reprise en PHP

Pour activer les téléchargements avec reprise, vous devez d'abord transmettre la prise en charge du serveur pour le contenu partiel via l'en-tête "Accept-Ranges: bytes". Par la suite, lorsqu'une requête inclut l'en-tête "Range: bytes=x-y" (où x et y représentent des valeurs numériques), vous devez extraire la plage demandée et manipuler le transfert de fichier en conséquence.

Le code PHP suivant accomplit cela. :

$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 ($partialContent) {
    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);
Copier après la connexion

Notes supplémentaires

  • Le code suppose qu'une seule plage est demandé.
  • La gestion des erreurs a été omise par souci de concision.
  • Reportez-vous à la documentation fournie pour plus de détails sur le contenu partiel et la fonction fread.

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

source:php.cn
Déclaration de ce site Web
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn
Derniers articles par auteur
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal