Поврежденный .docx скачать с помощью phpdocx

У меня есть проект, в котором мы используем phpdocx pro для создания файла .docx в шаблонах. Я могу легко получить данные в шаблоне, однако, когда файл загружается и открывается в MS Word 2010, программа сообщает, что файл не может быть открыт, потому что есть проблемы с содержимым, детали «Файл поврежден» и не может быть открыт ». Word может восстановить документ, однако проблема по-прежнему заключается в том, что он не должен быть поврежден в первую очередь.

Вот как я создаю документ:

function generateUnitDesign(){ if($this->populateRecords()){ require_once dirname(__FILE__).'/phpdocx/classes/CreateDocx.inc'; $filename = 'UnitDesignTemplate-'.str_replace(' ', '', $this->rec->title); //Create Document $document = new CreateDocx(); $document->addTemplate(dirname(__FILE__).'/templates/unitdesigntemplate.docx'); // Fill in text fields $document->addTemplateVariable('TITLE', $this->rec->title); $document->addTemplateVariable('CHALLENGE', $this->rec->challenge, 'html'); $document->addTemplateVariable('HOOK', $this->rec->hook, 'html'); $document->addTemplateVariable('RESEARCH', $this->rec->research, 'html'); $document->addTemplateVariable('AUDIENCE', $this->rec->audience, 'html'); $document->addTemplateVariable('SUMMARY', $this->rec->project_brief, 'html'); $document->addTemplateVariable('RESOURCES', $this->rec->resources, 'html'); $document->addTemplateVariable('REQUIREMENTS', $this->rec->requirements, 'html'); $document->addTemplateVariable('SCAFFOLDING', $this->rec->scaffolding, 'html'); $document->createDocx($filename); unset($document); header("Content-Type: application/vnd.ms-word"); header("Content-Length: ".filesize($filename.'.docx')); header('Content-Disposition: attachment; filename='.$filename.'.docx'); header('Content-Transfer-Encoding: binary'); ob_clean(); flush(); readfile($filename.'.docx'); unlink($filename.'.docx'); } } 

Первоначально я пытался использовать свою createDocxAndDownload() чтобы получить файл, но он оставил бы копию файла .docx на сервере, что было не идеальным. Я что-то упускаю? Есть ли у кого-то больше опыта работы с phpdocx, чтобы протянуть руку?

Edit: Ну, я чувствую себя идиотом. После сужения проблемы до части кода, который выводит файл, я, наконец, открыл файл в редакторе HEX и обнаружил, что проблема заключается в том, что после успешного выхода файла веб-интерфейс добавит начало его HTML в конец файл docx, создающий «поврежденный» файл. Эта одна строка сразу после unlink() фиксировала все это:

 exit; 

Пекка: Если вы хотите ответить на эту новость новой информацией, я приму ваш ответ.

    После сужения вопроса до части кода, который выводит файл, я, наконец, открыл файл в редакторе HEX и обнаружил, что проблема заключается в том, что после того, как файл был успешно выполнен, веб-интерфейс дополнил начало его HTML до конца файла docx, создающего «поврежденный» файл. Эта одна строка сразу после unlink() фиксировала все это:

     exit; 

    Это трудно точно определить без прямого доступа к файлу шаблона, но здесь есть некоторые указатели, в которых часто происходят сбои шаблонов:

    • Попробуйте записать все ваши переменные PHP в консоль: print print_r($this->rec->variable_name, true); а затем проверьте, чтобы все ваши переменные были строками, и что ни один из них не равен NULL.
    • Осмотрите свой файл шаблона и убедитесь, что стиль (то есть шрифт, размер шрифта и т. Д.) Согласован в каждой переменной шаблона. Другими словами, убедитесь, что нет переменных, где половина переменной является другим стилем для остальной части переменной. Эта конкретная тонкость очень легко вводить в файл шаблона, и, как правило, самый простой способ исправить это – просто удалить и переписать каждую переменную шаблона.

    Наконец, попробуйте удалить параметр «html» при вызове метода addTemplateVariable и посмотреть, не addTemplateVariable ли это. Если вы на самом деле не используете HTML, тогда нет смысла передавать параметр «html». И наоборот, если вы используете HTML, то поврежденный файл может быть примером неправильно структурированного HTML, в результате Microsoft Word может пометить документ как поврежденный.