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を最適化する方法 を参照してください。

変更が反映されたか確認する

  1. もう一度「ツール」→「サイトヘルス」→「情報」→「サーバー」を開き、値が変わったか確認します
  2. メディアの「新規メディアファイルを追加」画面の「最大アップロードサイズ」の表示でも、アップロード上限を確認できます
  3. 変わっていない場合は、変更したファイルが 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つのメモリで割って決める

関連記事:

お気軽にご相談ください

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