WordPressの「Maximum execution time of 30 seconds exceeded」エラーを修正する

beginner📝 WordPress2026-05-17| WordPress 5.x–6.x、PHP 7.4–8.3、Apache/Nginx、Linux(Ubuntu/CentOS)、共有ホスティングまたはVPS

Error Message

Fatal error: Maximum execution time of 30 seconds exceeded in /var/www/html/wp-includes/class-http.php on line 1
#php#max-execution-time#php.ini#wp-config#timeout

何が起きているか

大きなプラグインをアップロードしたり、5,000件の商品を持つWooCommerceカタログをインポートしたり、一括処理を実行したり、管理画面を操作しているときに、PHPがプロセスを途中で強制終了することがあります:

Fatal error: Maximum execution time of 30 seconds exceeded in /var/www/html/wp-includes/class-http.php on line 1

PHPは1つのスクリプトが実行できる時間に上限を設けています。デフォルトは30秒で、通常のページ読み込みには十分ですが、プラグインのインストール、画像のインポート、一括エクスポートには短すぎます。WordPressがWP_Http経由で内部HTTPリクエストを送信してリモートサーバーが応答しない場合や、大量のデータセットを処理する場合、すぐにこの上限に達してしまいます。

サーバーへのアクセス権限に応じて、この制限を引き上げる方法が4つあります。自分の環境に合ったものから試してください。

手早い修正 — wp-config.php

ファイルシステムにアクセスできる場合、これが最も手早い方法です。wp-config.php/* That's all, stop editing! */コメントのに1行追加します:

<?php
// 実行時間を300秒に引き上げる
set_time_limit(300);

/* That's all, stop editing! Happy publishing. */

set_time_limit()はWordPressが起動するたびにカウントダウンをリセットします。サーバーの再起動は不要で、次のリクエストから変更が有効になります。セーフモードではこの方法はブロックされますが、セーフモードはPHP 5.4以降では廃止されています。

エラーが発生した操作を再試行してください。正常に完了すれば問題は解決です。

恒久的な修正 — php.ini

wp-config.phpの方法はWordPressにのみ影響します。サーバー全体に変更を適用するには、php.iniを直接編集します。

有効な設定ファイルを探します:

php --ini | grep 'Loaded Configuration'

CLIにアクセスできない場合は、代わりに一時ファイルをウェブルートに置きます:

<?php phpinfo();

ブラウザで開き、「Loaded Configuration File」を検索します。

パスがわかったら、このディレクティブを見つけて更新します:

max_execution_time = 300

その後、変更を適用するためにPHPハンドラを再起動します:

# PHP-FPM:
sudo systemctl restart php8.1-fpm

# Apache with mod_php:
sudo systemctl restart apache2

.htaccessによる修正(Apacheのみ)

php.iniにアクセスできない共有ホスティング環境では、.htaccessでPHPディレクティブを上書きできる場合があります。WordPressの.htaccessの先頭に以下を追加します:

php_value max_execution_time 300

多くのcPanelホストではこの方法が使えます。保存直後にサイトが500エラーになる場合、ホストがphp_valueの上書きを無効にしているため、この行を削除してwp-config.phpの方法に切り替えてください。

Nginx + PHP-FPMによる修正

Nginxを使用している場合、.htaccessは機能しません。FPMプール設定とNginxサーバーブロックの2か所に制限を設定します。

FPMプール設定(通常は/etc/php/8.1/fpm/pool.d/www.conf):

request_terminate_timeout = 300

Nginxサーバーブロック:

fastcgi_read_timeout 300;

両方の変更を同時に適用します:

sudo systemctl restart php8.1-fpm
sudo systemctl reload nginx

共有ホスティング — cPanel / ホスティングパネル

多くの共有ホストではコントロールパネルからPHP設定を直接変更できます。cPanelではソフトウェア → PHPバージョンの選択 → オプションに移動し、max_execution_timeを見つけます。120または300に設定して保存するだけで、再起動は不要です。

設定が見つからない、または変更が反映されない場合、ホスト側で上限が設けられている可能性があります(一般的に60〜120秒)。サポートチケットを開けば、リクエストに応じて引き上げてもらえる場合があります。

テスト用WP-CLIワンライナー

タイムアウトが発生している特定のWP-CLIコマンドを実行したい場合は、設定ファイルを変更せずにインラインで制限を上書きできます:

WP_CLI_PHP_ARGS='-d max_execution_time=300' wp import content.xml --authors=create

修正が有効か確認する

本来の操作を再テストする前に、PHPが新しい値を認識しているか確認します。ウェブルートにcheck-timeout.phpとして以下を保存します:

<?php
echo ini_get('max_execution_time');

ブラウザでアクセスすると、300(または設定した値)が表示されるはずです。確認後はすぐにファイルを削除してください。診断スクリプトを本番環境に残してはいけません。

その後、元の操作(プラグインのインストール、コンテンツのインポート、一括更新など)を再実行し、最後まで完了することを確認します。

エラーが繰り返し発生する場合

制限を引き上げてもタイムアウトが続く場合、スクリプト自体に問題があります。よくある原因をいくつか挙げます:

  • 外部HTTPリクエストのハング — WordPressが応答しないリモートAPIを呼び出しています。スタックトレースがclass-http.phpを指している場合、それが強いヒントです。サーバーから疎通確認をしてみてください:curl -I https://api.example.com
  • 遅いデータベースクエリwp-config.phpSAVEQUERIESを有効にして、1秒以上かかるクエリをログに記録します。商品数が10,000件以上のWooCommerceサイトでよく見られる問題です。
  • バッチ処理なしのインポート — WooCommerceとWP All Importはどちらもバッチサイズを設定できます。500件を一度に処理しようとせず、1バッチあたり20〜50件に減らしてください。
  • WP-Cronの積み重なりwp-cron.phpのリクエストが積み重なっている場合は、WP-Cronを無効にして実際のサーバーcronを使用してください。wp-config.phpdefine('DISABLE_WP_CRON', true);を追加し、以下をスケジュールします:*/15 * * * * curl https://yoursite.com/wp-cron.php?doing_wp_cron > /dev/null 2>&1

どの値を設定すべきか

300秒あれば、ほぼすべてのWordPress操作をカバーできます。定常的なタスクに5分以上かかる場合、それはタイムアウトの問題ではなく設計の問題です。タイムアウトの上限を際限なく引き上げるのではなく、バッチ処理、Action Schedulerによるバックグラウンド処理、またはキューへの処理の委譲を検討してください。

Related Error Notes