Warum können große Dateien in Laravel nicht einfach heruntergeladen werden?

7

Meine Datei (126 MB Größe, .exe) gibt mir Probleme.

Ich verwende die Standard-Laravel-Download-Methode.

Ich habe versucht, den Speicher zu erhöhen, aber es besagt immer noch, dass ich keinen Speicher mehr habe, oder ich lade eine 0 KB große Datei herunter.

Die Dokumentation erwähnt nichts über große Dateigrößen.

Mein Code ist

%Vor%

Was mache ich falsch?

- Bearbeiten -

Geht auf Phill Sparks Kommentar, das ist was ich habe und es funktioniert . Es ist eine Kombination von Phill und einigen von php.net. Nicht sicher, ob etwas darin fehlt?

%Vor%     
Lango 11.04.2013, 06:57
quelle

4 Antworten

13

Dies geschieht, weil Response::download() die Datei in den Speicher lädt, bevor sie dem Benutzer zur Verfügung gestellt wird. Zugegeben, das ist ein Fehler im Framework, aber die meisten Leute versuchen nicht, große Dateien über das Framework zu liefern.

Lösung 1 - Legen Sie die Dateien, die Sie herunterladen möchten, in den öffentlichen Ordner, in eine statische Domäne oder cdn - umgehen Sie Laravel vollständig.

Verständlicherweise versuchen Sie vielleicht, den Zugriff auf Ihre Downloads per Login zu beschränken. In diesem Fall müssen Sie Ihre eigene Download-Methode erstellen, so etwas sollte funktionieren ...

%Vor%

Diese Funktion ist eine Kombination aus Response :: download () und Laravels Herunterfahren . Ich hatte keine Gelegenheit, es selbst zu testen, ich habe Laravel 3 nicht bei der Arbeit installiert. Bitte lass es mich wissen, wenn es den Job für dich erledigt.

PS: Das einzige, um das sich dieses Skript nicht kümmert, sind Cookies. Leider ist die Funktion Response :: cookies () geschützt. Wenn dies ein Problem wird, können Sie den Code aus der Funktion heben und in Ihre sendFile-Methode einfügen.

PPS: könnte ein Problem bei der Ausgabepufferung sein; Wenn es ein Problem ist, schauen Sie im PHP-Handbuch nach readfile () Beispielen , es gibt eine Methode, die dort funktionieren sollte.

PPPS: Da Sie mit Binärdateien arbeiten, sollten Sie in Erwägung ziehen, readfile() durch fpassthru ()

BEARBEITEN: PPS und PPPS ignorieren, ich habe den Code aktualisiert, um stattdessen fread + print zu verwenden, da dies stabiler erscheint.

    
Phill Sparks 11.04.2013, 09:47
quelle
3

Ich verwende die readfile_chunked() benutzerdefinierte Methode wie in php.net hier . Für Laravel 3 habe ich die Antwortmethode folgendermaßen erweitert:

Fügen Sie diese Datei als applications/libraries/response.php

hinzu %Vor%

Dann kommentieren Sie diese Zeile in application / config / application.php:

%Vor%

Beispielcode:

%Vor%

Funktioniert bisher sehr gut.

    
Arda 24.07.2013 14:20
quelle
2

Sie können Symfony \ Component \ HttpFoundation \ StreamedResponse wie folgt verwenden:

%Vor%

Weitere Informationen erhalten Sie dies

    
Aite 28.04.2016 09:31
quelle
0

Sie müssen Ihr memory_limit wie folgt erhöhen:

Sie müssen memory_limit mit der Funktion ini_set erhöhen, z. B. ini_set('memory_limit','128M');

Das wird für Sie funktionieren, hoffe ich!

Ich fand die Antwort hier: Ссылка

    
Kees Sonnema 11.04.2013 07:01
quelle

Tags und Links