2026年5月20日
2026年5月20日
WordPressのPHP設定を見直す方法|memory_limit・アップロード上限・OPcache・PHP-FPM
WordPress の「メモリ不足のエラーが出る」「大きな画像をアップロードできない」「管理画面の保存がタイムアウトする」といった問題の多くは、PHP の設定で決まっています。この記事では、WordPress で見直すことの多い PHP の設定を、確認する方法、変更する場所、目安の値の順に説明します。
2026年10月時点で、WordPress の公式サイトが推奨する PHP のバージョンは 8.3 以上です。この記事の例も PHP 8.3(Ubuntu 24.04 の標準パッケージ)を前提にしています。
現在の設定を確認する
サイトヘルスで確認する(おすすめ)
管理画面の「ツール」→「サイトヘルス」を開き、「情報」タブを選びます。
- 「サーバー」の欄:PHP のバージョン、PHP SAPI(PHP の動かし方)、PHP メモリ上限、PHP タイムリミット、アップロードの上限ファイルサイズ、PHP POST サイズ上限、最大入力変数、オペコードキャッシュなど
- 「WordPress 定数」の欄:
WP_MEMORY_LIMITとWP_MAX_MEMORY_LIMITの値
ここに表示されるのは、WordPress を実際に動かしている PHP の値です。設定を変えた後の確認にもここを使います。
コマンドで確認するときの注意
サーバーにログインして php -i や php --ini を実行すると、コマンドライン用(CLI)の PHP の設定が表示されます。Web サーバーから使われる PHP-FPM の設定とは別のファイルを読んでいることが多いので、WordPress の値を確かめる目的には向きません。
Ubuntu の場合、設定ファイルは次のように分かれています。
| 用途 | 設定ファイル | 追加の設定を置くフォルダー |
|---|---|---|
| PHP-FPM(Web) | /etc/php/8.3/fpm/php.ini |
/etc/php/8.3/fpm/conf.d/ |
| コマンドライン | /etc/php/8.3/cli/php.ini |
/etc/php/8.3/cli/conf.d/ |
PHP-FPM が読んでいるファイルは次のコマンドで確認できます。
php-fpm8.3 -i | grep -E "Loaded Configuration|Scan this dir"
phpinfo() を出力する PHP ファイルを公開フォルダーに置いて確認する方法もありますが、サーバーの詳しい情報が誰でも見られる状態になります。使う場合は確認後すぐに削除してください。
見直すことの多い設定と目安
| 設定 | PHP の初期値 | 目安 | 内容 |
|---|---|---|---|
memory_limit |
128M |
256M |
1回のリクエストで PHP が使えるメモリの上限 |
max_execution_time |
30(秒) |
60〜300 |
スクリプトの実行時間の上限。インポートや大きな処理で延ばす |
max_input_time |
-1(php.ini の例は 60) |
60〜300 |
送信されたデータの受け取りにかける時間の上限 |
max_input_vars |
1000 |
3000 程度 |
1回の送信で受け取る変数の数。項目の多いメニューやカスタムフィールドで不足しやすい |
upload_max_filesize |
2M |
使うファイルに合わせる(例 64M) |
1ファイルのアップロードの上限 |
post_max_size |
8M |
upload_max_filesize 以上(例 64M) |
1回の送信全体の上限 |
post_max_sizeがupload_max_filesizeより小さいと、実際の上限はpost_max_sizeになります。アップロード上限を上げるときは2つをそろえて上げます- PHP マニュアルでは、
memory_limitはpost_max_sizeより大きくするよう説明されています - 目安の値は一般的な WordPress サイトの例です。サーバーのメモリ量や、PHP-FPM のワーカー数(後述)とあわせて決めてください
設定を変更する場所
どこで変更できるかは、PHP の動かし方(サイトヘルスの「PHP SAPI」)とサーバーの種類で変わります。
| 環境 | 変更する場所 |
|---|---|
| VPS・専用サーバー(PHP-FPM) | /etc/php/8.3/fpm/conf.d/ に設定ファイルを追加し、PHP-FPM を再読み込み |
Apache のモジュールとして PHP を動かしている(SAPI が apache2handler) |
php.ini、または .htaccess の php_value |
共用サーバーで FPM・CGI として動いている(SAPI が fpm-fcgi や cgi-fcgi) |
サーバー会社の管理画面の PHP 設定、または .user.ini |
VPS(PHP-FPM)の場合
php.ini 本体を書き換える代わりに、追加の設定ファイルを作ると、パッケージの更新で上書きされにくく、変更点も分かりやすくなります。
; /etc/php/8.3/fpm/conf.d/99-wordpress.ini
memory_limit = 256M
max_execution_time = 120
max_input_time = 120
max_input_vars = 3000
upload_max_filesize = 64M
post_max_size = 64M
; 本番ではエラーを画面に出さず、ログに残す
display_errors = Off
log_errors = On
保存したら、設定の文法を確認してから再読み込みします。
sudo php-fpm8.3 -t
sudo systemctl reload php8.3-fpm
Nginx を使っている場合は、アップロード上限を上げると Nginx 側の client_max_body_size(初期値 1MB)にも引っかかることがあります。413 Request Entity Too Large が出るときは Nginx の設定も見直します。
Apache のモジュール(mod_php)の場合
WordPress のフォルダーの .htaccess に書けます。
php_value memory_limit 256M
php_value upload_max_filesize 64M
php_value post_max_size 64M
php_value max_execution_time 120
php_value max_input_vars 3000
php_value は Apache のモジュールとして PHP を動かしているときだけ使えます。PHP-FPM や CGI で動いているサーバーで書くと、500 エラーになることがあります。共用サーバーでの書き方は .htaccessでPHP設定を変更する方法 も参照してください。
共用サーバー(FPM・CGI)の場合
サーバー会社の管理画面に PHP の設定画面があれば、そちらを使います。管理画面がない場合は、WordPress のフォルダー(wp-config.php と同じ場所)に .user.ini を置きます。書き方は php.ini と同じです。
; .user.ini
memory_limit = 256M
upload_max_filesize = 64M
post_max_size = 64M
max_execution_time = 120
max_input_vars = 3000
.user.ini は初期設定では5分(user_ini.cache_ttl = 300)ごとに読み直されるため、反映まで数分かかることがあります。また、php.ini でしか変えられない設定(OPcache の多くの設定など)は .user.ini では変えられません。サーバー会社が上限を決めている場合は、それ以上にはなりません。
wp-config.phpのWP_MEMORY_LIMITの動き
WordPress は、wp-config.php の定数を使って、自分で memory_limit を引き上げることがあります。
<?php
// wp-config.php の「編集が必要なのはここまでです」より上に書く
define( 'WP_MEMORY_LIMIT', '256M' ); // サイト表示などで使う上限
define( 'WP_MAX_MEMORY_LIMIT', '512M' ); // 管理画面や画像処理で使う上限
WordPress 本体(wp-includes/default-constants.php)の処理は次のとおりです。
WP_MEMORY_LIMITを書かない場合、初期値は40M(マルチサイトは64M)ですWP_MEMORY_LIMITが PHP のmemory_limitより大きいときだけ、memory_limitをその値に引き上げます。PHP 側の値のほうが大きければ、何もしません(下げることはありません)- 管理画面や画像の処理では、
WP_MAX_MEMORY_LIMIT(初期値256M。PHP 側がそれより大きければ PHP 側の値)まで引き上げます - サーバーが
memory_limitの変更を禁止している場合は、どちらの定数も PHP 側の値のままになります
つまり、wp-config.php の定数は「PHP の設定を上書きする」ものではなく、「PHP の設定が小さいときに、許される範囲で引き上げる」ものです。エラーが続く場合は、まず PHP 側の memory_limit を確認します。メモリ不足のエラーの直し方は wp-config.phpでメモリ制限を増やす方法 でも説明しています。
OPcacheを確認・調整する
OPcache は、PHP ファイルをコンパイルした結果をメモリに保存し、次からのリクエストで再利用する PHP 標準の機能です。WordPress は1回の表示で多くの PHP ファイルを読むため、有効になっていると処理が軽くなります。
PHP 8.3 の OPcache の初期値は、すでに多くのサイトでそのまま使える値になっています。
| 設定 | 初期値 | 内容 |
|---|---|---|
opcache.enable |
1 |
Web 用の PHP で OPcache を使う |
opcache.memory_consumption |
128(MB) |
キャッシュに使うメモリ |
opcache.interned_strings_buffer |
8(MB) |
文字列の共有に使うメモリ |
opcache.max_accelerated_files |
10000 |
キャッシュできるファイル数の上限 |
opcache.validate_timestamps |
1 |
ファイルの更新を確認する |
opcache.revalidate_freq |
2(秒) |
更新を確認する間隔 |
プラグインが多く PHP ファイルの数が上限に近い場合は、ファイル数を数えてから増やします。
# WordPress 内の PHP ファイルの数を数える
find /var/www/html -name "*.php" | wc -l
; /etc/php/8.3/fpm/conf.d/99-wordpress.ini に追記する例
opcache.memory_consumption = 256
opcache.interned_strings_buffer = 16
opcache.max_accelerated_files = 20000
注意する点は次のとおりです。
opcache.validate_timestampsは1のままにします。WordPress は管理画面からプラグインやテーマ、本体を更新してファイルを書き換えます。0にすると、更新後も古いコードが動き続けることがあります- WordPress 5.5 以降は、更新でファイルを書き換えたときに、そのファイルの OPcache を自動で消す処理(
wp_opcache_invalidate())が入っています。更新のたびに自分でopcache_reset()を呼ぶコードは基本的に不要です - OPcache は PHP-FPM のプールごとに持っています。
wp evalなどコマンドラインからopcache_reset()を実行しても、Web 側の OPcache は消えません。すべて消したいときはsudo systemctl reload php8.3-fpmで PHP-FPM を再読み込みします - 古い記事にある
opcache.fast_shutdownは PHP 7.2 で廃止された設定です。書いても効果はありません
OPcache の使用状況の確認方法は WordPressのOPcache設定 で説明しています。
PHP-FPMのワーカー数を決める
VPS で PHP-FPM を使っている場合、同時に処理できるリクエストの数は、プール設定のワーカー数(pm.max_children)で決まります。Ubuntu の初期値は pm.max_children = 5 で、アクセスの多いサイトでは足りなくなることがあります。
pm.max_children は、PHP に使えるメモリを、ワーカー1つあたりのメモリで割って決めます。まず、実際のワーカーのメモリ使用量を調べます(アクセスがある時間帯に実行すると実態に近くなります)。
# php-fpm8.3 のプロセス数と平均メモリ(MB)を表示する(管理プロセスも含む)
ps --no-headers -o rss -C php-fpm8.3 | awk '{s+=$1; n++} END {printf "%d processes, avg %.0f MB\n", n, s/n/1024}'
たとえば、サーバーのメモリ 4GB のうち、データベースや OS などに 1.5GB を残し、PHP に 2.5GB を使え、ワーカー1つが平均 60MB なら、2500 ÷ 60 ≒ 41 なので pm.max_children は 40 程度にします。ワーカー1つのメモリは memory_limit まで増えることがあるので、余裕を持たせます。
; /etc/php/8.3/fpm/pool.d/www.conf の該当行を変更する
pm = dynamic
pm.max_children = 40
pm.start_servers = 8
pm.min_spare_servers = 4
pm.max_spare_servers = 12
; 一定数のリクエストを処理したらワーカーを作り直す(メモリの増加を抑える)
pm.max_requests = 500
sudo php-fpm8.3 -t
sudo systemctl reload php8.3-fpm
pm.start_servers は pm.min_spare_servers 以上、pm.max_spare_servers 以下にする必要があります。ステータス画面や遅いリクエストのログを使った詳しい調整は VPSでPHP-FPMを最適化する方法 を参照してください。
変更が反映されたか確認する
- もう一度「ツール」→「サイトヘルス」→「情報」→「サーバー」を開き、値が変わったか確認します
- メディアの「新規メディアファイルを追加」画面の「最大アップロードサイズ」の表示でも、アップロード上限を確認できます
- 変わっていない場合は、変更したファイルが PHP-FPM(または Apache)の読んでいるファイルか、再読み込みをしたか、サーバー会社の上限に当たっていないかを確認します
まとめ
- 設定の確認はサイトヘルスの「情報」タブで行う。
php -iはコマンドライン用の値なので注意する - 変更する場所は PHP の動かし方で変わる。PHP-FPM なら
conf.dに設定ファイルを追加、mod_php なら.htaccess、共用サーバーの FPM・CGI なら管理画面か.user.ini WP_MEMORY_LIMITは、PHP 側のmemory_limitが小さいときに引き上げるだけで、下げたり、禁止された上限を超えたりはしない- OPcache は初期値で有効。
validate_timestampsは1のままにし、opcache.fast_shutdownは使わない - PHP-FPM の
pm.max_childrenは、使えるメモリをワーカー1つのメモリで割って決める
関連記事: