0

我有一个 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”。它仍然给出相同的结果。

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

4

2 回答 2

1

基于此:如何防止 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"); 

除此之外..您的代码从这里可以正常工作:

于 2012-10-14T23:42:58.223 回答
0

尝试添加:

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

编辑

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

于 2012-10-14T23:46:56.327 回答