2016-05-13 6 views
3

Ich habe einen PHP-Code zum Herunterladen von Datei basierend auf file_id von URL. Alles funktioniert gut, aber ich habe Probleme mit dem Herunterladen von Dateien mit der Erweiterung .docphp readfile bad charset

Hier ist mein Code, was mache ich falsch?

$ file = mysql_fetch_array (mysql_query ("SELECT * FROM" .sqlprefix. "Dateien WHERE id = '". $ _ GET [' id ']. "'")); $ tmp = explodieren (".", $ File ['url']); $ tmp = $ tmp [Anzahl ($ tmp) -1]; // $ tmp = "doc";

switch ($tmp) { 
    case "pdf": $ctype="application/pdf"; break; 
    case "exe": $ctype="application/octet-stream"; break; 
    case "zip": $ctype="application/zip"; break; 
    case "docx": $ctype="application/vnd.openxmlformats-officedocument.wordprocessingml.document"; break; 
    case "doc": $ctype="application/msword"; break; 
    case "csv": 
    case "xls": 
    case "xlsx": $ctype="application/vnd.ms-excel"; break; 
    case "ppt": $ctype="application/vnd.ms-powerpoint"; break; 
    case "gif": $ctype="image/gif"; break; 
    case "png": $ctype="image/png"; break; 
    case "jpeg": 
    case "jpg": $ctype="image/jpg"; break; 
    case "tif": 
    case "tiff": $ctype="image/tiff"; break; 
    case "psd": $ctype="image/psd"; break; 
    case "bmp": $ctype="image/bmp"; break; 
    case "ico": $ctype="image/vnd.microsoft.icon"; break; 
    default: $ctype="application/force-download"; 
} 

$baseName = basename($file['url_del']); 
$fileSize = filesize($file['url_del']); 
$url = $file['url_del']; 

// $ctype = "application/msword"; 
// $baseName = "File name with spaces and diacritic ěščěšč.doc" 
// $fileSize = "214016" 
// $url = "./files/File name with spaces and diacritic ěščěšč.doc"; 


    header('Content-Description: File Transfer'); 
    header('Content-Type: '.$ctype); 
    header('Content-Disposition: attachment; filename='.$baseName); 
    header('Expires: 0'); 
    header('Pragma: public'); 
    header('Content-Length: '.$fileSize); 
    readfile($url); 
    exit; 

Nach dem Herunterladen der Datei in Word bekomme ich dies.

enter image description here

Ich denke, muss dieses Problem bei der Codierung sein ... eingeben Bild Beschreibung hier

Antwort

0

Es war schrecklich für mich auch. Ich habe die slution hier: PHP readfile() causing corrupt file downloads

Versuchen Sie, diese Zeilen vor ReadFile- setzen():

//clean all levels of output buffering 
while (ob_get_level()) { 
    ob_end_clean(); 
}