Maison développement back-end tutoriel php Comment implémenter la reprise du point d'arrêt de téléchargement de fichiers en PHP

Comment implémenter la reprise du point d'arrêt de téléchargement de fichiers en PHP

Mar 27, 2018 pm 01:45 PM
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');
Copier après la connexion

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'];
}
Copier après la connexion

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个字节
Copier après la connexion

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");
/* 输出文件的指定部分 */
Copier après la connexion

这里的$length需要注意一下,它的取值是本次传输的内容的长度,而不是整个文件的长度。另外需要注意的一点是,这里的HTTP状态码是206,不是200。

总结

文件下载的断点续传实际上是利用了HTTP协议中对传输部分文件的支持。而HTTP协议的这一特性不仅可以用于实现断点续传,客户端程序也可以利用它来实现多线程下载。

在实现断点续传的过程中,需要注意正确设置各种HTTP头信息。错误的头信息将导致用户下载到的文件损坏,无法使用。

相关推荐:

PHP下载断点续传

PHP实现文件下载断点续传

PHP实现下载断点续传的方法_PHP

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

Outils d'IA chauds

Undresser.AI Undress

Undresser.AI Undress

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

AI Clothes Remover

AI Clothes Remover

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

Undress AI Tool

Undress AI Tool

Images de déshabillage gratuites

Clothoff.io

Clothoff.io

Dissolvant de vêtements AI

Video Face Swap

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 !

Outils chauds

Bloc-notes++7.3.1

Bloc-notes++7.3.1

Éditeur de code facile à utiliser et gratuit

SublimeText3 version chinoise

SublimeText3 version chinoise

Version chinoise, très simple à utiliser

Envoyer Studio 13.0.1

Envoyer Studio 13.0.1

Puissant environnement de développement intégré PHP

Dreamweaver CS6

Dreamweaver CS6

Outils de développement Web visuel

SublimeText3 version Mac

SublimeText3 version Mac

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

Guide d'installation et de mise à niveau de PHP 8.4 pour Ubuntu et Debian Guide d'installation et de mise à niveau de PHP 8.4 pour Ubuntu et Debian Dec 24, 2024 pm 04:42 PM

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.

7 fonctions PHP que je regrette de ne pas connaître auparavant 7 fonctions PHP que je regrette de ne pas connaître auparavant Nov 13, 2024 am 09:42 AM

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.

Comment configurer Visual Studio Code (VS Code) pour le développement PHP Comment configurer Visual Studio Code (VS Code) pour le développement PHP Dec 20, 2024 am 11:31 AM

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

Expliquez les jetons Web JSON (JWT) et leur cas d'utilisation dans les API PHP. Expliquez les jetons Web JSON (JWT) et leur cas d'utilisation dans les API PHP. Apr 05, 2025 am 12:04 AM

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,

Comment analysez-vous et traitez-vous HTML / XML dans PHP? Comment analysez-vous et traitez-vous HTML / XML dans PHP? Feb 07, 2025 am 11:57 AM

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

Programme PHP pour compter les voyelles dans une chaîne Programme PHP pour compter les voyelles dans une chaîne Feb 07, 2025 pm 12:12 PM

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

Expliquez la liaison statique tardive en PHP (statique: :). Expliquez la liaison statique tardive en PHP (statique: :). Apr 03, 2025 am 12:04 AM

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 PHP Magic (__construct, __ destruct, __ call, __get, __set, etc.) et fournir des cas d'utilisation? Quelles sont les méthodes PHP Magic (__construct, __ destruct, __ call, __get, __set, etc.) et fournir des cas d'utilisation? Apr 03, 2025 am 12:03 AM

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.

See all articles