バージョンアップしたら画面が真っ白になる問題
公開日 更新日 2014/11/22
本日、WordPress Popular Postsを最新の3.1.0にバージョンアップしたところ画面が真っ白になる問題に直面しました。
困ったことに管理画面も全てが真っ白になっており、プラグインの無効化すら出来ない状況に陥りました。
ようやくサイトを復旧することが出来、きっと今後もこのような問題が起きえるのだろうと思いますので、今回実施した暫定対策についてまとめたいと思います。
Information
本記事にある問題は、3.1.0で起きる問題ですが、直後にリリースされた3.1.1にて対策されました。
Contents
問題点について調べてみました
WordPress Popular Postsのサイトを見ると、Support(サポートフォーラム)があり、また開発用のGitHubが紹介されてましたので、真っ先に事例がないかを調査。
案の定、世界中で同様の症状があるようです。例えばこの辺り・・・
hello, after updating to the last version 3.1.0 my site crashes. it only shows blank pages, nothing works so i manually deleted the wordpress-popular-posts folder from plugins to be able to run the site again. :|
i hope you can fix this.. thanks.
余談になりますが、このとき返信としてWSODというキーワードが出てましたが、これはWhite Screen Of Deathってことで何も操作できない真っ白い画面という意味とのこと。
類似用語に、WindowsのBSOD(Blue Screen…)、VMwareのPSOD(Purple Screen…)などがある模様。
このスレッドの最後でExif拡張モジュールを追加してサーバーをリスタートすれば回復するという返信がありました!
Exif拡張モジュールを使った回復について
スレッドで紹介されていた対策案は以下のコードをphp.iniに追記してサーバーをリスタートという対策です。
1 2 |
extension=php_mbstring.dll extension=php_exif.dll |
上記定義はPHP実行時に拡張モジュールの有効設定であって、php_exif.dll(とその前提?のphp_mbstring.dll)というのが今回問題となっている原因箇所を対策できるモジュールとのこと。
WordPress Popular Posts 3.1.0での修正差分を見ると、wordpress-popular-posts.phpの以下の箇所で@exif_imagetypeを使うように変更されていて、どうもここが怪しいようです。
1 2 3 4 5 |
/* 3.0.3 */ if ( !empty($this->user_settings['tools']['thumbnail']['default']) ) /* 3.1.0 */ if ( !empty($this->user_settings['tools']['thumbnail']['default']) && @exif_imagetype($this->user_settings['tools']['thumbnail']['default']) ) |
ただ、元々のコードでも別箇所にて、既にexif_imagetypeは使ってたけど、問題なかったということは一度も通過しないコードだったということなんでしょうかねぇ…。
しかしながら、どちらにしても残念ながら我がサイトはレンタルサーバーなので、extensionの追加は無理ですよね。
プラグインを古いバージョンに戻す
とりあえず、サイトの回復が最優先なのだから、壊れたプラグインを古いバージョンに戻すことをします。
WordPressを使わないで壊れたプラグインを除去
WordPressが全く使えないので、まず管理画面の回復をします。
これは以下のディレクトリに有るWordPress Popular Postsプラグイン用のディレクトリを退避すればとりあえず表示ができるようになるようです。
1 |
<WordPressインストールディレクトリ> / wp-content / plugins / wordpress-popular-posts |
インストールしたバージョンによってディレクトリが若干違う場合があるかもしれません。
古いバージョンのプラグインをインストール
WordPress管理画面が回復しましたが、WordPress経由で旧バージョンの取得方法がよくわからなかったので、今回はプラグイン作者さんのGitHub経由で入手しました。
以下のようにプラグインの手動登録機能を使い登録。
- WordPress Popular PostsのGitHubよりリリース一覧のなかから、3.1.0の一つ前のリリースである3.0.3に対して「Source code(zip)」を選択してダウンロード。
- 回復させたWordPress管理画面の「プラグイン – 新規追加 – プラグインのアップロード」にてダウンロードしたzipを選択。
ここまででサイトは回復した模様です。
依然としてプラグインのアップデート通知が来てますが、もう少し待ったほうが良さそうですね。
念のため独自対策のやり方も準備
今回問題となっているのは、拡張モジュールで提供されるAPIを使ったこと。
ということは、単純にphpの関数を使って「if (function_exists(‘exif_imagetype’)) {」というように囲ってあげれば回避は可能と思います。
もしWordPress Popular Postsプラグインの作者さんが直さないという結論を出すのでしたら、この辺り自力で対策を考えるしかないのでしょうか・・・。
正式対策版がリリースされました[2014年10月13日追記]
1日経ってWordPress Popular Postsのサイトを見ると、既に対策版として3.1.1がリリースされていた模様です。
ChangeLog
3.1.1
- Adds check for exif extension availability.
- Rolls back check for user’s default thumbnail.
ソース変更点1。単純に3.0.3に戻したという変更のようです。
1 2 3 4 5 6 7 8 |
/* 3.0.3 */ if ( !empty($this->user_settings['tools']['thumbnail']['default']) ) /* 3.1.0 */ if ( !empty($this->user_settings['tools']['thumbnail']['default']) && @exif_imagetype($this->user_settings['tools']['thumbnail']['default']) ) /* 3.1.1 */ if ( !empty($this->user_settings['tools']['thumbnail']['default']) ) |
ソース変更点2。こちらはやはり元々からある問題という認識だったようで、関数チェックが追加されていました。
1 2 3 4 5 6 7 8 9 10 11 |
/* 3.0.3 */ /* 3.1.0 */ $image_type = exif_imagetype( $url ); /* 3.1.1 */ if ( function_exists('exif_imagetype') ) { $image_type = exif_imagetype( $url ); } else { $image_type = getimagesize( $url ); $image_type = ( isset($image_type[2]) ) ? $image_type[2] : NULL; } |
動作上も、大きな問題もなくバージョンアップは完了しました。
良い経験にはなったけど、できればこういうところで躓くのは勘弁したいところです。
変更暦
- 2014年10月12日:初版
- 2014年10月13日:WordPress Popular Posts 3.1.1にて正式対策されました。
レスポンシブ広告
関連記事
関連記事はありませんでした
- PREV
- JUnit速効レシピ
- NEXT
- Web制作者のためのSassの教科書