WordPress更新時の「Fatal error: Maximum execution time of 30」エラーの回避方法とエラー発生後に「別の更新が現在進行中です。」となってしまって更新ができなくなった場合の対処手順について覚書。
「Fatal error: Maximum execution time of 30」エラーと「別の更新が現在進行中です。」はだいたいセットで発生するので両方について対処作を記載しています。
「Fatal error: Maximum execution time of 30」エラーの原因と対処
php.iniの設定の中でスクリプト実行処理の制限時間が30(秒)となっているため、WordPressの更新時にダンロードに時間がかかったり、処理に時間がかかって30秒を超えてしまうと発生します。
以下に記載する何れかの対処方法でタイムアウトを伸ばしてください。
対処方法については、各種コンフィグファイルを変更するので必ず事前にバックアップを取った上で作業を行ってください。
対処方法1:「php.ini」ファイルの設定値の変更
「Fatal error: Maximum execution time of 30」エラーの原因となっているスクリプトの実行時間の上限を変更して長くすることで対処が可能です。
スクリプト実行時間の上限値は、PHPの設定ファイル「php.ini」の「max_execution_time」という設定値をデフォルト30秒から大きい数字に変更します。
※php.iniファイルは、phpのインストールフォルダの直下に保管されています
以下は、600秒(10分)に変更した際の記載例です。
max_execution_time=600
php.iniの内容を変更した際は、必ずapacheを再起動して設定を反映させてください。
また、php.iniを変更するとPHPで動作しているすべてのアプリケーションに影響がありますので、影響範囲を考慮して問題ないか判断した上で行ってください。
設定範囲をサイトごとにしぼる対処方法もありますので以降に記載します。
対処方法2:「wp-config.php」ファイルに設定を追記する
運用上の都合などによりapacheの再起動ができない場合やphp.iniを変更する対処ができな場合は、WordPressの設定ファイルである「wp-config.php」ファイルに「set_time_limit(秒数);」という設定を追記して対処が可能です。
※「wp-config.php」ファイルは、WordPressnインストールフォルダ直下にあります。
php.iniの記載とは異なるので注意してください。
以下は、タイムアウトを600秒に変更した際の記載例です。
set_time_limit(600);
「wp-config.php」に記載した場合は、影響範囲の設定したWordPressサイトのみに限定することができます。
対処方法3:「.htaccess」ファイルに追記する
対象サイトの「.htaccess」ファイルに記載することで対処方法2と同様に特定のサイトのみに限定することができます。
「.htaccess」ファイルは非常に重要なファイルとなりますので、必ずバックアップを取った上で実施してください。
「.htaccess」ファイルは、サイトのルート上に保管されていますので、「.htaccess」ファイルに以下の2行を追記してください。
php_value ignore_user_abort On
php_value max_execution_time 600
「別の更新が現在進行中です。」の原因と対処
更新時にタイムアウトなどにより処理が中断した場合に、内部的にはまだ更新処理が動いている(更新中の状態フラグが立っている)状態と誤認識されているために発生します。
対処としては、更新中の状態を示す状態フラグを削除することで更新中状態から通常状態に戻すことができます。
対処方法
更新処理中となっているWordPressのサイトの接続先データベースにある「XXX_options」テーブルから"option_name"フィールドの値が"core_update.lock"になっているレコードを削除します。
SQL文で表すと以下のようになります。
delete from wp_options where option_name = "core_updater.lock"
上記SQL文をphpMyAdminから実行すれば良いです。
phpMyAdminを使用したSQL分文の実行手順
phpMyAdminを起動して対象のWordPressのサイトが使用しているデータベースを選択して[SQL]タブをクリックします。
使用しているデータベースがわからない場合は、対象のWordPressがインストールされているフォルダ直下にある「wp-config.php」ファイルの"define('DB_NAME', 'XXXX');"の記載を確認してください。
'XXXX'部分の文字列が使用しているデータベース名となります。
画面右の[SQLクエリボックス]に以下のSQLを入力し、[実行]ボタンをクリックします。
delete from wp_options where option_name = "core_updater.lock"
SQLの実行を確認するメッセージが表示されるので[OK]をクリックします。
以下のように「1行変更しました。」と表示されていればOKです。
以上でWordPressが更新中のステータスから通常のステータスに戻りますので、更新を実行した際に「別の更新が現在進行中です。」にはならず、更新作業が進むはずです。
まとめ
WordPressの更新時にスクリプトの実行タイムアウトにより更新ができない場合の対処方法と更新スクリプトが実行停止した場合によくある「別の更新が現在進行中です。」となってしまった場合の対処について説明しました。
対処方法については、PHPやWordPressのコンフィグの変更が伴うので、失敗したときのことを考慮してバックアップ等の事前準備をしてから行いましょう。
コメント