Maison >développement back-end >tutoriel php >Comment puis-je activer la reprise des téléchargements dans mon script de transfert de fichiers PHP ?

Comment puis-je activer la reprise des téléchargements dans mon script de transfert de fichiers PHP ?

Linda Hamilton
Linda Hamiltonoriginal
2024-12-07 15:45:18723parcourir

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

Activation des téléchargements pouvant être repris avec un script de transfert de fichiers PHP

Introduction

Lors du transfert de fichiers à l'aide de scripts PHP à des fins de sécurité, le chemin absolu des fichiers téléchargeables doit souvent être dissimulé. Cependant, les scripts de transfert de fichiers PHP traditionnels peuvent ne pas prendre en charge les téléchargements avec reprise, ce qui entraîne des désagréments pour les utilisateurs finaux qui subissent des interruptions de connexion.

Solution : prise en charge des téléchargements avec reprise

Pour activer les téléchargements avec reprise, les étapes suivantes peuvent être pris :

  1. Envoyer les plages d'acceptation : octets header : Cet en-tête informe le client que le contenu partiel est pris en charge.
  2. Gérer les demandes de contenu partiel : Lors de la réception d'une requête avec l'en-tête Range: bytes=x-y, analysez la plage, recherchez le décalage souhaité dans le fichier et envoyez la plage d'octets demandée.
  3. Définissez le statut HTTP du contenu partiel code : Répondez avec HTTP/1.0 206 Partial Content pour indiquer un transfert partiel réussi.

Implémentation PHP

Vous trouverez ci-dessous un exemple d'implémentation de ces principes 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);

Ce script vérifie d'abord si une demande de contenu partielle a été effectuée. Si tel est le cas, il analyse la plage à partir de l'en-tête Range, recherche le décalage approprié dans le fichier et envoie la plage d'octets demandée. Le script définit également l'en-tête Accept-Ranges sur octets et envoie le code d'état HTTP approprié pour le contenu partiel si nécessaire.

En mettant en œuvre ces mesures, les téléchargements pouvant être repris peuvent être pris en charge à l'aide de scripts de transfert de fichiers PHP, offrant ainsi une solution robuste. pour les transferts de fichiers qui peuvent reprendre après des interruptions.

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