php - 为什么 Chrome 会在我的 xlsx 文件末尾添加两个选项卡,这样做会损坏文件?

标签 php excel google-chrome yii2

我正在使用 yii2 开发应用程序,我正在使用 PhpSpreadsheet 生成 (Excel) .xlsx文件。当我下载生成的 .xlsx使用 Chrome 的文件,我无法使用 Excel (2019) 打开它,因为 Excel 提示文件已损坏,提供修复但失败。

首先我怀疑生成器或下载过程有问题,但我已经用 Firefox、Edge 和 Filezilla 测试了下载 - 一切都按预期工作。

十六进制下载文件的比较只显示了一个细微差别:在使用其他浏览器下载的 .xlsx 文件的末尾,我看到

786d 6c2e 7265 6c73 504b 0506 0000 0000
0b00 0b00 d102 0000 671d 0000 0000 

但 Chrome 下载显示
786d 6c2e 7265 6c73 504b 0506 0000 0000
0b00 0b00 d102 0000 671d 0000 0000 0909

我不知道这些额外的 09 是从哪里来的。这是两个选项卡 (09) chrome 正在添加并因此损坏文件。 OpenOffice 的 Calc 能够读取它,但 Excel 无法打开它。

所以,我的问题是:为什么 Chrome 似乎在我的文件末尾添加了两个标签?我能做些什么来防止这种情况发生?

更新:
我已将问题缩小到“使用 Chrome 登录”(登录到 yii 应用程序,而不是 Chrome!)。含义:我可以用Firefox和Edge下载并打开文件,登录或未登录当我是 时,它可以与 Chrome 一起使用不是 登录。我会责怪登录,但是当我使用 Firefox 或 Edge 下载它时,这也会损坏文件/添加 2 个额外的 09 ......

更新 2:
我已安装基于 Chromium 引擎的新 Edge 版本 78.0.276.17(官方构建)测试版(64 位):同样的问题! 登录:文件损坏。未登录:文件有效!

更新 3:
我测试了一个通过 FTP 上传的随机 file.txt,当我通过 yii 的 sendFile-Method 下载它时,文件末尾添加了 2 个选项卡:
public function actionTest(){
   Yii::$app->response->sendFile('test.txt')->send();
   return true;
}

如果我通过直接链接来下载文件,那就很好了。再次,它似乎是 Chromium、正在登录和 sendFile 方法的组合。

最佳答案

解决方法是:

我的 i8n 翻译文件 .../frontend/languages/de-DE/app.php <?php 前面有两个制表符,正如@MichalHynčica 所建议的那样!删除这两个选项卡会导致下载的文件非常好。

编辑:除此之外,Chromium 引擎似乎忽略了 HTTP header 中定义的内容长度和下载文件的实际内容长度。

谢谢,晚安。

关于php - 为什么 Chrome 会在我的 xlsx 文件末尾添加两个选项卡,这样做会损坏文件?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58382553/

相关文章:

php - 获取结果时排序不适用于 LIMIT

C# 使用 Interop 写入打开的 Excel 文件

python - 如何正确读取 pandas 中的 excel 合并标题单元格

javascript - 简单的 html textarea/contenteditable 文本编辑器组件支持谷歌浏览器的链接、撤消、tab-in/outdent

php - 创建电话号码格式标准 php

php - 如何结合foreach上传文件

php - 使用符合要求的php显示数据库中的数据

Excel宏插入函数

html - 用 <td>/<tr> 填充

javascript - 为什么设置 document.cookie 在 Chrome 中不起作用?