どれくらいの人がWordPressのコミュニティーで一般に「WordPress 死の真っ白画面」(WSOD, White Screen of Death)と言われる現象に遭遇しているでしょうか?
今回、筆者がこの「WordPress 死の真っ白画面」との戦いの記録を残しておきたいと思います。
突然訪れる「WordPress 死の真っ白画面」
WordPress Codex やフォーラムなどでは有名な「WordPress 死の真っ白画面」ですが、経験のない人であればなんのことだかさっぱりです。逆に経験のある人からすれば「死の」が指し示す言葉通り、絶望にとらわれるのは間違いありません。なぜなら、それは突然訪れますから。
今回、筆者がこの記事を書くきっかけになったのも突然の真っ白画面で1日を棒に振ったからです。
オープンソースであるWordPressは世界中の有志が日々改善に明け暮れており、非常に良くできているソフトウェアです。しかし、最新の技術を取り入れるが故、不具合もおきてしまうのが事実。不具合はあってもすぐに更新され、最新の環境が常に提供されるのがオープンソースの特徴です。
つまり、更新の頻度が高いのもWordPressの特徴ともいえるでしょう。
皮肉なことに、この更新のタイミングこそ「WordPress 死の真っ白画面」に遭遇するリスクがいちばん高いのです。
なぜ起こる?「WordPress 死の真っ白画面」
では、なぜこの更新のタイミングで「真っ白画面」になるリスクが高いのでしょうか?それを知るために、更新の際に何が行われているか簡単に知っておきましょう。
WordPressで更新が提供されるのは、
- 新技術の導入
- 前のバージョンで確認された不具合の修正
- セキュリティの強化
- プラグイン導入時の不具合や互換性の修正
- テーマ導入時の不具合や互換性の修正
などなど、様々なことがわずか数秒のうちに行われます。
通常のソフトウェアであれば、プログラムだけを新しくすれば良いのですが、WordPressの場合には投稿した記事や画像データ、設定状況などがデータベースに格納されています。データベースはMySQLを使いWordPress本体とは別なところでデータを格納しておくのでWordPressでテーマを変えたり、WordPress自体を入れ替えたりしても、記事や設定が反映されるのはこのためです。
つまり、更新のタイミングはWoroPress本体(PHP)のほかにも、データベースとの連携や必要な情報の更新が同時に行われます。わかりやすく言えば、更新のタイミングはいちばん敏感な部分を書き換えるイメージです。
更新はボタン一つでわずか数秒のうちに行われますが、このわずか数秒の間でWordPressと端末との間やWordPressとサーバーの間、WordPressとデータベースの間、データベースとサーバーの間などで、何かしらの不具合(例えば、通信エラーなど)が起きてしまうと、たちまち「真っ白画面」の餌食になってしまいます。
通信エラーなど起こった場合、必要な情報が「歯抜け」になったり「順序が変わったり」して正確に動作できない環境が出来上がってしまいます。これがPHPエラーやデータベースエラーが発生の原因です。
こうして不運にも「WordPress 死の真っ白画面」と遭遇してしまうのです。
「WordPress 死の真っ白画面」の解決策は?
WordPress Codexに解決方法がまとめられていますが、いちばんの近道は「手動アップグレード」です。まずはこの方法を試してみました。
参考:WordPress Codex日本語版「WordPress の一般的なエラー」
FTPクライアントソフトでサーバーにアクセスし、ダウンロードしていたWordPressのプログラムを上書きする力技です。コミュニティーで提供されている手順は、必要なデータ以外を削除し、新しいデータをアップロードするものです。
削除する/してはいけないファイル一覧:
取り消し線が引かれたディレクトリ・ファイルは削除、それ以外は残します。必要なファイルを削除しないよう注意深く作業してください。
public_html/
(ドキュメントルートディレクトリ)
robots.txt
— 残す.htaccess
注1index.php
注1wordpress ディレクトリ
— 削除 注2
wp-admin/wp-content/
— 削除(2.0.x からアップグレードする場合にのみ存在)
cache/— 削除
languages/plugins/
— 削除(Sidebar Widgets プラグイン用ディレクトリ)[2]
widgets/themes/
(本体同梱デフォルトテーマ)新バージョンに差し替え
default/(本体同梱クラシックテーマ)新バージョンに差し替え
classic/uploads/
— アップロード画像wp-images/
(1.5.x 以前から使っているときにのみ存在)— 直下の
wp-includes/languages/
が不要であればまるごと削除
languages/
(言語ファイルの古い置き場所 [3]) — あえてここに置きたい場合はこれだけ残す。wp-content/languages/
に切り替えてよければ削除(次回のアップグレードからwp-includes/
ごと削除できるようになる).htaccess
— 残す(パーマリンクのカスタムルールを追加してある場合に存在)wp-config.php
— 残す以下全て削除 (注1’)
index.php
license.txt
readme.html
wp-app.php- …
注意:
- 注1 訪問者のアクセスをルートにしたまま WordPress ファイルを専用ディレクトリにまとめている場合、ドキュメントルートディレクトリに
.htaccess
とindex.php
がある。.htaccess
は削除せずに残し、index.php
は新バージョンで複製元ファイル(注1’)に変更があれば作り直す。- 注2 セーフモード対応で
wp-admin/.htaccess
を置いている場合、.htaccess
のみ残し、wp-admin/
下のその他のファイルは削除。- コンテンツ、カスタマイズしたプラグイン・テーマ — 画像等のメディアファイル、ならびに、その他カスタマイズしたコンテンツやプラグイン等が
wp-content
ディレクトリ内にある場合は削除しないこと。- コアファイルのカスタマイズは、新バージョンでも必要かどうかを確認の上、必要であれば新バージョンのファイルを元に作り直してください。
参考:WordPress Codex日本語版「WordPressのアップグレード/詳細」
ほとんどの場合はこれで解決するようです。筆者も丁寧にファイルを削除してみたのですが結果はダメでした。
一体なぜ???
この時注意すべきは「.htaccess」の存在でした。このファイルFTPクライアントソフトによっては初期設定で表示されません。筆者はファイルを削除している際に、この「.htaccess」まで削除してしまったようです。WordPressのテーマを大幅に変更する際にバックアップを取っていた「.htaccess」が残っていたので、「.htaccess」を表示する設定に変更してFTPクライアントソフトを使ってアップロードしました。
あれこれ試してみて数日を要したのがウソのように、めでたくサイトは復活したのです。
今回「死の真っ白画面」解決の決め手は「手動アップグレード」でした。なんだかんだで、手間をかけたほうが確実に問題解決になりますね。若干の注意が必要ではありますが。
ちょっとまって!「.htaccess」ってなに?
サラッと流していましたが、問題解決のキーになった「.htaccess」とは一体何でしょうか?
現在Webサーバーの定番ソフトとなっているApache(アパッチ)を制御するための設定が書き込まれたファイルです。
通常、Apacheの制御は「httpd.conf」という設定ファイルに記載されています。しかし「httpd.conf」はWebサーバー全体の制御を行っているため、サーバー管理者しか変更することができません。一方の「.htaccess」は、各ディレクトリごとに設定することができるので、レンタルサーバーなどで自分専用にWebサーバーの設定を変えたい場合にできるのは「httpd.confファイルの変更」ではなく「.htaccessファイル」を格納することです。
WordPressでは記事などを整理するパーマリンクの生成などで「.htaccess」が必要になります。サイトのテーマを反映させたり、記事をメニューごとに表示させたりするための設定が「.htaccess」に記載されているわけです。
予防策として
バックアップがいちばん!
当たり前ではありますが、バックアップを取ってからアップデートするのがいちばん安全です。今回、運よく「.htaccess」が残っていたのですぐに復活することができたのですが、もしも「.htaccess」のバックアップがなかった場合には、見たこともないスクリプトを延々と…。
…想像するだけで恐ろしいです。
WordPressのアップグレードはわりと頻繁にありますが、重要なデータだけでも定期的にバックアップを取ることが安全かと思われます。
Amazonで確認する |
本格ビジネスサイトを作りながら学ぶ WordPressの教科書 Ver.4.x対応版 |