2013-02-12 10 views
9

Durch die Codeigniter-Dokumentation, verwende ich folgenden Code, um Download-Dateien von meinem Server zu erzwingen.Codeigniter Force Download-Dateien

Der Code ist Arbeitsdatei für Bilder, aber wenn es mit dem Fall von PDF-Dateien kommt, funktioniert es nicht. Ich habe es nicht für alle Dateierweiterungen getestet, aber da es nicht für PDF funktioniert, funktioniert es möglicherweise nicht für andere Dateitypen. Irgendeine Lösung?

+0

Funktioniert nicht wie? wird nicht heruntergeladen? öffnet sich nicht in einem PDF-Reader? Fehler? –

+1

ja .. wenn ich klicke auf den Link, den ich erstellt habe "download/32", es öffnet nur den Link und es ist eine leere Seite. es ist 'download/$ file_id' .. – prakashchhetri

+0

.zip, .jpg, .txt, .gif alle funktionieren, aber nicht .pdf – prakashchhetri

Antwort

19

Ich hatte ähnliche Probleme, ich denke, das Problem liegt in bestimmten Mime und Header an Browser gesendet. Ich benutze den Code, den ich hier gefunden habe http://taggedzi.com/articles/display/forcing-downloads-through-codeigniter. Verwenden Sie die folgende Funktion anstelle von force_download. Es hat für mich bisher funktioniert.

function _push_file($path, $name) 
{ 
    // make sure it's a file before doing anything! 
    if(is_file($path)) 
    { 
    // required for IE 
    if(ini_get('zlib.output_compression')) { ini_set('zlib.output_compression', 'Off'); } 

    // get the file mime type using the file extension 
    $this->load->helper('file'); 

    $mime = get_mime_by_extension($path); 

    // Build the headers to push out the file properly. 
    header('Pragma: public');  // required 
    header('Expires: 0');   // no cache 
    header('Cache-Control: must-revalidate, post-check=0, pre-check=0'); 
    header('Last-Modified: '.gmdate ('D, d M Y H:i:s', filemtime ($path)).' GMT'); 
    header('Cache-Control: private',false); 
    header('Content-Type: '.$mime); // Add the mime type from Code igniter. 
    header('Content-Disposition: attachment; filename="'.basename($name).'"'); // Add the file name 
    header('Content-Transfer-Encoding: binary'); 
    header('Content-Length: '.filesize($path)); // provide file size 
    header('Connection: close'); 
    readfile($path); // push it out 
    exit(); 
} 

Ich hoffe, es hilft.

+0

Vielleicht war das ein Problem mit den älteren Versionen von codeigniter, aber jetzt, wo ich Codeigniter 2.2 benutze, hat pdf kein Problem, und die Antwort von RJ Anoop war nützlich. – Musa

8

Es funktioniert für .pdf auch !!! PLZ überprüfen Sie den Pfad zu der Datei. Das könnte das Problem sein, denke ich. Ich hatte auch dieses Problem. Aber wenn ich den Pfad zu der Datei korrigieren, hat es perfekt funktioniert ... Folgendes ist, wie ich den Code schrieb !!!

if($src == "xyyx") 
{ 
$pth = file_get_contents(base_url()."path/to/the/file.pdf"); 
$nme = "sample_file.pdf"; 
force_download($nme, $pth);  
} 

Hoffe, das kann hilfreich sein! Danke und Gruß

+0

Funktionierte anfangs nicht. zeige nur eine leere Seite. Ich entschuldige mich, die Erweiterung ".pdf" hinzuzufügen – aphoe