2026年5月20日

2026年5月20日

WordPressのPHP設定を最適化する方法

はじめに

WordPressのパフォーマンスと安定性はPHP設定に大きく依存します。メモリ不足によるエラー・アップロードサイズ制限・OPcacheの有効化など、適切なPHP設定でサイトの速度と安定性を改善できます。

症状・原因

  • 「Fatal error: Allowed memory size exhausted」エラーが発生する
  • 大きな画像ファイルがアップロードできない(512KB上限など)
  • 管理画面の操作でタイムアウトエラーが発生する
  • PHPが遅く、OPcacheが有効になっていない

解決手順

ステップ1:現在のPHP設定を確認する

// WordPressルートに一時ファイルを作成(確認後は必ず削除)
// phpinfo.php
<?php phpinfo(); ?>
# コマンドラインでPHP設定を確認
php -i | grep -E "memory_limit|max_execution_time|upload_max_filesize|post_max_size|opcache"

# PHP設定ファイルの場所を確認
php --ini

# WordPressが認識しているメモリを確認
wp eval "echo WP_MEMORY_LIMIT . PHP_EOL; echo WP_MAX_MEMORY_LIMIT . PHP_EOL;"

ステップ2:php.iniの設定を変更する

; php.ini(設定ファイルの場所はサーバーによって異なる)

; メモリ制限(WordPressの推奨は最低64MB、推奨256MB)
memory_limit = 256M

; スクリプト実行時間(長いインポート処理に対応)
max_execution_time = 300

; 入力処理時間
max_input_time = 300

; 入力変数の最大数(多くのカスタムフィールドを持つサイト用)
max_input_vars = 3000

; ファイルアップロード設定
upload_max_filesize = 64M
post_max_size = 64M        ; upload_max_filesize より大きくする

; エラー表示(本番環境ではオフ)
display_errors = Off
log_errors = On
error_log = /var/log/php_errors.log

ステップ3:WordPress側でメモリを設定する

// wp-config.php: PHP設定をWordPressから上書き

// WordPressのメモリ制限(php.iniより小さい値が適用される)
define('WP_MEMORY_LIMIT', '256M');

// 管理画面のメモリ制限(通常フロントより多く必要)
define('WP_MAX_MEMORY_LIMIT', '512M');
# .htaccess でPHP設定を変更(共有ホスティング向け)

php_value memory_limit 256M
php_value max_execution_time 300
php_value upload_max_filesize 64M
php_value post_max_size 64M
php_value max_input_vars 3000

ステップ4:OPcacheを有効化・最適化する

; php.ini: OPcache設定(PHPスクリプトのコンパイル済みキャッシュ)

[opcache]
opcache.enable = 1
opcache.enable_cli = 0
opcache.memory_consumption = 128   ; キャッシュメモリ(MB)
opcache.interned_strings_buffer = 8
opcache.max_accelerated_files = 10000  ; キャッシュするファイル数
opcache.revalidate_freq = 60       ; 変更チェック間隔(秒)
opcache.validate_timestamps = 1    ; 本番では0に(手動クリアが必要)
opcache.save_comments = 1          ; WordPress のアノテーションに必要
opcache.fast_shutdown = 1
// functions.php: デプロイ時にOPcacheをクリア

add_action('upgrader_process_complete', function (): void {
    if (function_exists('opcache_reset')) {
        opcache_reset();
    }
});

// WP-CLIでOPcacheをクリア
// wp eval "opcache_reset(); echo 'OPcache cleared';"

ステップ5:PHP-FPMのワーカー数を最適化する

; /etc/php/8.2/fpm/pool.d/www.conf

[www]
; プロセス管理方式
pm = dynamic

; 最大ワーカー数(RAM / 各ワーカーのメモリ使用量)
; 例: 2GB RAM、各ワーカー40MB → 50ワーカー程度
pm.max_children = 50

; 起動時のワーカー数
pm.start_servers = 5

; アイドル最小ワーカー数
pm.min_spare_servers = 5

; アイドル最大ワーカー数
pm.max_spare_servers = 35

; ワーカーの最大リクエスト数(メモリリーク防止)
pm.max_requests = 500

; ステータスページ(モニタリング用)
pm.status_path = /fpm-status
# PHP-FPMの設定を再読み込み
sudo systemctl reload php8.2-fpm

# PHP-FPMの状態を確認
sudo systemctl status php8.2-fpm

# ワーカーの使用状況を確認
curl http://localhost/fpm-status?full 2>/dev/null | grep -E "state|requests"

注意事項

  • 共有ホスティングでは php.ini を直接編集できない場合があります。.htaccessphp_value ディレクティブか、コントロールパネルから設定してください
  • memory_limit を際限なく上げるとサーバーメモリが枯渇します。まずプラグインの最適化やクエリ削減を検討し、それでも不足する場合に増やしてください
  • OPcacheの validate_timestamps = 0 は最高パフォーマンスですが、ファイル変更後に手動でキャッシュクリアが必要です。開発環境では 1 を推奨します

まとめ

php.inimemory_limit=256Mupload_max_filesize=64Mmax_execution_time=300 を設定し、wp-config.phpWP_MEMORY_LIMIT を上書きします。OPcacheは opcache.memory_consumption=128max_accelerated_files=10000 で有効化し、プラグイン更新時に opcache_reset() で自動クリアします。PHP-FPMは pm.max_children をRAM容量から計算して設定します。

お気軽にご相談ください

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