Datei herunterladen php

Wenn Sie diese Direktive nicht ändern können oder nicht, dann sollten Sie meine Anleitung zum Herunterladen von Dateien mit cURL überprüfen. Gibt die Anzahl der Bytes zurück, die bei Erfolg aus der Datei gelesen werden, oder FALSE bei Einem Fehler Wenn die allow_url_fopen-Direktive von PHP auf “0” festgelegt ist, schlägt der obige Code fehl. Dies liegt daran, dass die file_get_contents-Funktion erfordert, dass allow_url_fopen auf “1” festgelegt werden, um auf URL-Objekte zugreifen zu können. Was Sie – immer – tun müssen, ist, die Eingabe zu desingieren. Akzeptieren Sie nur Dateinamen, wie folgt: Methode 1: Verwenden der file_get_contents() Funktion: Die file_get_contents() Funktion wird verwendet, um eine Datei in eine Zeichenfolge zu lesen. Diese Funktion verwendet Speicherzuordnungstechniken, die vom Server unterstützt werden und somit die Leistung verbessern, so dass es eine bevorzugte Methode zum Lesen von Inhalten einer Datei ist. Noch besser wäre es, nur numerische IDs zu akzeptieren und den Dateipfad und den Namen aus einer Datenbank abzurufen (oder sogar eine Textdatei oder ein key=>value-Array, wenn sich das nicht oft ändert). Alles ist besser, als fragenblind anzunehmen. Im obigen Beispiel lade ich einen test.zip herunter (der eigentlich der Android-Studio-Reißverschluss auf meinem lokalen Computer war). php://output ist ein schreibgeschützter Stream (in der Regel durch Echo oder Druck verwendet).

Danach müssen Sie nur noch die erforderlichen Header festlegen und stream_copy_to_stream(Quelle, Ziel) aufrufen. stream_copy_to_stream() Methode fungiert als Pipe, die die Eingabe aus dem Quellstream (Lesestream) nimmt und an den Zielstream (Schreibstream) leitet und es auch das Problem des zulässigen Speichers vermeidet, der erschöpft ist, so dass Sie tatsächlich Dateien herunterladen können, die größer als Ihre PHP-memory_limit sind. Wenn Sie auf Apache sind, gibt es ein sehr cooles Modul namens mod_xsendfile, das den Download einfacher und schneller macht. Sie geben einfach einen Header aus und das Modul kümmert sich um den Rest. Natürlich müssen Sie in der Lage sein, es zu installieren und es macht auch den Code weniger portabel, so dass Sie wahrscheinlich nicht wollen, dass dies für redisable code verwenden. Wenn die Datei mit dem Browser nicht geöffnet werden kann, können Sie einfach den Location-Header verwenden: Sie können erzwingen, dass Bilder oder andere Arten von Dateien direkt auf die Festplatte des Benutzers heruntergeladen werden, indem Sie die PHP readfile()-Funktion verwenden.