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