Maison >développement back-end >tutoriel php >Comment puis-je implémenter des téléchargements avec reprise dans le tunneling de fichiers PHP ?

Comment puis-je implémenter des téléchargements avec reprise dans le tunneling de fichiers PHP ?

Susan Sarandon
Susan Sarandonoriginal
2024-12-08 19:52:11815parcourir

How Can I Implement Resumable Downloads in PHP File Tunneling?

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

Lors de l'utilisation de PHP pour diffuser des téléchargements de fichiers, il peut être souhaitable d'activer les téléchargements avec reprise pour les utilisateurs. Cependant, la configuration du script PHP par défaut empêche souvent la reprise des téléchargements.

Pour prendre en charge la reprise des téléchargements avec PHP, suivez ces étapes :

  1. Envoyer l'en-tête Accept-Ranges :
    Envoyez l'en-tête Accept-Ranges: bytes dans toutes les réponses pour indiquer que le serveur prend en charge la reprise téléchargements.
  2. Gérer les demandes de plage :
    Inspecter les requêtes entrantes pour un en-tête Range : bytes=x-y, où x est le décalage et y est l'octet de fin de la plage demandée.
  3. Rechercher un fichier et envoyer une plage :
    Ouvrez le fichier et recherchez le décalage spécifié. Ensuite, envoyez la plage d'octets demandée à l'aide de fread().
  4. Définir les en-têtes de contenu partiel :
    Pour les demandes de plage, définissez l'en-tête HTTP/1.0 206 Partial Content et spécifiez la plage de contenu. en utilisant Content-Range : octets x-y/filesize.

La mise en œuvre de ces étapes devrait permettre la reprise des téléchargements dans votre configuration de tunneling de fichiers PHP. Voici un exemple de code PHP qui illustre le processus :

$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);

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!

Déclaration:
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