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.
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%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:
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.)
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%