


Comment implémenter la reprise du point d'arrêt de téléchargement de fichiers en PHP
Cet article explique principalement avec vous comment implémenter la reprise du point d'arrêt de téléchargement de fichiers en PHP. J'espère qu'il pourra vous aider. Si notre site Web propose des services de téléchargement de fichiers, nous espérons généralement que le téléchargement pourra être repris (Resumable Download), ce qui signifie que l'utilisateur peut suspendre le téléchargement et continuer le téléchargement à partir du point de pause à un moment donné dans le futur sans avoir à redémarrer. Téléchargez l'intégralité du fichier.
Normalement, les serveurs Web (tels qu'Apache) activeront par défaut la prise en charge de la reprise des téléchargements. Par conséquent, si vous proposez des téléchargements de fichiers directement via le serveur Web, vous pouvez profiter des avantages de la reprise du téléchargement sans effectuer de configurations spéciales. Étant donné que ces fichiers sont fournis en téléchargement directement via le serveur Web, le script back-end ne peut pas contrôler le processus de téléchargement. Cela ne pose pas de problème pour les sites Web qui fournissent uniquement des fichiers publics statiques, mais pour les sites Web qui doivent fournir des fichiers privés et dynamiques, le fait de proposer des téléchargements directement via le serveur Web ne peut pas répondre aux besoins. À l'heure actuelle, vous devez ajouter la prise en charge du téléchargement de la reprise du point d'arrêt lors de l'écriture du programme de script en arrière-plan.
Cet article utilisera PHP comme exemple pour présenter brièvement la méthode de reprise des téléchargements de fichiers.
Principe
Le principe de reprise du téléchargement est relativement intuitif.
Le protocole HTTP précise comment transmettre une partie d'une ressource, pas la totalité. Par exemple, si la taille d'un fichier est de 1 000 octets, le navigateur ne peut demander que les 300 premiers octets du fichier, ou uniquement les 500e au 1 000e octets. De cette façon, au lieu de transmettre l’intégralité du contenu d’une ressource en une seule requête, vous pouvez effectuer plusieurs requêtes, chacune ne demandant qu’une partie du contenu. Une fois toutes ces requêtes renvoyées, le contenu obtenu est assemblé pièce par pièce pour obtenir la ressource complète.
Pour implémenter le téléchargement avec reprise du point d'arrêt, il faut utiliser les caractéristiques ci-dessus du protocole http. Lorsque l'utilisateur suspend le téléchargement, le navigateur enregistre l'emplacement téléchargé. Lorsque l'utilisateur reprend le téléchargement à un moment donné dans le futur, le téléchargement peut reprendre à partir du dernier emplacement interrompu sans avoir à recommencer depuis le début.
Mise en œuvre
Étant donné que la transmission partielle n'est pas obligatoire et que le serveur peut ou non la prendre en charge, nous devons indiquer au navigateur dans le programme si la ressource qu'il demande prend en charge la transmission partielle. Cela peut être accompli en définissant l'en-tête de réponse HTTP Accept-Ranges. Le code PHP est le suivant :
Le code est le suivant :
header('Accept-Ranges: bytes');
Accept-Ranges : bytes indique au navigateur que la ressource prend en charge la transmission partielle en octets. Cet en-tête de réponse doit être ajouté à toutes les ressources qui prennent en charge les transferts partiels.
Lors de la réception d'une demande, nous devons extraire de la demande du navigateur quelle partie de la ressource le navigateur demande. Ces informations sont transmises via l’en-tête de requête Range. En PHP, il est stocké dans $_SERVER['HTTP_RANGE']. Nous devons vérifier si cette variable est définie, si c'est le cas, utilisez la valeur, sinon, définissez la plage sur la ressource entière.
Le code est le suivant :
$range = "0-". ($content_length-1); if(isset($_SERVER['HTTP_RANGE'])){ $range = $_SERVER['HTTP_RANGE']; }
Ensuite, vous devez analyser la valeur de $range pour décider quelle partie de la ressource renvoyer. Exemples de valeurs possibles :
Le code est le suivant :
100-200 // 第100到第200字节 500- // 第500字节到文件末尾 -1000 // 最后的1000个字节
Il convient de noter ici qu'après avoir obtenu une plage, vous devez vérifier sa valeur, notamment :
1. La position de départ est non négative
2. La position de fin doit être supérieure à la position de départ
3 La position de départ doit être inférieure à la longueur du fichier moins un. (car l'index de position ici commence à 0)
4. Si la position finale est supérieure à la longueur du fichier moins un, vous devez définir sa valeur sur la longueur du fichier moins un
如果Range的取值不合法,则需要终止程序并告知浏览器:
代码如下:
header('HTTP/1.1 416 Requested Range Not Satisfiable');
为了保持文章简洁,具体的校验代码这里就不提供了。下面假定你已经校验了Range的取值,并得到了 $start 和 $end 两个变量,分别表示开始位置和结束位置。
接下来要做的就是把文件的对应部分的内容发送给浏览器。不过要注意的是,这里涉及到需要发送多个HTTP响应头信息,具体如下:
代码如下:
header('HTTP/1.1 206 Partial Content'); header('Accept-Ranges: bytes'); header("Content-Range: bytes $start-$end/$filesize"); $length = $end - $start + 1; header("Content-Length: $length"); /* 输出文件的指定部分 */
这里的$length需要注意一下,它的取值是本次传输的内容的长度,而不是整个文件的长度。另外需要注意的一点是,这里的HTTP状态码是206,不是200。
总结
文件下载的断点续传实际上是利用了HTTP协议中对传输部分文件的支持。而HTTP协议的这一特性不仅可以用于实现断点续传,客户端程序也可以利用它来实现多线程下载。
在实现断点续传的过程中,需要注意正确设置各种HTTP头信息。错误的头信息将导致用户下载到的文件损坏,无法使用。
相关推荐:
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!

Outils d'IA chauds

Undresser.AI Undress
Application basée sur l'IA pour créer des photos de nu réalistes

AI Clothes Remover
Outil d'IA en ligne pour supprimer les vêtements des photos.

Undress AI Tool
Images de déshabillage gratuites

Clothoff.io
Dissolvant de vêtements AI

Video Face Swap
Échangez les visages dans n'importe quelle vidéo sans effort grâce à notre outil d'échange de visage AI entièrement gratuit !

Article chaud

Outils chauds

Bloc-notes++7.3.1
Éditeur de code facile à utiliser et gratuit

SublimeText3 version chinoise
Version chinoise, très simple à utiliser

Envoyer Studio 13.0.1
Puissant environnement de développement intégré PHP

Dreamweaver CS6
Outils de développement Web visuel

SublimeText3 version Mac
Logiciel d'édition de code au niveau de Dieu (SublimeText3)

Sujets chauds

PHP 8.4 apporte plusieurs nouvelles fonctionnalités, améliorations de sécurité et de performances avec une bonne quantité de dépréciations et de suppressions de fonctionnalités. Ce guide explique comment installer PHP 8.4 ou mettre à niveau vers PHP 8.4 sur Ubuntu, Debian ou leurs dérivés. Bien qu'il soit possible de compiler PHP à partir des sources, son installation à partir d'un référentiel APT comme expliqué ci-dessous est souvent plus rapide et plus sécurisée car ces référentiels fourniront les dernières corrections de bogues et mises à jour de sécurité à l'avenir.

Si vous êtes un développeur PHP expérimenté, vous aurez peut-être le sentiment d'y être déjà allé et de l'avoir déjà fait. Vous avez développé un nombre important d'applications, débogué des millions de lignes de code et peaufiné de nombreux scripts pour réaliser des opérations.

Visual Studio Code, également connu sous le nom de VS Code, est un éditeur de code source gratuit – ou environnement de développement intégré (IDE) – disponible pour tous les principaux systèmes d'exploitation. Avec une large collection d'extensions pour de nombreux langages de programmation, VS Code peut être c

JWT est une norme ouverte basée sur JSON, utilisée pour transmettre en toute sécurité des informations entre les parties, principalement pour l'authentification de l'identité et l'échange d'informations. 1. JWT se compose de trois parties: en-tête, charge utile et signature. 2. Le principe de travail de JWT comprend trois étapes: la génération de JWT, la vérification de la charge utile JWT et l'analyse. 3. Lorsque vous utilisez JWT pour l'authentification en PHP, JWT peut être généré et vérifié, et les informations sur le rôle et l'autorisation des utilisateurs peuvent être incluses dans l'utilisation avancée. 4. Les erreurs courantes incluent une défaillance de vérification de signature, l'expiration des jetons et la charge utile surdimensionnée. Les compétences de débogage incluent l'utilisation des outils de débogage et de l'exploitation forestière. 5. L'optimisation des performances et les meilleures pratiques incluent l'utilisation des algorithmes de signature appropriés, la définition des périodes de validité raisonnablement,

Ce tutoriel montre comment traiter efficacement les documents XML à l'aide de PHP. XML (Language de balisage extensible) est un langage de balisage basé sur le texte polyvalent conçu à la fois pour la lisibilité humaine et l'analyse de la machine. Il est couramment utilisé pour le stockage de données et

Une chaîne est une séquence de caractères, y compris des lettres, des nombres et des symboles. Ce tutoriel apprendra à calculer le nombre de voyelles dans une chaîne donnée en PHP en utilisant différentes méthodes. Les voyelles en anglais sont a, e, i, o, u, et elles peuvent être en majuscules ou en minuscules. Qu'est-ce qu'une voyelle? Les voyelles sont des caractères alphabétiques qui représentent une prononciation spécifique. Il y a cinq voyelles en anglais, y compris les majuscules et les minuscules: a, e, i, o, u Exemple 1 Entrée: String = "TutorialSpoint" Sortie: 6 expliquer Les voyelles dans la chaîne "TutorialSpoint" sont u, o, i, a, o, i. Il y a 6 yuans au total

Liaison statique (statique: :) implémente la liaison statique tardive (LSB) dans PHP, permettant à des classes d'appel d'être référencées dans des contextes statiques plutôt que de définir des classes. 1) Le processus d'analyse est effectué au moment de l'exécution, 2) Recherchez la classe d'appel dans la relation de succession, 3) il peut apporter des frais généraux de performance.

Quelles sont les méthodes magiques de PHP? Les méthodes magiques de PHP incluent: 1. \ _ \ _ Construct, utilisé pour initialiser les objets; 2. \ _ \ _ Destruct, utilisé pour nettoyer les ressources; 3. \ _ \ _ Appel, gérer les appels de méthode inexistants; 4. \ _ \ _ GET, Implémentez l'accès à l'attribut dynamique; 5. \ _ \ _ SET, Implémentez les paramètres d'attribut dynamique. Ces méthodes sont automatiquement appelées dans certaines situations, améliorant la flexibilité et l'efficacité du code.
