2010-08-13 9 views
6

Ich habe eine Liste von Bildern und ich möchte einen "Download" -Link mit jedem Bild, so dass Benutzer das Bild herunterladen können.Wie erzwinge eine Datei zum Download in PHP

so kann mir jemand Anleitung Wie Download-Link für jede Datei in PHP zur Verfügung stellen?

EDIT

Ich möchte ein Download-Panel auf Klick auf den Download-Link angezeigt werden Ich möchte nicht zu Bild navigieren auf dem Browser

+4

'download'? – RaYell

+1

@RaYell er sagte * in PHP *. Also ist es eigentlich "echo" download '; ': P –

Antwort

29

angezeigt werden Wenn Sie erzwingen wollen Ein Download, können Sie etwas wie folgt verwenden:

<?php 
    // Fetch the file info. 
    $filePath = '/path/to/file/on/disk.jpg'; 

    if(file_exists($filePath)) { 
     $fileName = basename($filePath); 
     $fileSize = filesize($filePath); 

     // Output headers. 
     header("Cache-Control: private"); 
     header("Content-Type: application/stream"); 
     header("Content-Length: ".$fileSize); 
     header("Content-Disposition: attachment; filename=".$fileName); 

     // Output file. 
     readfile ($filePath);     
     exit(); 
    } 
    else { 
     die('The provided file path is not valid.'); 
    } 
?> 

Wenn Sie einfach zu diesem Skript verknüpfen Mit einem normalen Link wird die Datei heruntergeladen.

Übrigens, das obige Code-Snippet muss am Anfang einer Seite ausgeführt werden (bevor Header oder HTML-Ausgabe stattgefunden hat.) Vorsicht auch, wenn Sie sich entscheiden, eine Funktion zum Herunterladen von beliebigen Dateien zu erstellen - Sie müssen sicherstellen, dass Sie Directory Traversal verhindern (realpath ist praktisch), nur Downloads aus einem definierten Bereich, etc. erlauben, wenn Sie die Eingabe von einem $ _GET oder $ _POST akzeptieren.

+0

Genau das will ich, aber wie kann ich es verbinden mit Link wie" Download "beim Klicken auf das Skript ausgeführt werden sollte –

+0

Opps - guter Punkt. Ich werde meine Antwort aktualisieren. –

+1

+1 Hey Mann, es hat funktioniert, aber die heruntergeladene Datei wurde beschädigt, ich konnte das Bild nicht öffnen .. –

1

Die Lösung ist einfacher, dass Sie denken;) Einfache Anwendung:

header('Content-Disposition: attachment'); 

Und das ist alles. Facebook macht zum Beispiel dasselbe.

0

Sie können dies in .htaccess tun und für verschiedene Dateierweiterungen angeben. Es ist manchmal einfacher, dies zu tun, als hart in die Anwendung zu codieren.

<FilesMatch "\.(?i:pdf)$"> 
    ForceType application/octet-stream 
    Header set Content-Disposition attachment 
</FilesMatch> 

Übrigens müssen Sie den Browser-Cache möglicherweise löschen, bevor er ordnungsgemäß funktioniert.

+0

Anstatt die gleiche Antwort zu wiederholen, könnten Sie die Fragen, die Sie gefunden haben, als identisch kennzeichnen. – bummi

+1

Sie sind nicht doppelt vorhanden. Sie sind alle verschiedene Fragen, haben aber diese ähnliche mögliche Lösung. Die individuellen Antworten auf jede Frage können für Personen relevanter sein. Wenn Sie sie als Duplikat kennzeichnen, können Sie nützliche Informationen zerstören. Es ist nur so, dass die Antwort, die ich gegeben habe, einigen Leuten nützlich sein könnte, die nach diesen Fragen suchen. All diese Fragen, die ich beantwortet habe, sind in einer Google-Suche aufgetaucht, als ich selbst versucht habe, die Antwort zu finden. Ich brauchte eine lange Zeit, um die Lösung zu finden, und ich wollte auf jeden einzelnen antworten, so dass jeder, der danach suchte, auch von dieser Lösung wusste. –

1

In HTML5 download Attribut <a> Tag verwendet werden können:

echo '<a href="path/to/file" download>Download</a>'; 

Dieses Attribut wird nur verwendet, wenn das Attribut href gesetzt.

Es gibt keine Beschränkungen auf den erlaubten Werten, und der Browser automatisch die richtige Dateierweiterung erkennen und fügen Sie ihn in die Datei (.img, .pdf, .txt, .html, etc.).

Lesen Sie mehr here.

Verwandte Themen