通知
すべてクリア

phpSpreadsheetのエラーです

投稿: 2
質問投稿者
コミュニティ参加日: 2週間前

phpSpreadsheetでのエクセル生成を実装しています。

composerインストール、phpSpreadsheetインストールは完了しています。

 

エクセルを生成しようとすると、下記エラーが発生します。

<b>Fatal error</b>: Out of memory (allocated 8388608) (tried to allocate 16777248 bytes) in <b>/home/account_name/bin/vendor/maennchen/zipstream-php/src/File.php</b> on line <b>332</b><br />

 

このエラーメッセージ "Fatal error: Out of memory (allocated 8388608) (tried to allocate 16777248 bytes)" は、PHPスクリプトがメモリ不足に陥ったことを示しています。具体的には、8,388,608バイト(8MB)のメモリしか割り当てられていませんが、16,777,248バイト(16MB)を割り当てようとしています。このエラーは、maennchen/zipstream-phpライブラリのFile.phpファイルの332行目で発生しています。

対策としてphp.iniをコントロールパネルで編集して、memory_limitの割り当てを増やしました。が、結果は変わりません。

対処法としてなにが考えられるでしょうか。お力添えくださいませ。

対象サービス
3件の返信
投稿: 76
コミュニティ参加日: 10か月前

ご指摘のプログラムをいずれも使っていないため、あくまで一般的な、漠然とした回答ですが。

 

サーバーパネルの「php.ini」の設定値について、「512M」や「1G」ぐらいにする。
 ※無制限とか極端に多い数字とかにするとサーバー側で制限されるかもしれないので、ある程度現実的な数字に。
  「1G」はドメイン設定を追加したときの初期値で、利用サーバーによるかもしれませんがおそらく問題ない数字のはずです。
 ↓
サーバーパネルからphp.iniを変更した結果が適切に反映されているか、phpinfoで確認する
 ↓
phpinfoの結果が適切に反映されている場合、プログラムの中でmemory_limitを動的に書き換えていないかをチェックする
 ↓
memory_limit以外にも、composer_memory_limitのような「そのプログラムだけで通用する設定」を作っていないか、チェックする

あたりができそうなことでしょうか。

最近だとエックスサーバーでドメイン設定を追加したときのmemory_limitの初期値は「1G」で、それが質問にあるような「8M」で制限されているのであれば、ini_set で書き換えているんじゃないかと思いますが…どうでしょうか。

返信
投稿: 2
質問投稿者
コミュニティ参加日: 2週間前

解説ありがとうございます!
自己解決しましたので、共有させていただきます。

当該サイトはサブドメインを使用しているのですが、
本ドメイン→PHP7
サブドメイン→PHP8
という構成になっています。本ドメインはPHP7でしか動かないCMSで構築されており、PHP8に統一することができなかったという背景です。

エックスサーバーでは本ドメインとサブドメインで別のPHPを使う場合、一方をcgi版にする必要があります。cgi版PHPはユーザーが変更可能なphp.iniとは別のファイルを参照しているようで、当方が編集していたphp.iniとは別のものでした。

今回はサブドメインを諦め、別ドメインでの運用に切り替えました。
同様の事象で困っている方の参考になれば幸いです。

返信
1件の返信
コミュニティ参加日: 10か月前

投稿: 76

https://community.xserver.ne.jp/question/pid/1267/

過去に少し触れたことがありますが、ルートドメインとサブドメインで利用するPHPのバージョンを変える場合、qiitaの記事にあるように、サブドメイン側のPHPバージョンを指定する際にphp.iniの読込先を明示すれば、サブドメインでも運用できそうな気がしますが…。

サブドメインをあきらめてしまっても問題ないのであれば、それでよいのかもしれませんー!ご参考までに!

返信