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!