Laravel

PHPWordを使ってエラー … その対処法 【Laravelで実装してみたよ】

みなさん、こんにちは。どんぶラッコです。

PHPで作ったシステムにWordファイルを適用させたい…そんな時に使うのがPHPWordだと思います。

どんぶラッコ
どんぶラッコ
かなり細かく設定できるからいいよね!

私も自社のプロジェクトのエクスポート機能を作る際に、PHPWordを利用しています。

しかし、Laravelで組み込んだ際に、いくつかのエラーが発生して「?」となったことがありました。

そこで、今回は私が遭遇したエラー2点とその解決方法を記載していきたいと思います!

No such file or directory

ZipArchive::close(): Failure to create temporary file: No such file or directory

今回は、wordで書き出す際に /storage 配下に一時ファイルを書き出すように設定していたのですが、そこでエラーが発生してしまっていました。

グランくん
グランくん
新規ディレクトリを作成したので、git pullした時に適切な権限が付与されていなくて、結果エラーになってしまっていました

ということで、storageのパーミッションを変更してあげましょう。

各種設定については人によって設定方法は様々だと思うのでここでは割愛します。

初期に storage を構築する際に設定をしているはずなので、その手順にしたがって再度設定をしてください。

どんぶラッコ
どんぶラッコ
こんな感じでユーザを作成している人が多いかな?

ファイルを開こうとして、エラーが発生しました

もう一つ、ハマったエラーは、適切にダウンロードできるものの、ファイルを開こうしてこんなエラーが表示されてしまうケースです。

私の場合、厄介なことにこのようにファイルが壊れてしまうケースとそうでないケースが存在しました。

結論から言うと、エクスポート指定していた文章に特殊記号が含まれていたことが原因でした。

$PHPWord = new PHPWord();
$section = $PHPWord->createSection();
$section->addText($EXPORT_TEXT);
// $EXPORT_TEXT ←ここに特殊文字が含まれてしまっていた!!

ということで、$EXPORT_TEXThtmlspecialchars() で囲ってあげることで解決しました。

$PHPWord = new PHPWord();
$section = $PHPWord->createSection();
// 変更
$section->addText(htmlspecialchars($EXPORT_TEXT, ENT_QUOTES, "UTF-8"));

cf. ) こちらの質問者様の場合は文字コードが異なっていたようです。解決方法は一緒です

悩んでいる方の解決になれば幸いです!

ABOUT ME
どんぶラッコ
ECコンサルタント、システムエンジニアを経て、quintet株式会社CTOに就任。普段はNuxt.jsやLaravelを使用しています。

\面白いと思ったら/

記事のシェア & Twitter のフォロー をお願いします!

@proglearn
一緒によく読まれている記事

COMMENT

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です