首页 > 解决方案 > PhpSpreadsheet MimeType 生成 vnd.ms-office 而不是 vnd.ms-excel

问题描述

我正在使用 PhpSpreadsheet 生成 Excel ( .xls ) 文件。

然后我意识到生成文件的 mimetype 是 application/vnd.ms-office。

用两种方法测试:

使用它直接下载到服务器目录:

<?php
$spreadsheet = new Spreadsheet();
$sheet = $spreadsheet->getActiveSheet();
$sheet->setCellValue('A1', 'Hello World !');

$writer = new Xls($spreadsheet);

$filename = 'name-of-the-generated-file.xls';
$writer->save(FCPATH . 'extracted/' . $filename);

并使用它通过浏览器下载

<?php
$spreadsheet = new Spreadsheet();
$sheet = $spreadsheet->getActiveSheet();
$sheet->setCellValue('A1', 'Hello World !');

$writer = new Xls($spreadsheet);

header('Content-Type: application/vnd.ms-excel');
header('Content-Disposition: attachment;filename="name-of-the-generated-file.xls"'); 
header('Cache-Control: max-age=0');

$writer->save('php://output');

我检查生成的文件

echo mime_content_type('name-of-the-generated-file.xls');

两个代码都生成 application/vnd.ms-office mime。

如何使用 application/vnd.ms-excel 而不是 application/vnd.ms-office 生成电子表格?

标签: phpexcelmime-typesphpspreadsheet

解决方案


不要相信mime_content_type()给出任何有意义的答案....它用于magic.mime识别文件类型,并且具有过于简单的方法(通常仅基于几个字节),不会深入研究文件本身的结构. 将文件发送到浏览器时,内容类型标头告诉浏览器如何处理文件,而要为 Excel 发送的正确 mime 类型是application/vnd.ms-excel用于 xls 文件和application/vnd.openxmlformats-officedocument.spreadsheetml.sheetxlsx 文件。


推荐阅读