PHPの閉じタグはもう書かない!
久々にそんな風に思わされる出来事があったので、色んな所でかかれていますが私も書いておく。
もう、不要な閉じタグは片っ端から消していくぞ!!
そもそも閉じタグとは
PHPの閉じタグとはPHP初心者は必ず最後にはこれを書きましょうと習いますね。
<?php
phpinfo();
?>←これです
なぜ書いてはいけないのか?
例えば、画面に直接出力させるようなこういう時の閉じタグは書かなければダメです。
<html>
〜略〜
<h1>タイトルです</h1>
<?php
echo 'hogehoge';
?>
<div>
〜略〜
</html>
PHPの終了が分からなくなってしまうので。
でも、PHPのみのソースであれば書かなくてもOKです。
最近はフレームワークを使う事が多いので、画面表示と動作のソースファイルは分かれているのがほとんどではないでしょうか。
<?php
public class hogeObject(){
〜略〜
}
?>←これはいらない
Zendでもコーディング規約で「閉じタグはつけないようにしましょう」となっていますね。
理由は
ファイルの最後にある空白文字が出力に影響するのを防ぐ
ため。
閉じタグ後に空白文字や改行があると出力されてしまうんですね。(改行の場合は2行以上あると出力です!)
空白文字や改行が与える影響
画面の表示がちょっとおかしくなる…ということもあると思いますが、一番の影響はリダイレクト!!リダイレクトに使うheader()は、先に出力があると動きません。
もうお分かりかと思いますが、この閉じタグ後の改行のせいでリダイレクトせず、システムが動かないということがありました。
リダイレクトできないのだから先に何か出力があるのだろうということは容易に想像ができたのですが、
どこを探しても出力してるファイルが無い!!
出力に関係しているファイルは閉じタグ後に余計なものは書かれていないのに…なぜ!?
まさかお前のせいだとは…
物によりますがフレームワークでは色んなファイルを読み込ませていますね。私の作業していたシステムでは、開発用のローカルDBの設定ファイルを別に作って読み込ませていました。
貰ったファイルはテスト用サーバーのものだったので、ローカルDBの設定ファイルは読み込めないように名称が変えてあったんですね。
それで設定ファイルの名前を元に戻してシステムに読み込ませるようにして作業をしていたのですが、
このようなファイルがあることをすっかり忘れている私…
それまでリダイレクトが出来なくても開発には影響がなかったので無視していたのですが、さすがに無視出来ない作業が発生しまして。
どうにかして動かそうと、フレームワークのコアの部分まで動きを追って見つけましたよ!設定ファイル後の余計な改行を!!
このヤロウ…と一瞬作った人を恨みましたが、きちんと確認して閉じタグを消さなかった私も悪いのです…。
なので、今後の人のためにも不要な改行はなくしていこうと決意した瞬間でした。