WordPress での 500 エラー (Internal Server Error)

つい最近だが、このサイトを構成する WordPress をアップグレードした。
すると、それに合わせたかのように当サイトにコメントを投稿しようとしたら 500 エラー (Internal Server Error) になってしまうという報告を受けた。

調べてみるとコメント投稿時に入力するメール アドレスが間違っていると、500 エラーになるらしい。

本サイトは IIS 7.5 を使っているので、500 エラー (Internal Server Error) などいくつかのエラーは IIS のカスタム エラー ページが表示されるようになっている。
そこで、一時的にカスタム エラー ページを止めて確認したところ、「ERROR: please enter a valid email address.」と表示されるようになった。

エラーメッセージからすると、WordPress 自体が出力しているように思える。
つまり、入力されたメール アドレスを WordPress のプログラムが不正を検出して通知している可能性が大だということだ。

裏付けを取るために、WordPress のソース コードをレビューしてみる。
手っ取り早く上記エラー メッセージの文字列で検索をかけると、wp-comments-post.php ファイルの 80 行目付近で見つかった。

wp-comments-post.php

さらに関数 wp_die() がどう定義されているを調べるために、「functions+wp_die」を正規表現を使った検索文字列として検索する。
関数 wp_die() は wp-includesfunctions.php ファイルの 2765 行目付近で見つかる。

wp-includesfunctions.php

今度は関数 _default_wp_die_handler() を探すと、関数 wp_die() と同じ wp-includesfunctions.php ファイルの 2791 行目付近で見つかる。

wp-includesfunctions.php

ここまで見ると、コメント投稿時にメール アドレスの入力を間違えると 500 エラーになるのは WordPress の仕様だということが分かる。

つまり、WordPress を使った Web サイトでコメント投稿時にメール アドレスを間違えたときにきちんとエラー表示されるようにするためには、IIS を使っている場合は IIS の設定で 500 エラーのときにカスタム エラー ページではなく、詳細なエラーを返すようにしなくてはならないということだ。

しかし、よく考えるとここで返される 500 のエラーは HTTP のステータス コード (RFC 2616 を参照、500 のステータス コードは RFC 2616 の 10.5.1 章、ステータス コードの和訳は Wikipedia 日本語版を参照) であり、Web アプリケーションの入力値検証結果に使うのは間違っているのではないだろうか。
これは明らかに WordPress の仕様のバグと言っても過言ではないだろう。

コメントを残す