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
Linda Hamiltonoriginal
2024-12-26 11:50:10859parcourir

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

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!

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