用于下载Microsoft Word和Excel文件的http标头

时间:2012-07-14 21:01:02

标签: php html

如果我默认在文件名中命名,我可以成功下载我的微软词。但是,如果我使用$变量来命名它。文件扩展名将是未知的。

样品:

$No = 1; 
$Name = 'John'; 
$Test = 'Science';

//Download header
$document->save($doc);
header('Content-Description: File Transfer');
header('Content-Type: application/msword');
header("Content-Disposition: attachment; filename='$No_$Name_$Test.docx");
header('Content-Transfer-Encoding: binary');
header('Expires: 0');
header('Cache-Control: must-revalidate');
header('Pragma: public');
header('Content-Length: ' . filesize($doc));
ob_clean();
flush();
readfile($doc);

所以如果我将我的文件名重命名为变量。文件下载没有docx扩展名。有人可以提供建议吗?

由于

3 个答案:

答案 0 :(得分:17)

正确的标题是

for Excel(* .xlsx):

header('Content-Type: application/vnd.openxmlformats-officedocument.spreadsheetml.sheet');
header('Content-Disposition: attachment;filename="' . $fileName . '"');

for Word(* .docx):

header('Content-Type: application/vnd.openxmlformats-officedocument.wordprocessingml.document');
header('Content-Disposition: attachment;filename="' . $fileName . '"');

答案 1 :(得分:3)

更改此

header('Content-Type: application/msword');

header('Content-Type: application/octet-stream');

编辑:

并改变

header("Content-Disposition: attachment; filename='$No_$Name_$Test.docx");

header("Content-Disposition: attachment; filename=\"{$No}_{$Name}_{$Test}.docx\"");

答案 2 :(得分:2)

正确使用该标题是:

Content-Disposition: attachment; filename="fname.ext"请注意,如果名称包含空格,则必须引用

请参阅RFC6266 第5部分。示例