2012-08-23 22 views
10

Ich habe eine URL, wo ich einige Projekte aus meiner Arbeit speichern, sie sind meist MDB-Dateien, aber einige JPG und PDF sind auch da.Dateien vom Server herunterladen php

Was ich tun muss, ist jede Datei aus diesem Verzeichnis (bereits fertig) aufzulisten und dem Benutzer die Option zum Download zu geben.

Wie wird das mit PHP erreicht?

+1

Ist das nicht durch den Browser behandelt? – SomeKittens

+1

aber wie bekomme ich den Browser den Download zu starten? –

+0

Einen Link zu der Datei bereitstellen? – Nick

Antwort

24

Um Verzeichnisinhalte lesen können Sie readdir() verwenden und ein Skript verwenden, in meinem Beispiel download.php, Dateien Browser herunterladen Daten erzwingen

if ($handle = opendir('/path/to/your/dir/')) { 
    while (false !== ($entry = readdir($handle))) { 
     if ($entry != "." && $entry != "..") { 
      echo "<a href='download.php?file=".$entry."'>".$entry."</a>\n"; 
     } 
    } 
    closedir($handle); 
} 

In download.php herunterzuladen und basename() sicher Client machen zum Senden keine anderen Dateinamen übergeben wie ../config.php

$file = basename($_GET['file']); 
$file = '/path/to/your/dir/'.$file; 

if(!$file){ // file does not exist 
    die('file not found'); 
} else { 
    header("Cache-Control: public"); 
    header("Content-Description: File Transfer"); 
    header("Content-Disposition: attachment; filename=$file"); 
    header("Content-Type: application/zip"); 
    header("Content-Transfer-Encoding: binary"); 

    // read the file from disk 
    readfile($file); 
} 
+0

Ich bekomme eine 403 Nachricht; checked auf Ordner Erlaubnis und ist auf 777 eingestellt, so habe ich keine Ahnung, was los ist. –

+0

Stellen Sie sicher, dass der Pfad in Ordnung ist ... Pfad zu Ordner und Datei –

+0

Überprüfen Sie den Inhalt Ihrer .htaccess-Datei in dem Verzeichnis, in dem sich Ihre Datei befindet. –

2

Wenn auf den Ordner über den Browser zugegriffen werden kann (nicht außerhalb des Dokumentstamms Ihres Webservers), müssen Sie nur Links zu den Speicherorten dieser Dateien ausgeben. Wenn sie sich außerhalb des Dokumentenstamms befinden, müssen Sie Links, Schaltflächen usw. haben, die auf ein PHP-Skript verweisen, das die Dateien von ihrem Standort abruft und zu der Antwort streamt.

+0

Wenn Datei Bild oder Text ist wird es nicht herunterladen. –

+0

Wenn es sich um eine Datei handelt, die im Browser geöffnet wird, können Sie die Speicherfunktion des Browsers verwenden, um sie im Dateisystem zu speichern. Die Mission ist immer noch vollendet. –

+0

Wenn Sie das dem Kunden sagen können, habe ich gelernt, dass die meisten "Verbraucher" nicht wissen, was zu tun ist, wenn sie eine Textdatei im Browser öffnen, oder eine PDF-Datei .. –

0

Hier ist eine einfachere Lösung, um alle Dateien in einem Verzeichnis aufgelistet und es herunterladen.

In der index.php

<?php 
$dir = "./"; 

$allFiles = scandir($dir); 
$files = array_diff($allFiles, array('.', '..')); // To remove . and .. 

foreach($files as $file){ 
    echo "<a href='download.php?file=".$file."'>".$file."</a><br>"; 
} 

Die scandir() Funktionsliste alle Dateien und Verzeichnisse im angegebenen Pfad. Es arbeitet mit PHP 5 und PHP 7.

Jetzt im download.php

<?php 
$filename = basename($_GET['file']); 
// Specify file path. 
$path = ''; // '/uplods/' 
$download_file = $path.$filename; 

if(!empty($filename)){ 
    // Check file is exists on given path. 
    if(file_exists($download_file)) 
    { 
     header('Content-Disposition: attachment; filename=' . $filename); 
     readfile($download_file); 
     exit; 
    } 
    else 
    { 
     echo 'File does not exists on given path'; 
    } 
} 
Verwandte Themen