WordPress “has_cap” の警告による問題が

社内向けの報告がてらWordPress障害の原因を書き込んでおこう。
これは他の案件でも同じ障害になる可能性があるので「注意」ですな。

WordPressダッシュボード「固定ページ」が突然エラーになった

この原因はまだ断定できていないが、wp-admin/includes/meta-boxes.php のコードが書き換わってしまった。「固定ページ」の編集や新規追加でエラー終了になってしまい、PHPのエラー出力ではこのコードがNGとDisplay表示してくれていたのだが、 このコードを変更した覚えがない。
このファイル自身、日付等確認したところ変更されていないので、別の要因だと考えてアレコレ調べまくり、かなりはまりました。
wp-admin/includes/meta-boxes.php“0″が付加さてていたわけですが、ファイルスタンプの更新もなく、未だに原因は不明ですが、この「固定ページ」エラーは解決しました。

さてここからが問題が展開。

WP_DEBUG で Notice が連発

上記のエラーを調査するので WP_DEBUG を tureに、「Debug Bar」プラグインで調査をはじめたら、 “Notice: Undefined index” が連発するではありませんか。前日にもテーマを修正加工する時に WP_DEBUGture していたのですが、その時はまったく表示がなっかったのでビックリしたわ。

ここからはハマリのパターンで、コード全般のスタンプチェックやらDIFFやらDBやらいろいろ調べましたが、結果はわからず、昨夜は退社。

“Notice: has_cap” エラー表示箇所で混乱!

本日あらためてコードのチェック。
今回の警告  “Notice: Undefined index” は 配列のKeyが無い状態で代入することを警告してくれているわけです。PHPでは動作しますが、ここは手をかけて各コード修正していきました。

そこで今までと違う Notice を発見。(あまりにも多かったので気づいてなかった)
Notice: has_cap の使用はバージョン 2.0 から非推奨になりました ! 代わりに プラグインやテーマでのユーザーレベルの使用は推奨されていません。代わりに権限グループと権限を使ってください。 を使ってください。

functions.php がエラー箇所となっているのだが、これは表示される“functions.php”にエラーはない。警告メッセージを出しているコード行が原因として表示されるので、これまたハマリ。

と思いきや、ここからは解決の一途でした。

Notice の問題は ログファイル、でもなぜ?

“Notice: has_cap” の警告で 「プラグイン・テーマが使用….」となっているので、一旦すべてのプラグインを停止。Category Order プラグイン で警告が消えたので、これが原因だと判明。こちらの対処は後日するとして、本題の“Notice: Undefined index”をチェック続行。

しかし解決していないので、WP_DEBUG_LOG の出力先をチェック。error_log 出力先が指定されていないので、apache ログファイルを確認。

ログファイル(access_log, error_log)が空なので、ls コマンドで確認してみたら、ログファイル ローテーション後はすべて0バイトでした。そこで調べてみると「現在のアクセスログ,エラーログ」は 昨日分ファイルに追記されていました。apacheを再起動、新規ログファイルが動作すると、そこに Notice が書込みされ、画面には表示されなくなりました。

なるほど、これが原因だと断定。
ではなぜログファイルの書込みができなかったのでしょうか?

昨日のエラーログファイルをあらためてチェックしていると、“Notice: Undefined index” はここに書き込まれていました。さらに昨日の障害発生時刻 から has_cap の エラー文字が埋め尽くされていました。この has_cap エラー文字がとても長く1件に付き 1.3KB あり、これが ログの障害になっていたようです。

問題は解決! 「メモしておこう」っと

あらためて WordPress DEBUG の押さえ所を

wp-config.php

define(‘SAVEQUERIES’, true);
define(‘WP_DEBUG’, true);
define(‘WP_DEBUG_LOG’, true);
define(‘WP_DEBUG_DISPLAY’, false);

access_log, error_logをチェック

それから、Debug BarDebug Bar Console で チェック
できる限り“Notice” は修正できるのがいいですね。

 

今回は問題が解決したといえ、配列警告の箇所は、すべて修正することにしています。

追記: has_cap の プラグイン・テーマ警告について

has_cap の 原因を持ったブラグインを調べるにあたって、複数のプラグインを一挙に導入してしまった場合、追求するのは大変かもしれない。そこでプラグイン導入初期は、WP_DEBUG でログをチェックする方がいいだろう。

ちなみに has_cap は、プラグインで“add_options_page()” という関数を使っていて、その 3 番目の引数は role を指定するのだが、これを数字で指定するとこの警告が出るとのこと。 おそらくは“8”になっていると思われるが、プラグインは基本的に admin がつかうので、これを“’admin’”に置き換えてやることによって、この警告を出さなくすることができるそうです。

 

関連したページ

nexia access map
x