php - 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 生成电子表格?
解决方案
不要相信mime_content_type()
给出任何有意义的答案....它用于magic.mime
识别文件类型,并且具有过于简单的方法(通常仅基于几个字节),不会深入研究文件本身的结构. 将文件发送到浏览器时,内容类型标头告诉浏览器如何处理文件,而要为 Excel 发送的正确 mime 类型是application/vnd.ms-excel
用于 xls 文件和application/vnd.openxmlformats-officedocument.spreadsheetml.sheet
xlsx 文件。
推荐阅读
- php - 如何调用这种 php 对象
- c++ - 具有快速查找功能的 C++ 列表
- javascript - 将 PHP 变量传递给 javascript 时出现空警报(回声有效)
- c# - 如何在 c# 控制台中像 webbrowser 一样加载网站?
- sql - 如何在 SQL 中访问 JSON 对象的字段?
- python - python中的多处理库无法导入自定义模块,并且在同一python文件中定义函数时也不起作用
- nginx - 如何在 nginx 入口添加自定义安全策略和引用策略
- python - 如何在 Django 视图中进行 url 编码
- python - 从 tf.keras.applications 将正则化器添加到模型时无法保存模型
- php - 错误:调用未定义的函数 Tests\factory()