PhpSpreadsheet MimeType生成vnd.ms-office,而不是vnd.ms-excel

时间:2018-10-17 16:58:11

标签: php excel mime-types phpspreadsheet

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

然后我意识到生成的文件的模仿类型是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生成电子表格?

1 个答案:

答案 0 :(得分:0)

不信任mime_content_type()给出任何有意义的答案...。它使用magic.mime来标识文件类型,并且这种方法过于简单(通常仅基于几个字节)并不会深入研究文件本身的结构。 当将文件发送到浏览器时,Content Type标头告诉浏览器如何处理文件,要发送给Excel的正确的MIME类型是用于{x1文件的application/vnd.ms-excel,用于{ls}的application/vnd.openxmlformats-officedocument.spreadsheetml.sheet xlsx文件。