我有一个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”。它仍然给出相同的结果。
是否需要在服务器上进行其他设置?
答案 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代码级别的东西。