質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.50%
Word

Microsoft WordはMicrosoftが開発した業務用の文書生成用のソフトウェアです。

Apache

Apacheは、Apache HTTP Serverの略で、最も人気の高いWebサーバソフトウェアの一つです。安定性が高いオープンソースソフトウェアとして商用サイトから自宅サーバまで、多くのプラットフォーム向けに開発・配布されています。サーバーソフトウェアの不具合(NCSA httpd)を修正するパッチ(a patch)を集積、一つ独立したソフトウェアとして開発されました。

PHP

PHPは、Webサイト構築に特化して開発されたプログラミング言語です。大きな特徴のひとつは、HTMLに直接プログラムを埋め込むことができるという点です。PHPを用いることで、HTMLを動的コンテンツとして出力できます。HTMLがそのままブラウザに表示されるのに対し、PHPプログラムはサーバ側で実行された結果がブラウザに表示されるため、PHPスクリプトは「サーバサイドスクリプト」と呼ばれています。

Q&A

解決済

1回答

6092閲覧

PHPWORDでWORD出力する際にエラーが出る

xxhiroxx_chan

総合スコア41

Word

Microsoft WordはMicrosoftが開発した業務用の文書生成用のソフトウェアです。

Apache

Apacheは、Apache HTTP Serverの略で、最も人気の高いWebサーバソフトウェアの一つです。安定性が高いオープンソースソフトウェアとして商用サイトから自宅サーバまで、多くのプラットフォーム向けに開発・配布されています。サーバーソフトウェアの不具合(NCSA httpd)を修正するパッチ(a patch)を集積、一つ独立したソフトウェアとして開発されました。

PHP

PHPは、Webサイト構築に特化して開発されたプログラミング言語です。大きな特徴のひとつは、HTMLに直接プログラムを埋め込むことができるという点です。PHPを用いることで、HTMLを動的コンテンツとして出力できます。HTMLがそのままブラウザに表示されるのに対し、PHPプログラムはサーバ側で実行された結果がブラウザに表示されるため、PHPスクリプトは「サーバサイドスクリプト」と呼ばれています。

0グッド

0クリップ

投稿2015/09/03 03:05

xxhiroxx_chanと申します。

新しくWEBサーバを購入し、旧WEBサーバの環境を移行したところ、
PHPによるWORD出力の動きがおかしくなり、お知恵を頂きたく投稿しました。
旧サーバでPHPWORDは以下のものを使用しており、
新サーバでも同様のものを組み込みました。
http://phpword.codeplex.com/

なお、サーバの環境は以下です。
【旧サーバ】
Windows Server 2003
Apache/2.2.26 (Win32)
PHP/5.3.5

【新サーバ】
Windows Server 2012 R2
Apache/2.4.12 (Win64)
PHP/5.6.7

旧サーバで運用しているときには、
$objWriter = PHPWord_IOFactory::createWriter($PHPWord, 'Word2007');
$objWriter->save('php://output');
でWORDファイルがすんなり出力されていたのですが、新サーバでは
「ファイル・・・は内容に問題があるため、開けませんでした。」
のメッセージが出て、詳細を確認すると「ファイルは破損しており、開けません」と出ます。
このままOKしファイルの修復を行うと、通常にファイルが開きます。

http://forum.kohanaframework.org/discussion/7780/problem-with-phpexcel/p1
を参考にして、MIME Typeを変更したが、それでもだめでした。

また、phpofficeでも試してみましたが、同じでした。
http://phpoffice.github.io/

なお、以下は、PHPWORDのサンプルファイルですが、これでも
・旧サーバ→OK
・新サーバ→エラー出力
となるので、コードの中身の問題ではなく、環境の問題かな?と考えています。

何か解決案を教授頂ければ幸いです。
よろしくお願いいたします。

<?PHP require_once '../PHPWORD/PHPWord.php'; // Create a new PHPWord Object $PHPWord = new PHPWord(); // Every element you want to append to the word document is placed in a section. So you need a section: $section = $PHPWord->createSection(); // After creating a section, you can append elements: $section->addText('Hello world!'); // You can directly style your text by giving the addText function an array: $section->addText('Hello world! I am formatted.', array('name'=>'Tahoma', 'size'=>16, 'bold'=>true)); // If you often need the same style again you can create a user defined style to the word document // and give the addText function the name of the style>: $PHPWord->addFontStyle('myOwnStyle', array('name'=>'Verdana', 'size'=>14, 'color'=>'1B2232')); $section->addText('Hello world! I am formatted by a user defined style', 'myOwnStyle'); // You can also putthe appended element to local object an call functions like this: $myTextElement = $section->addText('Hello World!'); header('Content-Type: application/vnd.ms-word'); header('Content-Disposition: attachment;filename="test.docx"'); header('Cache-Control: max-age=0'); // At least write the document to webspace: $objWriter = PHPWord_IOFactory::createWriter($PHPWord, 'Word2007'); $objWriter->save('php://output'); exit(); ?>

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答1

0

ベストアンサー

出力したwordファイルをテキストエディタで開いてください。
すると、末尾の方か先頭にPHPのエラーが埋め込まれていると思います。
そのエラーを元に修正してください。

投稿2015/09/03 03:08

退会済みユーザー

退会済みユーザー

総合スコア0

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

xxhiroxx_chan

2015/09/03 04:22

早速ありがとうございました。 docxファイルをサクラエディタであげましたが、PHPのエラーは確認できませんでした。 また、ファイルを保存する際にtxtで保存する、ということもやってみましたが、出力された文字列がそのまま保存され、エラーは見当たりませんでした。 たしかに、WORD出力処理のPHPファイルでエラーが発生すれば、そのエラーがWORD文書の本文に出力され、内容を確認したことはあります。 私の確認方法は合ってますでしょうか?
退会済みユーザー

退会済みユーザー

2015/09/03 07:00

その方法であってますよ。ただ自動修復したものをエディタで開いても意味ないですからね。
xxhiroxx_chan

2015/09/04 07:47

ありがとうございました。 ご指摘通りのことをしていました。。。。 そのまま保存したものをテキストエディタで開いてエラーを確認し、 PHPWORDモジュール中のPHPを1行書き換えることで解決しました。 PHPのバージョンが変わったことにより発生したエラーでした。 本当にありがとうございました。 今後もよろしくお願いいたします。
退会済みユーザー

退会済みユーザー

2015/09/04 07:53

> PHPWORDモジュール中のPHPを1行書き換えることで解決しました。 具体的にどのファイルのどの部分をどのように修正したのかを書いておくと、このスレッドを検索してきた人にも役立つ情報になりますね。
xxhiroxx_chan

2016/10/24 02:18

解決法を書くのをすっかり忘れておりました。 参考までに書いておきます。 移行前からPHPのバージョンあげたことによるよるものでした。 <b>Warning</b>: htmlspecialchars(): charset `Shift-JIS' not supported, assuming utf-8 in <b>C:\Apache24\htdocs\GYOSEKI\WK\PHPWORD\PHPWord\Writer\Word2007\Base.php</b> on line <b>53</b><br /> のエラーが出ましたので、下記を参考にBase.php内のhtmlspecialchars関数の記述を変更しました。 (※新しいPHPWORDでは対応されているかもしれません) http://php-archive.net/php/htmlspecialchars/ 【変更後】htmlspecialchars($text, ENT_QUOTES, 'SJIS') ※第3引数を省略すると、PHP 5.4.0 より前のバージョンでは ISO-8859-1 、PHP 5.4.0 以降では UTF-8 が指定されます。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.50%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問