MS Office 2007/97的标题使用PHP下载

时间:2010-06-24 07:08:16

标签: php zend-framework http-headers

我们正试图通过带有Zend Framework的php将上传的附件(从数据库作为blob提供)发送给客户端。

此代码适用于Excel97 / Word97。

  if ($this->getResponse()->canSendHeaders(false)) {
            $response = $this->getResponse();

            $response->setHeader('Pragma', 'public', true)
                     ->setHeader('Expires', '0', true)
                     ->setHeader('Cache-Control', 'must-revalidate, post-check=0, pre-check=0', true)
                     ->setHeader('Content-Type', 'application/force-download', true)
                     ->setHeader('Content-Type', 'application/octet-stream', true)
                     ->setHeader('Content-Type', 'application/download', true)
                     ->setHeader('Content-Disposition', "attachment;filename=$filename", true)
                     ->setHeader('Content-Transfer-Encoding', 'binary', true)
                     ->setBody($data) // binary
                     ->sendHeaders();
        } 

但是不适用于excel2007 / word2007。它报告“文件有错误”并尝试修复它。

有什么建议吗?

2 个答案:

答案 0 :(得分:2)

您应该为给定的文件格式发送正确的Content-Type。如果您要发送旧的application/msword - 或application/vnd.ms-excel - 文件以及.doc.xls更新的{{}},那么应为application/vnd.openxmlformats-officedocument.wordprocessingml.document / application/vnd.openxmlformats-officedocument.spreadsheetml.sheet { {1}} - 分别输入文件x.docx(不知道您要提供的是哪个版本)。

此外,据我所知,较新的Office程序会检查文件扩展名是否与文件内容匹配,因此在打开.xlsx时会出现错误或警告 - .doc的文件-extension。

.docx就足够了。

答案 1 :(得分:0)

不同的MIME类型:http://filext.com/faq/office_mime_types.php,至少在我有类似问题时解决了我的问题