admin管理员组

文章数量:1608851

症状

我自己的PHP,把word文档存入数据库后,再从数据库下载成docx文件;当打开该文件时(Word2007),出现错误提示:“无法打开Office OpenXML 文件 文件名, 因为内容有错误。”其详细信息:“文件已损坏,无法打开。”在点击<确定>后,又提示:“word在《文件名》中发现无法读取的内容,是否恢复此文档的内容?”点击<是>就可以修复并打开。虽然不影响使用,但感觉不完美,想要修正一下。
下载文档源码如下:

header('Content-Type:text/html;charset=utf-8');
header('Content-disposition:attachment;filename=' . $filename); 
$filesize = filesize($tmp_file);
readfile($tmp_file);
header('Content-length:' . $filesize);	

他山之石

https://blog.csdn/wowoj2ee/article/details/4344764摘要:
解决办法:在word入库之前,首先另存为"Word2003或97",然后把另存为后的文档入库;再从数据库读出字节流写文件时,也创建成"Word2003或97",再打开时就没有错误提示啦!

结果

对我的没起作用,不是这个原因。

分析

重新调试网页,发现有多处存在echo var_dump等显示命令,突然想到采用Header下载的时候,需要将网页内容生成文件内容,如果多了一些显示内容,对最后的文件内容就有影响。于是将这些显示命令全部屏蔽或删除,再次下载,打开一切正常。

结论

每个网页最终发布的时候,一定注意将echo print_r var_dump等显示命令屏蔽,否则将会出现不可预估的错误。

本文标签: 无法打开文档文件docxPHP