Maison > développement back-end > tutoriel php > Comment puis-je implémenter des téléchargements avec reprise en PHP tout en protégeant les chemins de fichiers ?

Comment puis-je implémenter des téléchargements avec reprise en PHP tout en protégeant les chemins de fichiers ?

Linda Hamilton
Libérer: 2024-12-26 11:50:10
original
853 Les gens l'ont consulté

How Can I Implement Resumable Downloads in PHP While Protecting File Paths?

Téléchargements pouvant être repris dans les scripts PHP

Lors du tunneling des téléchargements de fichiers via des scripts PHP pour sauvegarder les chemins de fichiers, il devient évident que les méthodes par défaut ne prennent pas en charge téléchargements pouvant être repris. Pour résoudre ce problème, envisagez la solution suivante :

L'essentiel de la prise en charge des téléchargements avec reprise est de mettre en œuvre une gestion partielle du contenu. Pour lancer cela, envoyez l'en-tête Accept-Ranges: bytes dans toutes les réponses, indiquant la prise en charge du contenu partiel.

À la réception d'une requête avec l'en-tête Range: bytes=x-y, analysez la plage spécifiée par le client. Ouvrez le fichier, recherchez l'octet x et envoyez les y - x octets demandés. De plus, définissez l'état de la réponse sur HTTP/1.0 206 Contenu partiel.

Voici un extrait de code PHP de base qui suit vaguement cette approche :

$filesize = filesize($file);

if (isset($_SERVER['HTTP_RANGE'])) {
    $partialContent = true;
    preg_match('/bytes=(\d+)-(\d+)?/', $_SERVER['HTTP_RANGE'], $matches);

    $offset = intval($matches[1]);
    $length = intval($matches[2]) - $offset;
} else {
    $partialContent = false;
}

$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

En incorporant ce mécanisme, vous activez la reprise téléchargements tout en préservant la confidentialité des emplacements de fichiers en utilisant des scripts PHP pour le tunneling.

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