用php编码错误下载doc文件

时间:2016-01-25 18:11:27

标签: php download ms-word http-headers doc

我有一个基于来自URL的file_id下载文件的php代码。一切都很好,但我在下载扩展名为.doc

的文件时遇到问题

这是我的代码,我做错了什么?

$file = mysql_fetch_array(mysql_query("SELECT * FROM ".sqlprefix."files WHERE id = '".$_GET['id']."'"));
    $tmp = explode(".",$file['url']);
    $tmp = $tmp[count($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;

在下载文件后,我得到这个。我认为,问题必须是编码... enter image description here

0 个答案:

没有答案