w3 total cacheでWordPressが500に…復帰

突然(じゃないけど)、このサイトWordPressが500エラーで接続できなくなったので、その際の対処法をメモ

 

ことの始まり

WordPressのテーマを更新したタイミングで、サイトの一部画像が読み込めなくなりました。これは、キャッシュ系のプラグイが悪さをしているのではないかと考え、一度全てのキャッシュ系プラグインを停止してみようと考えました。

そこで、admin画面で怪しげなキャッシュ系プラグインにチェックを入れ、停止すると…停止の処理が途中で止まり、次に接続した際には500エラーとなりました。。。

%e3%82%b9%e3%82%af%e3%83%aa%e3%83%bc%e3%83%b3%e3%82%b7%e3%83%a7%e3%83%83%e3%83%88-2016-09-27-20-43-25

とりあえず、サーバーを再起動したりごにょごにょしていたのですが、結局ダメで詳しく調べて問題を解決しました。

 

環境

  • OS Ubuntu 16.04 LTS
  • サーバ側(nginx+php7.0-fpm)
  • W3 total cache(バージョン見る前に消しちゃいました)

 

 

解決方法

とりあえず原因を探る

500エラーとはサーバー側にエラーがある状態です。それなので、サーバー側のエラーをsshなどで接続して見に行きました。サーバー側のエラーはこんな感じ。

2016/09/27 20:42:11 [error] 2225#2225: *13 FastCGI sent in stderr: "PHP message: PHP Fatal error: Uncaught Error: Call to undefined function wp_cache_get() in /(WordPressルートまでのパス)/wp-includes/option.php:1117
Stack trace:
#0 /(WordPressルートまでのパス)/wp-includes/option.php(1013): get_network_option(0, 'w3tc_state', false)
#1 /(WordPressルートまでのパス)/wp-content/plugins/w3-total-cache/ConfigState.php(67): get_site_option('w3tc_state')
#2 /(WordPressルートまでのパス)/wp-content/plugins/w3-total-cache/Dispatcher.php(53): W3TC\ConfigState->__construct(true)
#3 /(WordPressルートまでのパス)/wp-content/plugins/w3-total-cache/Dispatcher.php(39): W3TC\Dispatcher::config_state_master()
#4 /(WordPressルートまでのパス)/wp-content/plugins/w3-total-cache/ConfigCompiler.php(256): W3TC\Dispatcher::config_state()
#5 /(WordPressルートまでのパス)/wp-content/plugins/w3-total-cache/ConfigCompiler.php(128): W3TC\ConfigCompiler->upgrade(Array)
#6 /(WordPressルートまでのパス)/wp-content/plugins/w3-total-cache/Config.php(370): W3TC\ConfigCompiler->load()
#7 /(WordPressルートまでのパス)/wp-content/plugins/w3-total-cache/Config.php(344): W3TC\Con" while reading response header from upstream, client: (クライアントIP), server: www.takunoko.com, request: "GET / HTTP/1.0", upstream: "fastcgi://unix:/run/php/php7.0-fpm.sock:", host: “www.takunoko.com"

どうやら/(WordPressルートまでのパス)/wp-includes/option.php内のwp_cache_get()関数が無いらしい…。

さらに、w3-total-cache関連が悪さをしているみたいです。

 

w3 total cacheを一時的に停止

悪さをしてるw3 total cacheを一時的に止めてwordpressにアクセスしたいな〜と思っていろいろなサイトを巡った結果、以下の手法でうまくいきました。(基本的に以下のコマンドはルートユーザで行っています。sudo -s )

ファイル名を変更してプラグインを読み込めなくする。

# ディレクトリ名の最後に@をつけてファイル名を変更する。
mv wp-content/plugins/w3-total-cache{,@}
[shell]</pre>
これでとりあえずアクセスできるようになりました。ですが、wordpressのadmin画面の上部に見切れたエラーが…。

<a href="http://www.takunoko.com/wp-content/uploads/2016/09/04fb4d4a00ae7b008327c3521b5f31ec.png"><img class="aligncenter size-full wp-image-2026" src="http://www.takunoko.com/wp-content/uploads/2016/09/04fb4d4a00ae7b008327c3521b5f31ec.png" alt="%e3%82%b9%e3%82%af%e3%83%aa%e3%83%bc%e3%83%b3%e3%82%b7%e3%83%a7%e3%83%83%e3%83%88-2016-09-27-21-43-54_new" width="1189" height="196" /></a>

[エラー内容]
W3 Total Cache Error: some files appear to be missing or out of place. Please re-install plugin or remove  <strong>/(インストールディテクトリまでのパス)/wp-content/db.php</strong> W3 Total Cache Error: some files appear to be missing or out of place. Please re-install plugin or remove <strong>/(インストールディテクトリまでのパス)/wp-content/object-cache.php</strong>

エラーに従ってプラグインに関連するファイルを削除(名前を変更)します。自分はこのような場合は、ファイルを削除してさらに悪化すると元に戻せなくなるので、ファイル名を変更して対応することが多いです。
<pre>[shell]
mv object-cache.php{,@}
mv db.php{,@}

%e3%82%b9%e3%82%af%e3%83%aa%e3%83%bc%e3%83%b3%e3%82%b7%e3%83%a7%e3%83%83%e3%83%88-2016-09-27-21-46-02_new

エラーも消えていい感じです。

 

また、参考サイトにあった通り、(インストールディレクトリ)/wp-config.php を編集してW3 Total Cacheを有効化する処理を削除します。

/** Enable W3 Total Cache Edge Mode */
define('W3TC_EDGE_MODE', true); // Added by W3 Total Cache

[変更後]
// 該当箇所をコメントアウト
// define('W3TC_EDGE_MODE', true); // Added by W3 Total Cache

 

さらに、ログイン後にadminページのプラグインからW3 Total Cacheを削除します。

 

これにて、一通りの削除作業が終了!

ついでに、最初に問題であった一部の画像が読み込まれない問題も解決していました。めでたしめでたし^^

 

まとめ

「サイトが壊れて復旧した」って記事を書くのは、サイトを復旧したあとにその流れをメモっておいて書くことになるので、多少面倒ですね…w

それでも、一度整理して成功した方法をかけるから読みやすくなるのかな…?

 

参考サイト: wpXレンタルサーバーでW3 Total Cacheが500エラーになる問題の解消方法、ピンチから脱出方法! | NETAONE

コメントを残す

メールアドレスが公開されることはありません。 が付いている欄は必須項目です

このサイトはスパムを低減するために Akismet を使っています。コメントデータの処理方法の詳細はこちらをご覧ください