2026年5月20日

2026年5月20日

Maximum execution timeエラーを解決する方法【PHP実行時間超過】

はじめに

「Fatal error: Maximum execution time of 30 seconds exceeded」——このエラーはPHPスクリプトの実行時間が設定の上限(デフォルト30秒)を超えた場合に発生します。インポート処理・バックアップ・大量のデータ処理・重いプラグインの更新時によく発生します。

症状・原因

実行時間超過エラーの特徴:

  • 大量のデータをインポートしているときにエラーが発生する
  • WordPressのアップデート中にエラーになる
  • バックアッププラグインがタイムアウトする
  • WooCommerceの商品一括処理でエラーになる
  • 特定のページを表示するのに長時間かかりエラーになる

解決手順

ステップ1:wp-config.phpで設定(推奨・最も効きやすい)

// wp-config.phpに追加(データベース設定より前の行に書く)
set_time_limit(300);  // 300秒(5分)に設定

// または定数で設定
define('WP_MAX_EXECUTION_TIME', 300);

set_time_limit(0)にすると無制限になりますが、ループ処理でサーバーに負荷をかける危険があるため、適切な数値を設定してください。

ステップ2:.htaccessで設定(Apache)

# .htaccessに追加
php_value max_execution_time 300
php_value max_input_time 300

ステップ3:php.iniで設定(VPS・専用サーバー)

; php.iniに追加または変更
max_execution_time = 300
max_input_time = 300

変更後はPHP-FPMを再起動:sudo systemctl restart php8.1-fpm

ステップ4:functions.phpで設定

テーマのfunctions.phpに追加することでWordPress起動時に設定されます:

// functions.phpに追加
add_action('init', function() {
    set_time_limit(300);
});

ステップ5:各ホスティングでの設定方法

エックスサーバーの場合:

1. サーバーパネル → 「PHP設定」→「PHP設定編集」

2. max_execution_time = 300に変更

ConoHaの場合:

1. コントロールパネル → 「サイト管理」→「PHP設定」

2. max_execution_timeの値を変更

ロリポップの場合:

1. ユーザー管理画面 → 「サーバーの管理・設定」→「PHP設定変更」

2. 実行時間の設定を変更

処理自体を最適化する

タイムアウトを増やすだけでなく、処理を最適化することも重要です:

バッチ処理に分ける:

// 一度に大量処理せず、ページリロードで分割処理
$batch_size = 100;
$offset = isset($_GET['offset']) ? intval($_GET['offset']) : 0;

$posts = get_posts([
    'posts_per_page' => $batch_size,
    'offset'         => $offset,
]);

// 処理...

if (count($posts) === $batch_size) {
    // 次のバッチへリダイレクト
    wp_redirect(add_query_arg('offset', $offset + $batch_size));
}

WP-CLIを使う(SSH環境):

# WP-CLIはWEBサーバーのタイムアウトに縛られない
wp import large-file.xml --authors=create
wp search-replace 'old.com' 'new.com'

まとめ

Maximum execution timeエラーはset_time_limit(300)をwp-config.phpに追加することで解決できます。共有ホスティングではphp.iniを直接変更できない場合が多いため、.htaccessまたはfunctions.phpでの設定が有効です。根本的な解決には処理のバッチ分割やWP-CLIの活用も検討してください。

関連記事:

お気軽にご相談ください

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