先ほど、ふとファイル内に"<?PHP"だけの文字列だけを含むphpスクリプトを実行してみた。
すると、スクリプトの出力に"<?PHP"という文字自体が出力されたので、気になって調べてみた。
(本記事は、諸事情によって"<?PHP"を全角で書いていますが、実際はもちろん半角です)
"<?PHP"の文字が出力されるパターン
下記のスクリプトを実行すると、なんと"<?PHP"自体が出力された。
(下記のファイルは1行のみで行末に改行コードを含んでいない)
<?php
↓下記が実行結果。
$ php test.php
<?php
以下のように先頭に文字列があっても"<?PHP"は出力される。
foobar
<?php
↓
$ php test.php
foobar
<?php
"<?PHP"の文字が出力されないパターン
以下のように、改行を1つ入れると、"<?PHP"の文字は出力されなくなる。
<?php
↓出力結果
$ php test.php
改行なしの1行だけであっても"?>"のスクリプト終了を明示すると、"<?PHP"は出力されない
<?php ?>
以下のように、"<?php"の次にコメントだけがあってコメント行の末尾に改行文字がない時でも、"<?PHP"は出力されない。
<?php
// test
まとめ
というわけで、ファイルの最後の行が"<?PHP"で、そのあとに改行文字が無いphpスクリプトの場合、"<?PHP"の文字はスクリプトの開始記号とみなされないらしい。
こちらもおススメ