"Si un ouvrier veut bien faire son travail, il doit d'abord affûter ses outils." - Confucius, "Les Entretiens de Confucius. Lu Linggong"
Page de garde > La programmation > 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 ?

Publié le 2025-01-19
Parcourir:361

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 confrontés à 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 l'en-tête Accept-Ranges : octets : 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 demande avec l'en-tête Range : bytes=x-y, analysez la plage, recherchez le décalage souhaité dans le fichier et envoyer la plage d'octets demandée.
  3. Définissez le code d'état HTTP du contenu partiel : Répondez avec HTTP/1.0 206 Contenu partiel pour indiquer une réussite partielle transfer.

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.

Dernier tutoriel Plus>

Clause de non-responsabilité: Toutes les ressources fournies proviennent en partie d'Internet. En cas de violation de vos droits d'auteur ou d'autres droits et intérêts, veuillez expliquer les raisons détaillées et fournir une preuve du droit d'auteur ou des droits et intérêts, puis l'envoyer à l'adresse e-mail : [email protected]. Nous nous en occuperons pour vous dans les plus brefs délais.

Copyright© 2022 湘ICP备2022001581号-3