PHPの閉じタグは書いてはいけない

PHPをはじめるとき、まず学ぶのがPHPは『 <?php 』で始まり、『 ?> 』で終わるというのを教わると思います。

<?php
  phpinfo();
?>

しかしHTMLの中に埋め込むPHPなら、これは正しいのですがPHPのみのファイルの場合、閉じタグの『 ?> 』は書く必要がありません。
というよりもPHPの閉じタグは書いてはいけません。

例えば次のような場合

ファイル名 config.php

<?php

………
……
………

?>

ファイル名 hoge.php

<?php

require('config.php');

header('Content-Type: text/html; charset=Shift_JIS');

………
……
………

?>

このような処理があった場合、config.phpファイルの最後に改行があったら、、

Warning: Cannot modify header information - headers already sent

ヘッダーはすでに出力されてるというエラーが出ます。

というのもHTTPアクセスをするときのレスポンスは次のようになります。

HTTP/1.x 200 OK
Date: Sat, 11 Jul 2009 16:07:41 GMT
Server: Apache/2.0.53 (Unix)
Accept-Ranges: bytes
Content-Length: 6
Keep-Alive: timeout=15, max=1000
Connection: Keep-Alive
Content-Type: text/html; charset=shift_jis
Content-Language: ja

テスト

このようにヘッダーは必ず内容の前に出力されるため、内容が出力がされたあとにはヘッダーは出力できません。

閉じタグのあとに改行があったときには、どのファイルに改行があるのか探すのは大変です。
このためPHPの閉じタグは書いてはいけないのです。

開始タグ『 <?php 』はPHPの設定によって『 <? 』でも動作します。

しかし互換性や『 <?xml 』の記載されてるコードの誤動作なども考えて、『 <?php 』を使うようにしましょう。

ちなみにphp.iniの設定で

short_open_tag = Off

と書くと『 <?php 』のみ

short_open_tag = On

と書くと『 <?php 』と『 <? 』が開始タグとして認識されます。

関連記事

スポンサーリンク

Raspberry Piの選び方・用途別のおすすめモデル

ホームページ製作・web系アプリ系の製作案件募集中です。

上に戻る