web-dev-qa-db-ja.com

PHP終了タグ "?>"

PHP終了タグ。このライブラリが含まれていたphp応答には多数の空白行が含まれていました。

23
Ari

これはよく文書化されています。 PHPマニュアル から:

ファイルの最後にあるPHPブロックの終了タグはオプションです。場合によってはinclude()またはrequire()を使用するときに省略しておくと役立つため、不要な空白が発生しません。また、出力バッファリングを使用する場合に便利です。また、含まれているファイルによって生成されるパーツの最後に不要な空白を追加したくない場合にも便利です。

終了タグを省略すると、誤って空白や改行がファイルの末尾に追加されるのを防ぐことができます。

42
Amal Murali

これは、コアPHP機能です。他の言語とは異なり、PHPコードに特別なタグ(通常は<?php)をタグ付けする必要があります。

This is not PHP
<?php

echo 'This is PHP' . PHP_EOL;

?>
This is not PHP either
D:\tmp>php test.php
This is not PHP
This is PHP
This is not PHP either

マニュアル mentions HTML 、PHPは、タグの外側にあるcontent-typeが実際にはわからない/気にしません。

後続のものが続くときにPHPブロックを閉じるのを忘れると、通常は構文エラーになります。

This is not PHP
<?php

echo 'This is PHP' . PHP_EOL;

This is not PHP either
D:\tmp>php test.php
PHP Parse error:  syntax error, unexpected 'is' (T_STRING) in D:\tmp\borrame.php on line 6

空白行は、ほとんどすべての言語(PHP、HTML、CSS、JavaScript ...)で有効でありほとんど見えないため、ある種の特殊なケースです。

?>タグを削除すると、PHPコードの一部になったため、スクリプトの出力からリテラルの空白行が消えました(そのため、無視されます)。

もちろん、空白行はPHPによって無視されますが、必ずしもあなたが生成しているものによって無視されるわけではありません。私が言ったように、HTMLである必要はありません:写真、PDFドキュメント、Excelスプレッドシート。偽の白い線は、ファイルの最後の部分であるときに最後のPHPブロックを閉じないことで簡単に回避できます。

15