PHPDOCXを使用して「ダウンロード」コントローラーで生成されたWordドキュメントをダウンロードするダウンロードアクションを作成しようとしています。これまでのところ、PHPDOCXは目的の.docxファイルを正しいフォルダーに保存できますが、ダウンロードしようとすると問題が発生します。メディアビューは非推奨になったため、CakePHP2.xクックブックで提案されているCakeResponseファイルメソッドを使用する必要があります。
// In the controller:
$this->response->file($file['path'], array('download' => true, 'name' => $filename));
return $this->response;
このメソッドを使用してRTFを問題なくエクスポートできました(RTFはPHPRTFLiteを使用して生成されました)が、PHPDOCXを使用して.docxファイルのメソッドを使用すると、Firefoxで次のエラーが発生します。
ファイルの最初の1024バイトをプレスキャンしたときに、HTMLドキュメントの文字エンコード宣言が見つかりませんでした。別の設定のブラウザで表示すると、このページは自動的に再読み込みされます。エンコーディング宣言は、ファイルの最初の1024バイト以内に移動する必要があります。
HTMLを受け入れるドキュメントジェネレータを使用したいので、PHPDOCXを選択しました。上記のエラーを考慮して、次の方法を使用してヘッダーとコンテンツタイプを定義することにしました。
$this->response->header(array('Content-type'=>'application/vnd.openxmlformats-officedocument.wordprocessingml.document'));
しかし、CakePHPでも同じエラーが発生します。
要求されたファイルAPP/files / info_sheets / filename.docxが見つからないか、読み取れません
私が考えていたのは、PHPDOCXがドキュメントを生成するときに多くのエラーを送信し、これがMimeタイプまたはエンコーディングに干渉しているということです。しかし、2.xクックブックによると:
が呼び出されても、ヘッダーは送信されません
CakeResponse::header()
。これらは、応答が実際に送信されるまでバッファリングされます。
もう1つのアイデアは、content-typeの直後のヘッダーで文字エンコードを設定する必要があるということです。
$this->response->header(array('Content-type'=>'application/vnd.openxmlformats-officedocument.wordprocessingml.document;charset=utf-8'));
ただし、これによりテキストが文字化けします。
誰かがこれを解決する方法について何かアイデアがありますか?「download.ctp」ビューファイルは現在空白です。この問題に関する追加情報が必要な場合はお知らせください。
ありがとう!
クリス