2016-09-28 2 views
0

Ich habe den folgenden Code geschrieben, um den Download von Dateien ohne die Quelle angezeigt zu werden.PHP File Down mit Header()

In diesem Beispiel wird die Datei 'test.pdf' heruntergeladen, aber sie ist beschädigt.

Kann jemand irgendeinen Grund sehen, dass dies der Fall sein würde?

$path = 'http://www.domain.org/images/uploads/test.pdf'; 

// Directory Path 
$directory_path_filename = str_replace('http://www.domain.org/', '', $path); 

$filepath = '/var/sites/l/domain.org/public_html/'.$directory_path_filename; 

if (file_exists($filepath)) { 

    $finfo = finfo_open(FILEINFO_MIME); 
    header('Content-Type: application/pdf'); 
    header('Content-Disposition: attachment; filename= ' . basename($filepath)); 
    header('Content-Length: ' . filesize($filepath)); 
    header('Expires: 0'); 
    finfo_close($finfo); 

    ob_clean(); 
    flush(); 
    readfile($filepath); 
    exit; 
} 

Antwort

0

Bitte verwenden Sie diese Methode

$ file erhalten Sie den vollständigen Pfad, $ filename ist der Download-Dateiname.

public static function downloadFile($file, $filename) 
    { 
     if (file_exists($file)) { 
      header('Content-Description: File Transfer'); 
      header('Content-Type: application/octet-stream'); 
      header('Content-Disposition: attachment; filename = '.basename($filename)); 
      header('Content-Transfer-Encoding: binary'); 
      header('Expires: 0'); 
      header('Cache-Control: must-revalidate, post-check = 0, pre-check = 0'); 
      header('Pragma: public'); 
      header('Content-Length: ' . filesize($file)); 
      ob_clean(); 
      flush(); 
      readfile($file); 
      die; 
     } 
    } 
+0

Hallo Pedro. Danke, aber das führt immer noch zu dem gleichen Problem. Die Datei kann nach dem Herunterladen nicht geöffnet werden. – ccdavies

+0

In diesem Fall haben Sie wahrscheinlich eine Ausgabe vor den Headern ... wie eine Noite oder etwas, könnten Sie bitte den vollen Code posten? –