force-download

___ qstnhdr ___ Wie erzwinge ich den Download großer Dateien, ohne zu viel Speicher zu verbrauchen? ___ answer6201270 ___

Sie senden den Inhalt ($ data) dieser Datei per PHP?

Wenn dies der Fall ist, wird jeder Apache-Prozess, der damit fertig wird, auf die Größe dieser Datei wachsen, da diese Daten zwischengespeichert werden.

Ihre einzige Lösung ist, keine Dateiinhalte / Daten über PHP zu senden und den Benutzer einfach zu einer Download-URL im Dateisystem umzuleiten.

Verwenden Sie einen generierten und eindeutigen Symlink oder einen versteckten Ort.

    
___ answer6195665 ___

Sie können $ data nicht mit ganzen Dateidaten darin verwenden. Versuchen Sie, an diese Funktion nicht den Inhalt der Datei zu übergeben, sondern nur den Pfad. Als nächstes senden Sie alle Header einmal und danach lesen Sie einen Teil dieser Datei mit fread (), echo diesen Chunk, call flush () und wiederholen. Wenn in der Zwischenzeit ein anderer Header gesendet wird, wird die Übertragung schließlich beschädigt.

    
___ qstntxt ___

Ich versuche, große Zip-Dateien für Benutzer bereitzustellen. Wenn zwei gleichzeitige Verbindungen vorhanden sind, verfügt der Server nicht über genügend Arbeitsspeicher (RAM). Ich habe die Speicherkapazität von 300MB auf 4GB erhöht (Dreamhost VPS) und dann hat es funktioniert.

Ich muss viel mehr als zwei gleichzeitige Verbindungen zulassen. Die tatsächlichen 4 GB würden so etwas wie 20 gleichzeitige Verbindungen erlauben (schade).

Nun, der aktuelle Code, den ich benutze, benötigt das doppelte an Speicher und dann die tatsächliche Dateigröße. Das ist sehr schade. Ich möchte etwas wie "Streaming" der Datei an den Benutzer. Also würde ich nicht mehr als das Stück, das den Benutzern serviert wird, zuweisen.

Der folgende Code ist der, den ich in CodeIgniter (PHP-Framework) verwende:

%Vor%

Die force_download-Funktion ist wie folgt (CodeIgniter Standard-Hilfsfunktion):

%Vor%

Ich habe einige auf Chunks basierende Codes ausprobiert, die ich in Google gefunden habe, aber die Datei wurde immer beschädigt geliefert. Wahrscheinlich wegen schlechtem Code.

Könnte mir jemand helfen?

    
___ answer6195636 ___

Es gibt einige Ideen in diesem Thema . Ich weiß nicht, ob die readfile () Methode Speicher speichert, aber es klingt vielversprechend.

    
___ answer6195689 ___

Verknüpfen Sie die große Datei mit Ihrem Dokumenten-Root (vorausgesetzt, es handelt sich nicht um eine autorisierte Datei) und lassen Sie Apache damit umgehen. (Auf diese Weise können Sie auch Byte-Bereiche akzeptieren)

    
___ tag123php ___ PHP ist eine weit verbreitete, dynamische, objektorientierte und interpretierte Skriptsprache, die primär für die serverseitige Webentwicklung entwickelt wurde. ___ answer6610119 ___

Fügen Sie Ihre %code% vor %code%

hinzu     
___ tag123memorymanagement ___ Prozess des dynamischen Zuweisens und Freigebens von Teilen des physischen Speichers, um auf Programmanforderungen mit, wenn möglich, Fairness und ohne Verhungern unter den Anforderern zu antworten. ___ tag123apache ___ Verwenden Sie dieses Tag (zusammen mit einem entsprechenden Programmiersprache-Tag) für die Programmierung von Fragen zum Apache HTTP Server. Verwenden Sie dieses Tag nicht für Fragen zu anderen Apache Foundation-Produkten. Beachten Sie, dass Fragen zur Serverkonfiguration normalerweise besser auf https://serverfault.com passen ___ tag123coderigniter ___ CodeIgniter ist ein Open-Source-Webentwicklungs-Framework für PHP, das von EllisLab Inc. entwickelt und vom British Columbia Institute of Technology übernommen wurde. Das Framework implementiert eine modifizierte Version des Model-View-Controller-Entwurfsmusters. Verwenden Sie dieses Tag für Fragen zu CodeIgniter-Klassen, Methoden, Funktionen, Syntax und Verwendung. ___ tag123professionalownload ___ hilf uns dieses Wiki zu bearbeiten ___
5
Antworten

Wie erzwinge ich den Download großer Dateien, ohne zu viel Speicher zu verbrauchen?

Ich versuche, große Zip-Dateien für Benutzer bereitzustellen. Wenn zwei gleichzeitige Verbindungen vorhanden sind, verfügt der Server nicht über genügend Arbeitsspeicher (RAM). Ich habe die Speicherkapazität von 300MB auf 4GB erhöht (Dreamhost V...
01.06.2011, 02:13