WordPress2.8のwp-configにphp終了タグが無い理由

WordPress 2.8以降のwp-config.phpから、php終了タグ"?>"が無くなっている事に気づきました。確認したところ、2.7.1まではしっかりと、"<?php"で始まり"?>"で閉じられています。アップデートの際にうっかり消してしまったのでしょうか?真相を探ってみました。

灯台下暗し、ググるより先にWordPress本家を調べてみます。私と同じく疑問に思い問題提起した人が既に存在しました。しかし、提案は否決されています。

Ticket #10106 wp-config-sample.php missing closing PHP tag (WordPress Trac)

This is a feature, not a bug.

First, closing PHP tags are optional.

More importantly, since this is a user-edited file, it's highly likely that someone's text editor will add a line break after the closing tag, causing error messages that aren't immediately traceable. Leaving off the closing tag avoids that headache.

これはバグではなく仕様です。

第一、PHP終了タグは任意です。

更に重要なことに、これはユーザ編集用ファイルなので、テキストエディタが終了タグの後に改行コードを付加してしまう可能性が非常に高いのです。そのため、すぐに特定出来ないエラーメッセージの原因になります。終了タグを省略すれば、その頭痛の種を取り除く事が出来ます。

結果としては仕様だそうです。つまり、ユーザが編集するファイルに終了タグがあるとバグの温床になりかねないため、あえて取り除いたと言うことです。

それでは本当にPHPは終了タグを書かなくてもいいのでしょうか?PHP本家のマニュアルには次のように記されています。

PHP: 命令の分離 (php.net)

ファイル終端における PHP ブロックの終了タグはオプション(任意)です。 include() や require() を利用する際には、 終了タグを省略する方が無難です。というのは、そうすることでファイルの最後に 予期せぬ空白文字があらわれてしまうことを防げますし、後でレスポンスに ヘッダを付加することも可能となるからです。また、出力バッファリングを 使用しており、include したファイルの生成する部分の最後に余計な空白を つけたくない場合などにも便利です。

まさに今回のWordPressの問題と同じ事が書かれています。PHP本家公認です。

よくよく考えてみれば、PHPの開始タグと終了タグは、コードの始まりと終わりを明示しているだけに過ぎません。突き詰めていくと、終了タグを書かなければいけない状況は只ひとつ。HTML内にPHPコードを埋め込む時だけです。終了タグがあろうと無かろうと、最初から神経質に気にする必要は無かったのかもしれません。「タグを閉じないと気持ち悪い」、「タグが無いとファイル終端かどうか確認出来ない」と言う私のような考えの方だけ、以前のように、そっと終了タグを付け足しておきましょう。

Share