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

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

ただいまの
回答率

90.33%

  • PHP

    21348questions

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

  • Apache

    1916questions

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

  • Word

    85questions

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

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

解決済

回答 1

投稿

  • 評価
  • クリップ 0
  • VIEW 1,765

xxhiroxx_chan

score 26

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();

?>





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

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

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

    クリップを取り消します

  • 良い質問の評価を上げる

    以下のような質問は評価を上げましょう

    • 質問内容が明確
    • 自分も答えを知りたい
    • 質問者以外のユーザにも役立つ

    評価が高い質問は、TOPページの「注目」タブのフィードに表示されやすくなります。

    質問の評価を上げたことを取り消します

  • 評価を下げられる数の上限に達しました

    評価を下げることができません

    • 1日5回まで評価を下げられます
    • 1日に1ユーザに対して2回まで評価を下げられます

    質問の評価を下げる

    teratailでは下記のような質問を「具体的に困っていることがない質問」、「サイトポリシーに違反する質問」と定義し、推奨していません。

    • プログラミングに関係のない質問
    • やってほしいことだけを記載した丸投げの質問
    • 問題・課題が含まれていない質問
    • 意図的に内容が抹消された質問
    • 広告と受け取られるような投稿

    評価が下がると、TOPページの「アクティブ」「注目」タブのフィードに表示されにくくなります。

    質問の評価を下げたことを取り消します

    この機能は開放されていません

    評価を下げる条件を満たしてません

    評価を下げる理由を選択してください

    詳細な説明はこちら

    上記に当てはまらず、質問内容が明確になっていない質問には「情報の追加・修正依頼」機能からコメントをしてください。

    質問の評価を下げる機能の利用条件

    この機能を利用するためには、以下の事項を行う必要があります。

回答 1

checkベストアンサー

0

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

投稿

  • 回答の評価を上げる

    以下のような回答は評価を上げましょう

    • 正しい回答
    • わかりやすい回答
    • ためになる回答

    評価が高い回答ほどページの上位に表示されます。

  • 回答の評価を下げる

    下記のような回答は推奨されていません。

    • 間違っている回答
    • 質問の回答になっていない投稿
    • スパムや攻撃的な表現を用いた投稿

    評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。

  • 2015/09/03 13:22

    早速ありがとうございました。

    docxファイルをサクラエディタであげましたが、PHPのエラーは確認できませんでした。
    また、ファイルを保存する際にtxtで保存する、ということもやってみましたが、出力された文字列がそのまま保存され、エラーは見当たりませんでした。

    たしかに、WORD出力処理のPHPファイルでエラーが発生すれば、そのエラーがWORD文書の本文に出力され、内容を確認したことはあります。

    私の確認方法は合ってますでしょうか?

    キャンセル

  • 2015/09/03 16:00

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

    キャンセル

  • 2015/09/04 16:47

    ありがとうございました。
    ご指摘通りのことをしていました。。。。

    そのまま保存したものをテキストエディタで開いてエラーを確認し、
    PHPWORDモジュール中のPHPを1行書き換えることで解決しました。
    PHPのバージョンが変わったことにより発生したエラーでした。

    本当にありがとうございました。
    今後もよろしくお願いいたします。

    キャンセル

  • 2015/09/04 16:53

    > PHPWORDモジュール中のPHPを1行書き換えることで解決しました。

    具体的にどのファイルのどの部分をどのように修正したのかを書いておくと、このスレッドを検索してきた人にも役立つ情報になりますね。

    キャンセル

  • 2016/10/24 11: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 が指定されます。

    キャンセル

同じタグがついた質問を見る

  • PHP

    21348questions

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

  • Apache

    1916questions

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

  • Word

    85questions

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