在php中下载word文档时出错

时间:2012-10-14 23:40:50

标签: php ms-word mime-types content-disposition

我有一个Word文档,我希望用户从网站上的链接下载。

代码在我的localhost上运行正常。但是,当我在服务器上上传网站时,它不会在本地计算机上提供保存选项,而是在浏览器中打开。以下是我的代码:

// Define the path to file

    $file = <filepath>;
    if(!file_exists($file))
    {
        die('Hard Copy does not exist on Server at the moment . Sorry for the inconvinience');
    }
    else
    {

    // required for IE, otherwise Content-Disposition may be ignored
        if(ini_get('zlib.output_compression'))
        ini_set('zlib.output_compression', 'Off');
        ob_clean();
        // Set headers
        header("Cache-Control: private");
        header("Content-Description: File Transfer");
        header("Content-Disposition: attachment; filename=$file");
        header("Content-Type: application/msword");
        header("Content-Transfer-Encoding: binary");

        readfile($file);
    }

现在,据我所知,如果我将Content-Disposition作为附件提供,它应该提示保存文件。

另外,我在.htaccess文件中添加了“AddType msword .doc”。它仍然给出相同的结果。

是否需要在服务器上进行其他设置?

2 个答案:

答案 0 :(得分:1)

基于此:How to prevent caching in Internet Explorer我建议您添加以下内容

header("Expires: Mon, 26 Jul 1997 05:00:00 GMT\n");
header("Last-Modified: " . gmdate("D, d M Y H:i:s") . " GMT");
header(sprintf("Content-Length: %d;\n"),filesize($file));

您也可以添加

header("Pragma: no-cache");
header("Cache-Control: no-cache, must-revalidate"); 

除此之外..你的代码在这里工作正常:

答案 1 :(得分:0)

尝试添加:

header('Expires: 0');
header('Content-Length: ' . filesize($file));
header('Content-Type: application/octet-stream');

修改

但是,它可以在我的两个不同的测试服务器上运行,就像你的代码一样,所以我认为这是一个服务器配置问题而不是PHP代码级别的东西。