Apache / PHP große Datei herunterladen (2 GB) fehlgeschlagen

8

Ich benutze ein PHP-Skript, um den Zugriff auf Dateien zu kontrollieren. Dies funktioniert gut für alles unter 2 GB aber schlägt für größere Dateien fehl.

  • Apache und PHP sind beide 64bit
  • Apache will erlauben, dass die Datei heruntergeladen wird, wenn direkt darauf zugegriffen wird (was ich nicht erlauben kann)

Die Eingeweide der PHP (ignorieren die Zugangskontrolle):

%Vor%

Das Fehlerprotokoll zeigt die Dateigröße fein

%Vor%

Aber das Zugriffsprotokoll hat eine negative Größe:

%Vor%

Und so weigern sich Browser, die Datei herunterzuladen. Tatsächlich wird mit wget nichts gesendet:

%Vor%     
Rick 08.04.2014, 10:35
quelle

4 Antworten

6

Versuchen Sie, die Datei in Blöcken zu lesen und sie dem Browser zur Verfügung zu stellen, statt Ihren lokalen Speicher mit 2 GB zu füllen und alle gleichzeitig zu löschen.

Ersetzen Sie readfile($path); durch:

%Vor%

8192 Bytes ist in einigen Fällen ein kritischer Punkt, verweisen Sie auf php.net/fread .

Durch das Hinzufügen einiger Mikrozeitvariablen (und Vergleichen mit der Zeigerposition des Dateideskriptors) können Sie auch die maximale Geschwindigkeit des Downloads steuern.

* (Das Leeren des Ausgabepuffers hängt auch leicht vom Webserver ab. Verwenden Sie diese Befehle, um sicherzustellen, dass zumindest versucht wird, so viel wie möglich zu löschen.)

    
DanFromGermany 08.04.2014, 10:57
quelle
0

Fügen Sie Code vor der Read-Datei ($ path) hinzu;

%Vor%

Ich benutze diesen Code zum Download:

%Vor%     
Knase 08.04.2014 10:50
quelle
0

Ihre beste Wahl ist es, Apache mit einer solchen Funktion in den HTTP-Chunked-Modus zu zwingen. Sie werden eine Menge PHP-Speicher auf diese Weise speichern.

%Vor%     
Ghigo 08.04.2014 11:04
quelle
0

Ich bin schon auf dieses Problem gestoßen und habe das folgende Skript zum Herunterladen von Dateien verwendet. Es zerlegt die Datei in Stücke, um große Dateien herunterzuladen, anstatt zu versuchen, die ganze Datei auf einmal aufzunehmen. Dieses Skript berücksichtigt auch den Browser, der verwendet wird, da einige Browser (nämlich IE) Header leicht anders handhaben können.

%Vor%     
llanato 08.04.2014 10:43
quelle

Tags und Links