


Technischer Leitfaden zum Hoch- und Herunterladen großer Dateien in PHP
Mit dem Aufkommen des mobilen Internetzeitalters wird die Notwendigkeit, große Dateien zu übertragen, immer häufiger. Unter anderem weist PHP als beliebte Programmiersprache eine gute Leistung beim Hoch- und Herunterladen großer Dateien auf. In diesem Artikel lernen wir die Technologie zum Hoch- und Herunterladen großer Dateien in PHP kennen, einschließlich wichtiger Technologien wie dem Umgang mit großen Dateien, Chunk-Uploads, fortgesetzten Uploads und asynchronen Downloads.
1. So verarbeiten Sie große Dateien in PHP
Der wichtigste Schritt bei der Verarbeitung großer Dateien in PHP ist die Planung eines geeigneten Speichernutzungsplans. Wir können die gesamte große Datei nicht direkt in den Speicher einlesen, da dies zu einem Speicherüberlauf und möglicherweise zum Absturz des gesamten Programms führt. Was ist also die Methode zur Verarbeitung großer Dateien in PHP?
Zunächst können wir das Konzept des „Dateizeigers“ verwenden, um dieses Problem zu lösen. Ein „Dateizeiger“ ist ein Zeiger in einer Datei, mit dem wir einen bestimmten Teil der Datei lesen können, anstatt die gesamte Datei auf einmal zu lesen. In PHP können wir die Funktionen fopen() und fread() verwenden, um Dateien zu öffnen und zu lesen.
Zweitens können wir die „Streaming“-Methode nutzen. Teilen Sie große Dateien zunächst in mehrere Teile auf und laden Sie sie dann Stück für Stück hoch oder herunter. Dadurch wird vermieden, dass die gesamte große Datei auf einmal gelesen wird, und die Datenintegrität wird gewährleistet.
2. Hochladen großer Dateien
Für die HTTP-Kommunikation beträgt die Standard-Upload-Dateigröße von PHP 2 MB, daher müssen wir die Option upload_max_filesize in der Konfigurationsdatei php.ini ändern, um das Hochladen größerer Dateien zu ermöglichen.
Aber auch nach der Änderung der php.ini-Datei treten beim Hochladen großer Dateien immer noch Probleme auf. Wie können wir Speicherlecks und Programmabstürze beim Hochladen vermeiden? Die Antwort besteht darin, die Chunked-Upload-Technologie zu verwenden.
- Chunked-Upload
Der sogenannte Chunked-Upload besteht darin, eine große Datei in Blöcke mit fester Größe aufzuteilen und diese dann Stück für Stück hochzuladen, bis der Upload abgeschlossen ist. Diese Methode vermeidet das gleichzeitige Lesen der gesamten Datei und verringert die Speicherbelastung des Servers.
Die spezifische Implementierung ist wie folgt:
Front-End-Code:
<input type="file" name="file" id="file">
var chunkSize = 1 * 1024 * 1024; //每一块的大小为1MB var file = document.getElementById('file').files[0]; var name = file.name; var size = file.size; var chunkNum = Math.ceil(size / chunkSize); //总块数 for(var i=0;i<chunkNum;i++){ var start = i*chunkSize; var end = Math.min(size,start+chunkSize); var chunk = file.slice(start,end); //将文件切成每个chunkSize大小的块 //使用FormData上传 var formData = new FormData(); formData.append('chunk', chunk); formData.append('filename', i+'_'+name); //在文件名前加上块的编号 //发起已经分割好的块的上传请求 send(chunkUrl,formData); }
Back-End-Code:
$chunk = $_FILES['chunk']; //获取文件块 $filename = $_POST['filename']; //获取文件名 //上传文件块 move_uploaded_file( $chunk['tmp_name'] , $upload.$filename); echo "success";
Der obige Code implementiert die Aufteilung großer Dateien in mehrere 1-MB-Blöcke zum Hochladen und verteilt so den Druck.
- Fortsetzbarer Upload
Ein weiteres erwähnenswertes Problem besteht darin, dass wir den Upload dort fortsetzen können, wo er unterbrochen wurde, wenn der Upload einer großen Datei versehentlich abgebrochen wird.
Die Antwort ist die Verwendung der Breakpoint-Resume-Technologie. Wir können den Fortschritt des Datei-Uploads während des Hochladens der Datei aufzeichnen und dann, wenn der Benutzer erneut hochlädt, die nicht abgeschlossenen Dateiblöcke des letzten Uploads zwischenspeichern, damit sie später erneut hochgeladen werden können.
Die spezifische Implementierung lautet wie folgt:
Front-End-Code:
var chunkSize = 1 * 1024 * 1024; //每一块的大小为1MB var file = document.getElementById('file').files[0]; var name = file.name; var size = file.size; var chunkNum = Math.ceil(size / chunkSize); //总块数 for(var i=0;i<chunkNum;i++){ var start = i*chunkSize; var end = Math.min(size,start+chunkSize); var chunk = file.slice(start,end); //将文件切成每个chunkSize大小的块 //使用FormData上传 var formData = new FormData(); formData.append('chunk', chunk); formData.append('filename', i+'_'+name); //在文件名前加上块的编号 formData.append('chunkNum',chunkNum); //总块数 formData.append('index',i); //当前块的编号 //将文件分块上传 send(chunkUrl,formData,function(){ uploaded[i] = 1; //标记该块已上传 var uploadedAll = uploaded.every(v => v == 1); //检查是否所有块都已上传 //如果所有块都已上传,则在服务端组装文件 if(uploadedAll){ var formData = new FormData(); formData.append('name', name); formData.append('chunkNum',chunkNum); //总块数 //发起文件组装请求 send(mergeUrl,formData,function(response){ console.log(response); }); } }); }
Back-End-Code:
$chunk = $_FILES['chunk']; //获取文件块 $filename = $_POST['filename']; //获取文件名 $chunkNum = $_POST['chunkNum']; //获取文件总块数 $index = $_POST['index']; //获取当前块的编号 //上传文件块 move_uploaded_file( $chunk['tmp_name'] , $upload.$filename); //上传完成后检查所有块是否已上传 $uploaded = $this->isUploaded($upload,$chunkNum); if($uploaded){ $this->mergeFile($upload,$chunkNum,$name); //组装文件 } echo "success";
Der obige Code implementiert das Hochladen von Dateien in Teilen, markiert den Upload-Fortschritt auf dem Client und überprüft, ob der Upload erfolgt auf dem Server abgeschlossen. Wenn der Upload abgeschlossen ist, werden alle hochgeladenen Dateiblöcke zusammengefügt.
3. Herunterladen großer Dateien
Beim Herunterladen großer Dateien in PHP müssen wir auch die Probleme von Speicherlecks und Programmabstürzen lösen. Hierfür können wir die asynchrone Download-Technologie nutzen.
Asynchrones Herunterladen bedeutet, dass die Download-Anfrage in einem separaten Thread platziert wird, um eine Blockierung des Haupt-Threads des Servers zu vermeiden. In PHP können wir die Funktion exec() verwenden, um einen separaten Thread zu starten.
Die spezifische Implementierung lautet wie folgt:
Front-End-Code:
<a href="#" onclick="download()">下载</a>
function download(){ var filename = 'test.zip'; //准备下载文件名 //发起异步下载请求 var ajax = new XMLHttpRequest(); ajax.open('GET', '/download.php?filename='+filename, true); ajax.send(); }
Back-End-Code:
$action = isset($_GET['action']) ? $_GET['action'] : 'download'; //获取下载动作 $filename = $_GET['filename']; //获取文件名 if($action == 'download'){ //启动异步下载 exec('php download.php '.$filename.' > /dev/null &'); }else{ //文件下载 header("Content-type: application/octet-stream"); header("Content-Disposition: attachment; filename=".$filename); header("Accept-Ranges: bytes"); $file = fopen($download.$filename,"r"); if($file){ while(!feof($file)){ print(fread($file, 1024*8 )); flush(); ob_flush(); } } fclose($file); }
Der obige Code implementiert eine asynchrone Download-Anfrage auf dem Client, und das Backend verwendet zum Starten die Funktion exec() Ein separater Thread für die Download-Aktion, wodurch das Problem der Blockierung des Hauptthreads vermieden wird. Gleichzeitig wird auch das Speicherproblem beim Herunterladen von Dateien durch den Chunked-Download und die Ausgabe in den Puffer gelöst.
4. Zusammenfassung
In diesem Artikel haben wir die Technologie zum Hochladen und Herunterladen großer Dateien in PHP kennengelernt, insbesondere den Umgang mit großen Dateien, Chunked Upload, Breakpoint Resume und asynchronem Download sowie anderen Technologien. Durch die Anleitung dieses Artikels können wir die Techniken zur Verarbeitung großer Dateien in PHP besser beherrschen und diese Techniken in tatsächlichen Projekten anwenden, um eine effiziente Übertragung großer Dateien zu erreichen.
Das obige ist der detaillierte Inhalt vonTechnischer Leitfaden zum Hoch- und Herunterladen großer Dateien in PHP. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Heiße KI -Werkzeuge

Undresser.AI Undress
KI-gestützte App zum Erstellen realistischer Aktfotos

AI Clothes Remover
Online-KI-Tool zum Entfernen von Kleidung aus Fotos.

Undress AI Tool
Ausziehbilder kostenlos

Clothoff.io
KI-Kleiderentferner

AI Hentai Generator
Erstellen Sie kostenlos Ai Hentai.

Heißer Artikel

Heiße Werkzeuge

Notepad++7.3.1
Einfach zu bedienender und kostenloser Code-Editor

SublimeText3 chinesische Version
Chinesische Version, sehr einfach zu bedienen

Senden Sie Studio 13.0.1
Leistungsstarke integrierte PHP-Entwicklungsumgebung

Dreamweaver CS6
Visuelle Webentwicklungstools

SublimeText3 Mac-Version
Codebearbeitungssoftware auf Gottesniveau (SublimeText3)

Heiße Themen



PHP 8.4 bringt mehrere neue Funktionen, Sicherheitsverbesserungen und Leistungsverbesserungen mit einer beträchtlichen Menge an veralteten und entfernten Funktionen. In dieser Anleitung wird erklärt, wie Sie PHP 8.4 installieren oder auf PHP 8.4 auf Ubuntu, Debian oder deren Derivaten aktualisieren. Obwohl es möglich ist, PHP aus dem Quellcode zu kompilieren, ist die Installation aus einem APT-Repository wie unten erläutert oft schneller und sicherer, da diese Repositorys in Zukunft die neuesten Fehlerbehebungen und Sicherheitsupdates bereitstellen.

Visual Studio Code, auch bekannt als VS Code, ist ein kostenloser Quellcode-Editor – oder eine integrierte Entwicklungsumgebung (IDE) –, die für alle gängigen Betriebssysteme verfügbar ist. Mit einer großen Sammlung von Erweiterungen für viele Programmiersprachen kann VS Code c

Wenn Sie ein erfahrener PHP-Entwickler sind, haben Sie möglicherweise das Gefühl, dass Sie dort waren und dies bereits getan haben. Sie haben eine beträchtliche Anzahl von Anwendungen entwickelt, Millionen von Codezeilen debuggt und eine Reihe von Skripten optimiert, um op zu erreichen

Dieses Tutorial zeigt, wie XML -Dokumente mit PHP effizient verarbeitet werden. XML (Extensible Markup-Sprache) ist eine vielseitige textbasierte Markup-Sprache, die sowohl für die Lesbarkeit des Menschen als auch für die Analyse von Maschinen entwickelt wurde. Es wird üblicherweise für die Datenspeicherung ein verwendet und wird häufig verwendet

JWT ist ein offener Standard, der auf JSON basiert und zur sicheren Übertragung von Informationen zwischen Parteien verwendet wird, hauptsächlich für die Identitätsauthentifizierung und den Informationsaustausch. 1. JWT besteht aus drei Teilen: Header, Nutzlast und Signatur. 2. Das Arbeitsprinzip von JWT enthält drei Schritte: Generierung von JWT, Überprüfung von JWT und Parsingnayload. 3. Bei Verwendung von JWT zur Authentifizierung in PHP kann JWT generiert und überprüft werden, und die Funktionen und Berechtigungsinformationen der Benutzer können in die erweiterte Verwendung aufgenommen werden. 4. Häufige Fehler sind Signaturüberprüfungsfehler, Token -Ablauf und übergroße Nutzlast. Zu Debugging -Fähigkeiten gehört die Verwendung von Debugging -Tools und Protokollierung. 5. Leistungsoptimierung und Best Practices umfassen die Verwendung geeigneter Signaturalgorithmen, das Einstellen von Gültigkeitsperioden angemessen.

Eine Zeichenfolge ist eine Folge von Zeichen, einschließlich Buchstaben, Zahlen und Symbolen. In diesem Tutorial wird lernen, wie Sie die Anzahl der Vokale in einer bestimmten Zeichenfolge in PHP unter Verwendung verschiedener Methoden berechnen. Die Vokale auf Englisch sind a, e, i, o, u und sie können Großbuchstaben oder Kleinbuchstaben sein. Was ist ein Vokal? Vokale sind alphabetische Zeichen, die eine spezifische Aussprache darstellen. Es gibt fünf Vokale in Englisch, einschließlich Großbuchstaben und Kleinbuchstaben: a, e, ich, o, u Beispiel 1 Eingabe: String = "TutorialPoint" Ausgabe: 6 erklären Die Vokale in der String "TutorialPoint" sind u, o, i, a, o, ich. Insgesamt gibt es 6 Yuan

Statische Bindung (statisch: :) implementiert die späte statische Bindung (LSB) in PHP, sodass das Aufrufen von Klassen in statischen Kontexten anstatt Klassen zu definieren. 1) Der Analyseprozess wird zur Laufzeit durchgeführt.

Was sind die magischen Methoden von PHP? Zu den magischen Methoden von PHP gehören: 1. \ _ \ _ Konstrukt, verwendet, um Objekte zu initialisieren; 2. \ _ \ _ Destruct, verwendet zur Reinigung von Ressourcen; 3. \ _ \ _ Call, behandeln Sie nicht existierende Methodenaufrufe; 4. \ _ \ _ GET, Implementieren Sie den dynamischen Attributzugriff; 5. \ _ \ _ Setzen Sie dynamische Attributeinstellungen. Diese Methoden werden in bestimmten Situationen automatisch aufgerufen, wodurch die Code -Flexibilität und -Effizienz verbessert werden.
