gpt4 book ai didi

PHP 强制下载 .xlsx 文件损坏

转载 作者:可可西里 更新时间:2023-10-31 23:07:21 27 4
gpt4 key购买 nike

我正在开发一个允许教师上传文档并让学生下载的网站。但是,有一个问题。 Microsoft Word (.docx) 文件下载完美,但在下载 excel (xlsx) 文件时,excel 会出现“此文件已损坏,无法打开”对话框。对此的任何帮助将不胜感激!

我的下载代码如下:

case 'xlsx':

header('Content-type: application/vnd.openxmlformats-officedocument.spreadsheetml.sheet');
header('Content-Disposition: attachment; filename="' . $filename . '"');
header('Content-Transfer-Encoding: binary');
header('Expires: 0');
header('Pragma: no-cache');
readfile('./uploads/resources/courses/' . $filename);

break;

最佳答案

我有这个问题,是 BOM .

如何注意到它

unzip:用unzip检查输出文件,我在第二行看到警告。

$ unzip -l file.xlsx 
Archive: file.xlsx
warning file: 3 extra bytes at beginning or within zipfile
...

xxd(十六进制查看器):我使用以下命令看到了前 5 个字节

head -c5 file.xlsx | xxd -g 1
0000000: ef bb bf 50 4b PK...

注意前 3 个字节 ef bb bf 那是 BOM!

为什么?

可能是一个带有 BOM 的 php 文件或一个库的先前输出。

你必须找到带有 BOM 的文件或命令在哪里,就我而言,现在,我没有时间找到它,但我用输出缓冲区解决了这个问题。

<?php
ob_start();

// ... code, includes, etc

ob_get_clean();
// headers ...
readfile($file);

关于PHP 强制下载 .xlsx 文件损坏,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13938190/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com