我有一个word文档,我希望用户从网站上的链接下载。
代码在我的本地主机上工作正常。但是,当我在服务器上上传网站时,它不是提供在本地机器上保存的选项,而是在浏览器本身中打开。以下是我的代码:
// 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);
}
现在,据我了解,如果我将内容处置作为附件,它应该会提示保存文件。
另外,我在我的.htaccess文件中添加了"AddType msword .doc"。它仍然给出相同的结果.
服务器上是否需要进行任何其他设置?
基于此: 如何防止在Internet Explorer中缓存 我建议您添加以下内容
header("Expires: Mon, 26 Jul 1997 05:00:00 GMTn");
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");
除此之外..你的代码从这里工作正常:
尝试添加:
header('Expires: 0');
header('Content-Length: ' . filesize($file));
header('Content-Type: application/octet-stream');
编辑
但是,它按照您的代码的预期在我的两个不同的测试服务器上工作,所以我认为这是一个服务器配置问题,而不是 PHP 代码级问题。