Заголовки для MSOffice 2007/97 Скачать с PHP - PullRequest
0 голосов
/ 24 июня 2010

Мы пытаемся отправить клиенту загруженные вложения (обслуживаемые из базы данных в виде BLOB-объектов) через php с Zend Framework.

Этот код отлично работает для 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 ]

2 голосов
/ 24 июня 2010

Вы должны отправить правильный Content-Type для данного формата файла. Это должно быть application/msword / application/vnd.ms-excel, если вы отправляете старые .doc - или .xls -файлы и application/vnd.openxmlformats-officedocument.wordprocessingml.document или application/vnd.openxmlformats-officedocument.spreadsheetml.sheet для новых файлов x -типа .docx и .xlsx соответственно (не знаю, какую версию вы обслуживаете).

Более того, насколько мне известно, более новые программы Office проверяют, соответствует ли расширение файла содержимому файла, поэтому вы будете получать ошибки или предупреждения при открытии файлов .doc с расширением .docx.

A ...->setHeader('Content-Type', '<<the appropriate content-type>>', true) должно быть достаточно.

0 голосов
/ 24 июня 2010

Различные типы MIME: http://filext.com/faq/office_mime_types.php, по крайней мере, это решило проблему для меня, когда у меня был похожий

...