Класс PHPWord в CodeIgniter не генерирует корректно, выбрасывая ошибки в файл слова - PullRequest
1 голос
/ 31 августа 2011

Хорошо, у меня возникли проблемы с классом PHPWord, который можно найти: http://phpword.codeplex.com

Странная вещь в том, что когда я использую этот же код в файле «примера», он прекрасно работает при генерации. Когда я не заставляю загрузку с помощью заголовков, файл откроется просто отлично. Использование этого кода вместе с заголовками приводит к тому, что при загрузке он выдает ошибки в словесном файле, говоря, что файл поврежден и его нельзя открыть, но затем он открывается просто отлично.

public function export()
    {
            // Load PHPWORD Library
            $this->load->library('PHPWord');
            $sec = $this->phpword->createSection($secStyle);

            $header = $sec->createHeader();
            $header->addWatermark('images/CC_watermark.png', array('marginTop'=>1015, 'marginLeft'=>-80));

            $resultSelected = $this->input->post('cbox');
            foreach($resultSelected as $row)
            {
               $sec->addText($row);
               echo $row."<br>";
            }

            $fileName = "Plan_Generate_".date('Ymd').".docx";

            // Force Download
            $filePath = $fileName;

               $fileName = basename($filePath);
               // $fileSize = filesize($filePath);

               // Output headers.
               header("Cache-Control: private");
               header("Content-Type: application/stream");
               // header("Content-Length: ".$fileSize);
               header("Content-Disposition: attachment; filename=".$fileName);

               // Output file.
               // readfile ($filePath);
               // exit();


            // Save File
            // $fileName = "files/SomethingNew_".date("Ymd").".docx";
            $objWriter = PHPWord_IOFactory::createWriter($this->phpword, 'Word2007');
            $objWriter->save('php://output');
    }

Это код, который я использую при попытке создать файл. Проблема в том, что она выдает ошибку при попытке принудительной загрузки. Спасибо за любую помощь! Задавайте вопросы, если вы не до конца понимаете вопрос.

Обновление:

Вот изображение ошибки, которую я получаю. Спасибо за быстрые ответы, и я на самом деле собираюсь попробовать Codeigniters, Томм. утро.

Word Errors

Ответы [ 3 ]

2 голосов
/ 31 августа 2011

Вы должны устанавливать заголовки с помощью функций CodeIgniters, вот что может вызвать проблему для вас:

Класс выхода CI

$ this-> output-> set_header ();

Позволяет вам вручную устанавливать заголовки сервера, которые класс вывода будет отправлять вам при выводе окончательного визуализированного отображения. Пример:

$this->output->set_header("HTTP/1.0 200 OK");
$this->output->set_header("HTTP/1.1 200 OK");
$this->output->set_header('Last-Modified: '.gmdate('D, d M Y H:i:s', $last_update).' GMT');
$this->output->set_header("Cache-Control: no-store, no-cache, must-revalidate");
$this->output->set_header("Cache-Control: post-check=0, pre-check=0");
$this->output->set_header("Pragma: no-cache"); 

Я предполагаю, что вы пытаетесь обновить заголовки PHP, но вы играете по правилам CI для вывода.

1 голос
/ 12 октября 2012

Это было исправлено с помощью CI $this->download->force_download().

И, передавая данные через ob_start(), ob_get_contents() и ob_end_clean() для людей, нуждающихся в помощи.

0 голосов
/ 31 августа 2011

Вы уверены, что не хотите

 header("Content-Type: application/octet-stream");

вместо просто потока? Что является настоящей ошибкой, и это слово, браузер или php выдает ошибку?

Кроме того, у CodeIgniter есть помощник для загрузки файлов ... Вы можете попробовать это. http://codeigniter.com/user_guide/helpers/download_helper.html

...