WordPressの編集画面で”Fatal error” 発生⇒原因は多すぎるリビジョン数。対策と再発防止策をご紹介。

wordpress-fatal-error-revision00

珍しくwordpress関連の記事投稿になります。最近、作成・運営・管理しているWordPressのサイトの1つでエラーが起きました。

原因の発見に至るまで何時間もかかったのですが、最終的に、多すぎるリビジョン数が動作不良の原因とわかりました。

Fatal errorの原因は多すぎるリビジョン数だった

調べる中でこの内容に関連する記事が見つからず、同様のエラーに直面されている方も多数おられると思い記事にすることにしました。

目次

最初にまとめ

今回の経験でわかったことを記載してみます。

多すぎるリビジョン数が原因と思われる症状

  • 特定のページの編集画面を開くと、編集画面が表示されるのに数秒かかる(リビジョンが多いと読み込むのに時間がかかる)
  • ビジュアルエディタ、HTMLエディタの切り替えができない(特定のページのみエディタの動作がおかしい)
  • 特定のページの編集画面が開けない(Fatal errorや、画面真っ白になるパターンもあるかも)

WordPressのバージョンアップやプラグインのインストール&更新をしておらず、特定のページだけ上記の症状がでた場合は、リビジョン数が原因かもしれませんので、確認してみてください。

WordPressのリビジョンとは?

執筆・編集した記事の内容をデータベースに保存して差分を見たり、復元できる機能。とても便利な機能だが、増えすぎるとWordPressサイトのパフォーマンス低下だけでなく、今回のように原因不明のエラーとなる可能性がある。

 

原因発見に至るまで

以下、原因発見に至るまでの流れです。

編集画面を開くとFatal error

ある日、とあるWebサイトの共同運営者より

————————————-

今朝一度、スケジュールページを編集したのですが、その後編集できなくなってしまいました。
他のページは編集用のページが開け、編集用のダッシュボードも開けます。
このページだけ「固定ページを編集」をクリックすると以下のエラーメッセージが出ます。

Fatal error: Unknown: Cannot use output buffering in output buffering display handlers in Unknown on line 0

————————————-
と連絡が来たため、ログインして確認すると、確かに同じエラーがでました。

 

特にWordpressのバージョンアップや、プラグインのインストール・更新をしていないのに、いきなりエラーが出ていることに、違和感を感じました。

 

常套手段のプラグインの全停止

エラー原因を特定するため、一旦、

  • プラグインUpdraftPlus BackupでWordPress全体のバックアップ(これ重要です)
  • プラグイン一覧画面の設定画面のキャプチャ(後でもとに戻す時に見るため)

を行った後、常套手段のプラグインの全停止を行うと、このエラーは解消され、通常の編集画面が表示されるようになりました。

その後、徐々にプラグインを有効化していき、さまざまなパターンを検証した結果、2つのプラグインを有効化すると上記のエラーがでることがわかりました。でもこのプラグインは主力で使っているプラグインでこれが使えないのはかなり厳しい。。。

 

ビジュアルエディタ、HTMLエディタのタブ切り替えができない

このプラグインが原因か?でも何も更新してないのに突然なぜ?と違和感を感じながら、編集可能になったページを編集してみると、ビジュアルエディタ、HTMLエディタのタブ切り替えができないことが発覚。

 

なぜ???となったとき、多すぎるリビジョン数が目に入ってきました。

 

wordpress-fatal-error-revision00

このページは、1ページの内容・データ量も多く、これだけ過去のリビジョンをとっていたら重そうだな、と思い、新規で固定ページを作り(もちろんリビジョンは0)、同じ記事内容をコピペしたところ、ビジュアルエディタ、HTMLエディタのタブ切り替えが問題なくできました。

最後の最後で多すぎるリビジョン数が原因のエラー判明

もしや・・・、と思い、原因と思われた2つのプラグインを有効化すると、リビジョンは0で同じ内容を入れた新規ページは問題なく編集画面を表示できることが確認できました。

結果的に、このFatal errorの原因は、多すぎるリビジョン数と判明しました。

 

対処法-リビジョンを削除する

エラー原因がリビジョン数と特定できたら、対処するのは簡単です。

リビジョンを削除するプラグインを導入する

「wordpress リビジョン削除」と検索すると、様々な対処法がでてきます。

初心者でも簡単かつ安全に対処できるのは、データベースのメンテナンスプラグインを使った方法です。

リビジョンを削除できるプラグイン

いろいろ調べてみると、リビジョンを削除できるプラグインは数種類あります。

どれも高い評価が付いています。

私が使ったのは、Optimize Database after Deleting Revisions です。

選択理由は、

  • 今回はリビジョンを削除するだけなので、シンプルなプラグインで十分
  • リビジョンの削除方法が全削除、何日前以前のを削除、残すリビジョン数を指定など選べる(他のプラグインもできるかも?)

です。

ここでは、私が使ったOptimize Database after Deleting Revisionsについて、簡単に解説したいと思います。

Optimize Database after Deleting Revisionsでリビジョンを削除する手順

①まずサイト全体をバックアップする

万が一、うまく行かなかったときに、後戻りできるように、プラグインUpdraftPlus Backupなどで、サイト全体をバックアップします。

②プラグイン「Optimize Database after Deleting Revisions」の追加&有効化

Optimize-Database-after-Deleting-Revisions-01

③設定する

WordPressの管理画面から、設定 ⇒ データベースの最適化 をクリック。

Optimize-Database-after-Deleting-Revisions-02

初期設定に加えて、残すリビジョンも指定できます。

  • Delete revisions older than:どれくらい古いリビジョンを削除するのか設定
  • Maximum number of – most recent – revisions to keep per post / page :残すリビジョンの最大数

直近のリビジョンを残しておきたい、という方は、上図のように設定してみてください。

設定後、「設定を保存」ボタンをクリックし、隣のボタンの「最適化ページに戻る」をクリック。

④分析(Analyze)&最適化(Optimize)

Optimize-Database-after-Deleting-Revisions-03

「Analyze(summary)」or「Analyze(detail)」ボタンを押すと、分析結果の表示されます(この時点ではまだ削除されていません)。summaryは概要を表示、detailは詳細表示になります。

※「Analyze(detail)」を推奨

「Analyze(summary)」だと、ざっくりとした分析しか表示されません。「Analyze(detail)」は、最適化対象のページと削除数も表示されるため、運営者がどのページに影響するか事前に確認できます。

次に「Optimize(summary)」or「Optimize(detail)」ボタンを押すと、最適化(設定した内容に従ってリビジョンを削除)されます。

Optimize-Database-after-Deleting-Revisions-04

 

⑤確認

最後に、リビジョンの多いページのリビジョン数が設定通りになっているか確認しましょう。

 

再発しないために

上記の流れで、リビジョンは削除できますが、このままでは、ページ更新が増える度にリビジョンがどんどん増えて数年後には再発する可能性もありますので、何らかの対策を推奨します。

このリビジョン数が一定数以上増えないようにする対策は、

  • WordPressのPHPファイルを編集する方法
  • プラグインによる定期的な最適化を設定する

の2パターンあるようです。

WordPressのPHPファイルを編集する方法は、プログラムファイルを直接編集するため、FTPソフトの設定&使用するステップが入り、初心者には少しハードルが高いです。そのため、この方法はここでは紹介しませんが、丁寧に解説された別サイトがありますので、以下に紹介しておきます。

プラグインによる定期的な最適化を設定する方法がとても簡単です。最適化頻度が高い場合は、サーバー負荷の軽減を考慮すると「WordPressのPHPファイルを編集する方法」の方が良いかもしれませんが、月1回程度の頻度で最適化するならプラグインを使うほうが簡単です。

プラグインOptimize Database after Deleting Revisionsには、定期的な最適化をスケジュールする機能が付いており、ここではこの内容を紹介します。

Optimize Database after Deleting Revisionsで定期的な最適化をスケジュールする

Optimize Database after Deleting Revisionsの設定画面を開きます。

Optimize-Database-after-Deleting-Revisions-06

上の赤枠を設定します。

  • ログを保存:実行記録の保存
  • 定期的に実行:「1時間に1回」「1日2回」「1日1回」「週1回」「月1回」から選択
  • 時刻:実行する時刻の指定

よほど大規模で、複数人が運営しているサイト出ない限り、月1回程度で十分と思います。実行する時間帯はWebサイトの閲覧者数が少ない夜中(3時~5時)ぐらいが良いと思います。ログは何かトラブルが起きたときの参考資料となるため、個人的にはチェックを入れるのをおすすめします。

以上の設定により、定期的にリビジョンが最適化され、リビジョンの巨大化を未然に防ぐことができます。

 

こんな状態ならリビジョン多すぎが原因かも?

今回の経験でわかったことを記載してみます。

多すぎるリビジョン数が原因と思われる症状

  • 特定のページの編集画面を開くと、編集画面が表示されるのに数秒かかる(リビジョンが多いと読み込むのに時間がかかる)
  • ビジュアルエディタ、HTMLエディタの切り替えができない(特定のページのみエディタの動作がおかしい)
  • 特定のページの編集画面が開けない(Fatal errorや、画面真っ白になるパターンもあるかも)

WordPressのバージョンアップやプラグインのインストール&更新をしておらず、特定のページだけ上記の症状がでた場合は、リビジョン数が原因かもしれませんので、確認してみてください。

 

こんなページは要注意

WordPressの運営年数が長くなってくると、知らないうちにリビジョン数が増えていきます。WordPressの初期設定では更新分だけリビジョンがたまります。

以下のような更新頻度が高いページは要注意です。

  • スケジュールページ
  • 更新頻度の高い主力ページ

この症状は、エネルギーを注いでいるページに出るため、エラーがでると困ります。

 

最後に

今までに複数のWordPressサイトを作成&運営してきて、様々なエラーに遭遇してきました。自分の設定ミス、プラグインの相性、購入したテンプレートのエラーということもあります。

ただ、今回は突発的で、いきなりエラーだったこともあり、原因究明に至るまで、ちょっと霧の中を歩いている感じがありました。

WordPressが日本で普及するようになって何年も経過していますから、運営歴が長くなり同様のエラーに直面されている方も少なくないかもしれません。

リビジョンの削除方法に関しては、他のサイトも参考になさってください。

この記事が同様の症状に直面している方に届きますように☆

 

コメント

コメントする

twenty − sixteen =

日本語が含まれない投稿は無視されますのでご注意ください。(スパム対策)

目次