Maison >développement back-end >tutoriel php >Explication détaillée de la façon dont PHP limite la vitesse de téléchargement des fichiers

Explication détaillée de la façon dont PHP limite la vitesse de téléchargement des fichiers

*文
*文original
2018-01-05 18:00:032506parcourir

Comment limiter la vitesse de téléchargement des fichiers en php ? Cet article présente principalement le code permettant de limiter la vitesse de téléchargement des fichiers en PHP, avec une analyse détaillée du code, qui a une certaine valeur de référence. Les amis dans le besoin peuvent s'y référer. J'espère que cela aide tout le monde.

Parfois, vous devrez peut-être ralentir la vitesse de téléchargement des fichiers dans un certain but, par exemple si vous souhaitez implémenter une fonction de barre de progression du téléchargement de fichiers. Le plus grand avantage de la limitation de la vitesse de téléchargement est d’économiser de la bande passante et d’éviter la congestion du réseau causée par un trafic instantané excessif. Cet article vous expliquera comment limiter la vitesse de téléchargement des fichiers via le code PHP.
Tout d'abord, jetons un coup d'œil au code qui utilise php pour limiter la vitesse de téléchargement des fichiers :

<?php 
// 将发送到客户端的本地文件 
$local_file=&#39;abc.zip&#39;; 
// 文件名 
$download_file=&#39;your-download-name.zip&#39;; 
// 设置下载速率(=> 31.2 kb/s) 
$download_rate=31.2; 
if(file_exists($local_file)&&is_file($local_file)){ 
 header(&#39;Cache-control: private&#39;);// 发送 headers 
 header(&#39;Content-Type: application/octet-stream&#39;); 
 header(&#39;Content-Length: &#39;.filesize($local_file)); 
 header(&#39;Content-Disposition: filename=&#39;.$download_file); 
 flush();// 刷新内容 
 $file=fopen($local_file,"r"); 
 while (!feof($file)){ 
  print fread($file,round($download_rate*1024));// 发送当前部分文件给浏览者 
  flush();// flush 内容输出到浏览器端 
  sleep(1);// 终端1秒后继续 
 } 
 fclose($file);// 关闭文件流 
}else{ 
 die(&#39;Error: 文件 &#39;.$local_file.&#39; 不存在!&#39;); 
}

Faisons une analyse du code ci-dessus :
1. vitesse de téléchargement du fichier à 31,2 Ko/s, ce qui signifie envoyer uniquement un flux de fichier de 20,5 Ko au client par seconde jusqu'à ce que l'intégralité du fichier soit envoyée. S'il n'y a pas une telle limite, alors les fichiers seront envoyés au client ensemble sous forme de flux, et autant qu'il y en aura envoyé, Que se passera-t-il ? Si la taille du fichier est de 2 mois, la transmission simultanée du flux de données de 2 mois peut provoquer une congestion du réseau et interrompre l'exécution du script. Cette méthode de téléchargement ne peut pas être utilisée dans les applications réelles.
2. Aspects techniques , ajoutez d'abord le fichier d'en-tête, déclarez Content-Type comme application/octet-stream, indiquant que la requête sera envoyée dans un flux, et déclarez Content-Length, c'est-à-dire , déclarez le fichier La taille du flux. Flush() est utilisée dans le code. La fonction flush consiste à actualiser le tampon du programme php et à réaliser une sortie dynamique d'impression.

Autre rappel : en utilisant intelligemment le code ci-dessus, vous pouvez également réaliser la fonction du client affichant la barre de progression du téléchargement du fichier. Les amis intéressés peuvent l'essayer, mais je n'écrirai pas plus ici. .

Recommandations associées :

Explication détaillée de la façon d'exporter la base de données vers un fichier csv en PHP

Explication détaillée de la façon dont PHP calcule la stabilité des scores des étudiants

Explication détaillée de la base de données d'exploitation PHP basée sur ORM

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