Téléchargements pouvant être repris avec le tunneling de fichiers basé sur PHP
Dans ce scénario, où PHP est utilisé comme proxy pour les téléchargements de fichiers, les utilisateurs sont confrontés à des défis en reprenant les téléchargements interrompus. Cet article vise à résoudre ce problème et à explorer les solutions possibles.
Implémentation des téléchargements avec reprise en PHP
Pour activer les téléchargements avec reprise, vous devez d'abord transmettre la prise en charge du serveur pour le contenu partiel via l'en-tête "Accept-Ranges: bytes". Par la suite, lorsqu'une requête inclut l'en-tête "Range: bytes=x-y" (où x et y représentent des valeurs numériques), vous devez extraire la plage demandée et manipuler le transfert de fichier en conséquence.
Le code PHP suivant accomplit cela. :
$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 ($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);
Notes supplémentaires
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!