【发布时间】:2012-12-05 23:12:57
【问题描述】:
我正在开发一个允许教师上传文档和学生下载文档的网站。但是,有一个问题。 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;
【问题讨论】:
-
输出任何空格,例如在打开标签之前?是否有任何警告/通知,这些会使文件损坏。从 FTP 源下载文件并打开它以验证原始文件没有损坏。
-
下载的文件是什么样的?是空的吗?它被切断了吗?在后一种情况下,您可以尝试发送
Content-Length标头。另一个问题可能是下载时间过长并且 PHP 会引发超时。使用set_timeout()提高超时时间。 -
switch块之后会发生什么?通常你在打电话给readfile之后exit;。 -
空白不会影响服务器上的文件.... 它是空白或 BOM 或脚本中的回显消息/警告/错误与文件一起发送到 php://output本身就是最可能的原因
-
现在真的很混乱! Notepad++ 说两个文件都匹配!
标签: php header download readfile