この記事の概要を簡単まとめ!
- WordPress、特に問題がなければ最新版へ
- 6.3から6.3.1にしたとき、管理画面にアクセスできなくなる事態が発生
- WordPress自体の問題、プラグインの干渉を疑いロールバックするも成果なし
- 開発者ツールを使って調べると“load-styles.php”が読み込めていないことが判明
- 解決策はPHPのバージョンを「推奨」となっているものにする
- PHPバージョンは気付きにくい故、ここに備忘録として残した
WordPressは単なる趣味と、社会不適合者としての最後の悪あがきとして始めたものだった。それが長く続いているのは正直驚いている。しかしただ長続きしているというだけで、特段の成果があるわけでもない。知識も蓄積しているが、かといってそれを生かすようなことは一切していないので結局何も変わらないような気がしている。
長く運用していると、不具合の発生とその対処も慣れた手付きで行うことになる。多くの場合WP本体とプラグインのアップデート時に問題が起きやすいもので、とはいえ殆どの場合すぐに修正される。しかし今回は苦戦した不具合でもあった。WPでもプラグインでもない、PHP本体のバージョンに起因する不具合について備忘録として残しておく。
ひとっ飛びできる目次
PHPのバージョンは無闇に上げてはいけない
WordPressとPHP
WordPressの運用とセキュリティ対策
WordPressはオープンソースのブログソフトウェアとして、間違いなく世界一使われているものである。ブログソフトウェアと言いつつCMSとしても使用できる。開発はPHP、データベース管理システムはMySQL(プラグインでSQLiteも可)を利用している。WordPress自体は誰でも使うことができ、Webエンジニアの知識がなくても感覚的に使うことができる。それゆえ、独自ドメインを持ったサイトの殆どがWordPressであることはもはや当たり前のこととなっている。
だが世界一使われているソフトウェアであるというなら、当然それは多くの「人間の姿をした蟲」によって攻撃対象となり得る。その場合の攻撃対象はWordPressであれば何でもいいという考え方であり、WordPress共通の脆弱性、コンピュータ用語としてのエクスプロイト1)exploit: 元の意味は利用する・活用する、偉業・功績であり、コンピュータ用語としては「セキュリティ上の弱点、突破口、脆弱性」である。ハッカー世界ではリスクを冒してセキュリティを突破する行為を英雄的な功績や冒険譚に見立てたことで、この言葉と意味になっている。また、ゲームにおいてはバグ技・裏技もエクスプロイトと言うが、セキュリティの脆弱性とは性質が異なるものでもある。参照:英語「exploit」の意味・使い方・読み方 | Weblio英和辞書を中心に攻撃を行う。これに対して何も対策していなければ、数日のうちにそのサイトは破壊され、攻撃のための踏み台とされるであろう。したがって、これらに対するセキュリティ対策が必要であり、やらないことは即ち死である。
だがセキュリティ対策といっても、それは往々にして専門的知識を要求されるものである。設定は殆どがサーバーレベルのもので、これは数時間勉強したところで簡単に身に付くようなものではない。だがWordPressはプラグインを利用することができ、当然セキュリティ対策のプラグインを入れることも可能である。これによりソフトウェア的にセキュリティ対策を行うことができ、知識がなくても、あるいは時間がなくてもセキュリティを向上することが可能になっている。
WordPressは最新バージョンを使う
だが最もすべきことは、WordPressのバージョンを常に最新に保っておくことだ。大元のソフトウェアも古いバージョンにはセキュリティリスクを伴うものが存在し、ハッカーはそこも見ている。かといって最新のバージョンも低確率で致命的なエクスプロイトを有していることもあるので、更新情報は常に確認する必要がある。とはいえその場合は緊急でアップデートが配信されることも多いので、極端に心配することもない。
現行のWordPressは執筆時点で6.3.1が最新となっており、安定しているのは6.2.x系列と6.3である。このあたりのセキュリティは問題ないため、そのまま使い続けていてもしばらくは大丈夫である。とはいえ日を追うごとに突破される可能性もあるので、自身のコンテンツで使用しているテーマとプラグインの互換性と相談して問題がないなら、アップデートしておくのが正解である。
6.3.1にしたときの異常
2019年9月からWordPressを動かしていることもあり、初めてWordPressを起動してから幾度と更新し、様々なプラグインをインストールまたはアンインストールを繰り返した。そのために様々なファイルないしディレクトリが混在している状態になっている。だが基本的に不要なファイルは自動で削除され、プラグイン同士の干渉については先駆者により情報提供されているので対策は立てやすい。そのためこれまで「運営停止」に陥るような事態はあまり起きていない。
だが6.3.1にアップデートするとおかしくなった。過去にアップデートするとおかしくなることはあったものの、それはすぐに解決できるものであった。だが今回のアップデートは管理画面にアクセスしようとすると4分くらい読み込み中の状態になり、4分経過するとついに諦めて読み込まれるが、その場合レイアウトが完全に崩れた状態で読み込まれるのである。文字だけが表示され、アイコンも1つのやつが複数表示されるというバグにも近い状態になった。
当初はWordPressやプラグインのアップデートに伴う干渉や不具合によるものと考えて差し戻しを行ったが、直ったのは一時的なものでしかなかった。少し時間が経つと同じ現象が起き、解決に至らなかった。そんな中解決策を探したときに見つけたのが、PHPのバージョンであった。これが悪さをしているという可能性にたどり着いたので、検証することにした。
管理画面崩壊事件:事の発端から解決まで
事の発端:6.3から6.3.1へ、プラグインも問題なし
まずは事の発端を確認する。これが起きた理由の主原因がWordPressを6.3から6.3.1に上げたことである。実はその前に6.3.1へのアップデートに伴い、各種プラグインのアップデートも行った。この時点ではまだ管理画面が異常にならなかった。その後6.3.1になった途端に異常が発生したので、まず疑うべきはそれであり、その次にアップデートしたプラグインを疑った。
だが両者とも何ら異常はなかった。その際直前にアップデートしたプラグインは以下の通りである。
この中で最も干渉が起きやすいのがAIOSEO, JetPack, Google関係だが、これらは以前から対策済みということもあって何も問題がなかった。というのも、FTPで名前変更を行って停止状態にしても改善しなかったからで、これは他のプラグインに対して実行しても同じであった。全て停止状態にしても読み込まれない状態は変わらなかったため、視点を変えることにした。
開発者モードで見つけた「読み込みが遅い」ファイル
全てのブラウザは開発者モードを持つ。F12で開けることが共通しているこれを利用して異常を探すことにした。これまでの動きから、何らかのファイルが読み込まれないことによって今回の異常が引き起こされているものと仮定し、開発者ツールから”Network”タブを開き、その状態で管理画面のいずれかをリロードして読み込まれているファイルを監視することにした。
すると1つだけ、妙に読み込みが長すぎるファイルを見つけることができた。それが”load-styles.php“である。残念ながら読み込みエラー時のスクリーンショットは対応中は書く予定がなかったので撮ってないが、正常な場合のものは撮っている。その参考資料が以下である。
これはwp-admin下のファイルであり、エディタ側で自動的に読み込まれる最初のCSSである。管理画面全体のCSSを定義しているものなので、これが読み込まれないということは管理画面の成形が行えないことと同義である。実際にエラーが起きていた時は読み込みにかかった時間は4分以上で、4分以上を超えたときにはタイムアウト扱いになったのであろう、文字だけが表示されたのである。いつまでもページを表示できない原因は、これにあったことをようやく突き止めることが出来た。
PHPのバージョンが原因、バージョンを変更すると解決
原因となるファイルで検索をかけたところ、多数の情報がヒットした。その中でも目を引くのが、開発者ツールで確認すると“load-styles.php”に対して503エラーが返されているという情報であった。私の場合も503エラーを吐いており、このせいで異常が発生していたことが分かった。しかし同時多発的なアクセスはないので、503エラーが発生する理由が不明である。そこでさらに調べるともっと根本的な原因が判明した。
PHPのバージョンが悪さをしているということだった。参考にした情報によれば、この人物もエックスサーバーを利用しており、元々使用していたのは 8.0.25である。これを推奨ではない8.2.5, 8.1.12とエックスサーバーの推奨する1つ下の7.4.33に変更して503が解消され、最終的に7.4.33にすることで安定したという。この情報に従い、私もエックスサーバーであるのでログインし、PHPのバージョンを確認した。
すると私が使用していたのが8.1.12であることが判明した。そこで1つ下で推奨バージョンの8.0.25にしたことで、503エラーは解消し、正常に運用できるようになった。このことから8.0.25で不整合となる問題が発生したと言えるが、しかしこのことについては情報元のサイトによれば、そのバージョンに問題があるとは思えないとのことである。そのバージョンでのキャッシュがたまたまおかしくなっており、バージョンを変えたことでそのキャッシュが解除されて直ったということではないかと推測している。実際のところは不明だが、”load-styles.php”に対して503エラー等の問題が発生したときは、この方法で修正できる。その後は契約しているサーバーの推奨PHPバージョンを使っていくのが安全であるので、それに設定しておけば問題ないはずである。
PHPバージョンは気付きにくい故、ここに備忘録として残した
以上で今回の解説を終了する。これまで度々アップデートを起因とする問題に対処してきたが、今回のPHPのバージョンに起因するものは正直、その原因を掴みにくかった。発生したタイミングがWordPress本体とプラグインのアップデート直後だったことが、復旧対応時にミスマッチを引き起こしたと言える。普通そのような状態になれば、真っ先に疑うのはそれだからである。
だがこのエラーは通常、滅多に起こりうるものではない。そのために対処及び対策方法が分からなくとも無理がない話である。PHPのバージョンも一度設定したら、推奨バージョンが更新されない限りは全く触らなくなるところである。更新通知があってやっとその存在に気付くということも少なくない話だ。WordPressはPHPで書かれているのに、PHPのバージョンに追従しないというのは不思議さを感じるが、保守性の観点からそのようになっていると推測している。
WordPressにおけるエラー対応はWordPressを運営している以上は誰でも避けて通れない道である。しかしそのエラー対応のマニュアルというのは発生するエラー内容により異なり、あるいは殆ど発生しないようなレアケースのエラーもまれに起こるため、マニュアルはあってないようなものである。だが少ないながらも根気よく探せば誰かがその情報を残していることもある。私の経験がそうなることを考え、ここに備忘録として残した。同じ現象に見舞われた誰かのためになることを祈って。
以上、WP備忘録:load-styles.php読み込みエラーの対策、であった。エラー対応は冷静になることと、情報を根気よく探すことで解決する。
KIBEKIN at 00:00 Sept. 19th, 2023
スポンサーリンク
脚注
本文へ1 | exploit: 元の意味は利用する・活用する、偉業・功績であり、コンピュータ用語としては「セキュリティ上の弱点、突破口、脆弱性」である。ハッカー世界ではリスクを冒してセキュリティを突破する行為を英雄的な功績や冒険譚に見立てたことで、この言葉と意味になっている。また、ゲームにおいてはバグ技・裏技もエクスプロイトと言うが、セキュリティの脆弱性とは性質が異なるものでもある。参照:英語「exploit」の意味・使い方・読み方 | Weblio英和辞書 |
---|