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程度から始め、プロセス数とサーバーのメモリを見て決めます。