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

Я использую PHP Word и htmltodocx_converter для создания текстового документа, все работает хорошо, но мне просто нужен пример того, как я могу отправить файл в браузер для загрузки, не сохраняя его на диске. Во всех примерах я вижу, как вы сохраняете файл на свой диск:

// Save File
$h2d_file_uri = tempnam( "", "htd" );
$objWriter = PHPWord_IOFactory::createWriter( $phpword_object, "Word2007" );
$objWriter->save( $filename ); // At this line, I would like to output the file to the browser

Кто-нибудь знает, как я могу вывести файл в браузер на лету?


person Morgs    schedule 23.11.2015    source источник
comment
возможно, вы можете передать php://output как $filename, если не просто создать нормальный файл, создать правильные заголовки, прочитать его для вывода с помощью readfile, а затем удалить с помощью unlink   -  person Steve    schedule 23.11.2015


Ответы (1)


Этот пример ниже может работать, но для получения ожидаемого поведения загрузки во всех браузерах заголовок Content-Type должен быть правильным для Word2007. Возможно, вам понадобятся дополнительные заголовки для правильного вывода.

Вы можете попробовать это:

$filename = "YOUR_Filename.docx";
header( "Content-Type: application/vnd.openxmlformats-officedocument.wordprocessing‌​ml.document" );// you should look for the real header that you need if it's not Word 2007!!!
header( 'Content-Disposition: attachment; filename='.$filename );

$h2d_file_uri = tempnam( "", "htd" );
$objWriter = PHPWord_IOFactory::createWriter( $phpword_object, "Word2007" );
$objWriter->save( "php://output" );// this would output it like echo, but in combination with header: it will be sent

Спасибо @jamsandwich: правильный заголовок для Word 2007 должен быть application/vnd.openxmlformats-officedocument.wordprocessing‌​ml.document.

Справочник Microsoft

person swidmann    schedule 23.11.2015
comment
Тип содержимого для Word 2007 - application/vnd.openxmlformats-officedocument.wordprocessingml.document (ссылка) - person jamsandwich; 23.08.2017
comment
Обратите внимание, что расширение файла также должно быть .docx для документа Word 2007+, а не .doc. - person jamsandwich; 24.08.2017