2026年7月17日

2026年7月17日

WordPressのメモリ制限をphp.iniで変更する方法|memory_limitとWP_MEMORY_LIMITの関係

WordPressで「Allowed memory size of 134217728 bytes exhausted」のようなエラーが出るのは、PHPが1回の処理で使えるメモリの上限(memory_limit)に達したためです。この記事では、PHPの設定ファイルphp.iniで上限を引き上げる手順と、WordPress側の設定WP_MEMORY_LIMITとの関係、変更が効いたかの確認方法を解説します。コマンドやパスは、Ubuntu 24.04とPHP 8.3を例にしています(2026年10月時点)。

エラーの意味

エラーメッセージの数字は、上限のバイト数です。134217728バイトは128MBで、PHPの標準のphp.ini(php.ini-production)の値です。

PHP Fatal error:  Allowed memory size of 134217728 bytes exhausted (tried to allocate 20480 bytes)

この場合、128MBを使い切ったところで、さらに20480バイトを確保しようとして止まったことを示しています。画面が真っ白になる、「重大なエラーが発生しました」と表示される、画像のアップロードやプラグインの更新が途中で失敗する、といった形で現れます。

memory_limitとWP_MEMORY_LIMITの関係

メモリの上限には、PHPの設定とWordPressの設定の2段階があります。

設定 書く場所 役割
memory_limit php.ini、.user.ini、PHP-FPMのプール設定など PHPのプロセスが使えるメモリの上限
WP_MEMORY_LIMIT wp-config.php WordPressが通常の画面で求める上限。未定義なら単一サイトは40M、マルチサイトは64M
WP_MAX_MEMORY_LIMIT wp-config.php 管理画面での重い処理(画像の処理など)で求める上限。未定義なら通常256M

WordPressは起動時に、WP_MEMORY_LIMITが現在のmemory_limitより大きい場合だけ、PHPのini_set()で上限を引き上げます(wp-includes/default-constants.phpの処理)。現在のmemory_limitのほうが大きければ、何もしません。

つまり、php.iniのmemory_limitが土台になり、WordPressはそれを上回る値を求めたときだけ上書きを試みます。ただし、サーバー側でmemory_limitの変更が禁止されている場合(PHP-FPMのphp_admin_valueで固定されている場合など)は、wp-config.phpに書いても上限は変わりません。そのため、php.ini側で必要な値にしておくのが確実な方法です。

手順1: 現在の上限と、読み込まれているphp.iniを確認する

WordPressの管理画面で確認する

「ツール」→「サイトヘルス」→「情報」タブを開きます。「サーバー」の項目にPHPのメモリ上限が、「WordPress 定数」の項目にWP_MEMORY_LIMITとWP_MAX_MEMORY_LIMITの値が表示されます。

Webサーバー用のphp.iniの場所を確認する

PHPは、コマンドライン(CLI)用とWebサーバー用で別のphp.iniを読むことがあります。SSHでphp -iやphp --iniを実行して表示されるのはCLI用の設定で、Webサイトの設定とは限りません。

Webサーバーが読んでいるphp.iniは、一時的にphpinfo()を表示するファイルを作って確認します。

<?php
phpinfo();

このファイルをinfo-check.phpのような推測されにくい名前で公開ディレクトリに置き、ブラウザで開きます。「Loaded Configuration File」が読み込まれているphp.ini、「Scan this dir for additional .ini files」と「Additional .ini files parsed」が追加で読まれている設定ファイル、「memory_limit」の行が現在の値です。確認が終わったらすぐに削除してください。 サーバーの情報が誰でも見られる状態になります。

Ubuntuの標準パッケージの場合、場所は次のとおりです。

PHPの動かし方 php.iniの場所 反映に必要な操作
PHP-FPM(Nginx、またはApache+PHP-FPM) /etc/php/8.3/fpm/php.ini php8.3-fpmの再起動
Apacheのmod_php /etc/php/8.3/apache2/php.ini apache2の再起動
コマンドライン(WP-CLI、cron) /etc/php/8.3/cli/php.ini 不要(次の実行から反映)

AlmaLinuxなどRHEL系の標準パッケージでは、/etc/php.iniと/etc/php.d/が使われ、PHP-FPMのサービス名はphp-fpmです。

手順2: memory_limitを変更する(VPS・専用サーバー)

php.ini本体を直接書き換えてもかまいませんが、Ubuntuでは追加の設定ファイルをconf.dに置く方法が管理しやすく、パッケージの更新でphp.iniが置き換わる場合にも影響を受けません。ファイル名は、後から読み込まれて優先されるよう99-で始めます。

# PHP-FPMの場合(mod_phpなら fpm を apache2 に読み替える)
echo "memory_limit = 256M" | sudo tee /etc/php/8.3/fpm/conf.d/99-wordpress.ini

# 設定の書き間違いがないか確認する
sudo php-fpm8.3 -t

# PHP-FPMを再起動して反映する
sudo systemctl restart php8.3-fpm

mod_phpの場合は、最後の行がsudo systemctl restart apache2になります。NginxやApacheの設定ファイル(バーチャルホストの設定)を書き換える必要はありません。

PHP-FPMのプール設定も確認する

php.iniを変えても値が変わらない場合は、PHP-FPMのプール設定で上書きされていないかを確認します。

grep -rn "memory_limit" /etc/php/8.3/fpm/pool.d/

php_admin_value[memory_limit]が書かれていると、その値が優先され、WordPressのini_set()でも変更できません。ここを変える場合も、変更後にPHP-FPMを再起動します。

手順2(レンタルサーバーの場合)

レンタルサーバーではphp.ini本体を編集できないことが多いため、次のどちらかを使います。

  • サーバー会社の管理画面のPHP設定: 多くのレンタルサーバーに、memory_limitなどを変更する画面があります。まずこちらを確認します。
  • .user.ini: PHPがPHP-FPMやCGIとして動いている場合、WordPressのインストール先に.user.iniを置くと、そのディレクトリ以下に設定が効きます。
memory_limit = 256M

.user.iniは読み込み結果がキャッシュされ、標準では反映まで最大5分(user_ini.cache_ttlの初期値300秒)かかります。また、サーバー会社が上限を設けている場合は、それより大きい値にはできません。

.htaccessにphp_value memory_limit 256Mと書く方法は、Apacheのmod_phpの場合だけ使えます。PHP-FPMやCGIの環境で書くと500エラーになるため、使えるかどうか分からない場合は避けてください。

手順3: WordPress側の設定を合わせる

php.iniの値を引き上げれば、通常はWordPress側の設定を変えなくても、その上限まで使えます。WordPressの画面からも明示しておきたい場合は、wp-config.phpの「編集が必要なのはここまでです」(英語版では「That's all, stop editing!」)というコメント行より上に、次の行を追加します。

<?php
// 通常の画面でWordPressが求めるメモリ上限
define( 'WP_MEMORY_LIMIT', '256M' );
// 管理画面の重い処理で求めるメモリ上限
define( 'WP_MAX_MEMORY_LIMIT', '512M' );

<?phpの行は、既存のwp-config.phpには書き足さないでください(ファイルの先頭にすでにあります)。

手順4: 変更が効いたか確認する

「ツール」→「サイトヘルス」→「情報」で、PHPのメモリ上限とWP_MEMORY_LIMITの値が変わったことを確認します。WP-CLIを使える場合は、WordPressを読み込んだ状態の値も確認できます。

wp eval 'echo ini_get( "memory_limit" ), PHP_EOL, WP_MEMORY_LIMIT, PHP_EOL;'

ただし、WP-CLIはCLI用のphp.iniで動くため、ここで表示されるmemory_limitはWebサイトの値と異なることがあります。Webサイトの値は、サイトヘルスか、手順1のphpinfo()で確認します。

最後に、エラーが出ていた操作(画像のアップロード、プラグインの更新など)をもう一度行い、エラーが出ないことを確かめます。

いくつに設定すればよいか

memory_limitは、PHPのプロセス1つあたりの上限で、その量が常に確保されるわけではありません。ただし、同時に動くPHPのプロセスが一斉に上限近くまで使うと、サーバー全体のメモリが足りなくなります。

  • 一般的なWordPressサイトでは、256Mで足りることが多いです。
  • VPSでは、「memory_limit × PHP-FPMの最大プロセス数(pm.max_children)」が、サーバーのメモリから他のソフト(データベースなど)の分を引いた量を大きく超えないように見積もります。超えると、OSがプロセスを強制終了することがあります。詳しくは WordPressサーバーでOOM Killerが発動するときのメモリ設定の見直し方法 で解説しています。
  • -1(無制限)は、暴走した処理がサーバーのメモリを使い切るおそれがあるため、Webサーバー用の設定では使わないでください。

上限を上げてもエラーが続く場合や、極端に大きな値が必要になる場合は、特定のプラグインやテーマの処理が原因のことがあります。Query Monitorなどのプラグインで、ページごとのメモリ使用量を確認し、原因を絞り込みます。

まとめ

  • 「Allowed memory size of ... bytes exhausted」は、PHPのmemory_limitに達したことを示します。134217728バイトは128MBです。
  • WordPressはWP_MEMORY_LIMITが現在のmemory_limitより大きいときだけ引き上げを試みます。土台はphp.iniのmemory_limitです。
  • php -iはCLI用の設定です。Webサーバー用のphp.iniは、一時的なphpinfo()で「Loaded Configuration File」を見て確認し、確認後はファイルを削除します。
  • VPSではconf.dに設定ファイルを追加し、PHP-FPM(またはmod_phpならApache)を再起動します。プール設定のphp_admin_valueも確認します。
  • レンタルサーバーでは管理画面のPHP設定か.user.iniを使います。
  • 値は256M程度から始め、プロセス数とサーバーのメモリを見て決めます。

お気軽にご相談ください

お見積りへ お問い合わせへ
▲