Heim  >  Artikel  >  Backend-Entwicklung  >  Ausführliche Erklärung, wie PHP die Datei-Download-Geschwindigkeit begrenzt

Ausführliche Erklärung, wie PHP die Datei-Download-Geschwindigkeit begrenzt

*文
*文Original
2018-01-05 18:00:032382Durchsuche

Wie kann ich die Datei-Download-Geschwindigkeit in PHP begrenzen? In diesem Artikel wird hauptsächlich der Code zur Begrenzung der Datei-Download-Geschwindigkeit in PHP vorgestellt und eine detaillierte Codeanalyse durchgeführt, auf die sich Freunde in Not beziehen können. Ich hoffe, es hilft allen.

Manchmal müssen Sie möglicherweise aus irgendeinem Grund die Datei-Download-Geschwindigkeit verlangsamen, z. B. wenn Sie eine Fortschrittsbalkenfunktion für den Datei-Download implementieren möchten. Der größte Vorteil der Begrenzung der Download-Geschwindigkeit besteht darin, Bandbreite zu sparen und eine Netzwerküberlastung durch übermäßigen momentanen Datenverkehr zu vermeiden. In diesem Artikel erfahren Sie, wie Sie die Download-Geschwindigkeit von Dateien durch PHP-Code begrenzen können.
Werfen wir zunächst einen Blick auf den Code, der PHP verwendet, um die Datei-Download-Geschwindigkeit zu begrenzen:

<?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;); 
}

Lassen Sie uns eine Analyse des obigen Codes durchführen:
1 Begrenzen Sie die Datei-Download-Geschwindigkeit auf 31,2 KB/s, d. h., es wird nur ein 20,5 KB großer Dateistream pro Sekunde an den Client gesendet, bis die gesamte Datei gesendet wurde. Wenn es keine solche Beschränkung gibt, werden die Dateien zusammen in Form eines Streams an den Client gesendet, und zwar so viele, wie gesendet werden. Was passiert? Wenn die Dateigröße 2 m beträgt, kann die Übertragung des 2 m langen Datenstroms auf einmal zu einer Netzwerküberlastung führen und die Ausführung des Skripts unterbrechen. Diese Download-Methode kann in tatsächlichen Anwendungen nicht verwendet werden.
2. Technische Aspekte : Fügen Sie zunächst die Header-Datei hinzu, deklarieren Sie Content-Type als Anwendung/Oktett-Stream, um anzuzeigen, dass die Anforderung in einem Stream gesendet wird, und deklarieren Sie Content-Length , Deklarieren Sie die Datei Die Größe des Streams. Flush() wird im Code verwendet. Die Flush-Funktion dient dazu, den Puffer des PHP-Programms zu aktualisieren und eine dynamische Druckausgabe zu realisieren.

Noch eine Erinnerung: Mit dem obigen Code können Sie auch die Funktion des Clients realisieren, der den Fortschrittsbalken für den Dateidownload anzeigt. Freunde, die interessiert sind, können es versuchen, aber ich werde hier nicht mehr schreiben .

Verwandte Empfehlungen:

Ausführliche Erklärung, wie die Datenbank in eine CSV-Datei in PHP exportiert wird

Detaillierte Erläuterung, wie PHP die Stabilität der Schülerergebnisse berechnet

Detaillierte Erläuterung der PHP-Betriebsdatenbank basierend auf ORM

Das obige ist der detaillierte Inhalt vonAusführliche Erklärung, wie PHP die Datei-Download-Geschwindigkeit begrenzt. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Stellungnahme:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn