ConFoo Vancouver & Montreal

PHP タグ

PHP はファイルを解析して開始タグと終了タグ (<?php?>) を探します。 タグが見つかると、PHP はコードの実行を開始したり終了したりします。 このような仕組みにより、PHP を他のあらゆる形式のドキュメント中に 埋め込むことができるのです。つまり、開始タグと終了タグで囲まれている 箇所以外のすべての部分は、PHP パーサに無視されます。

PHP では、短い形式の開始タグ <? も使えます (しかしこれはおすすめしません。というのも、この形式のタグは php.inishort_open_tag を有効にするか --enable-short-tags オプションつきで PHP を configure した場合でないと使えないからです)。

ファイル全体が純粋な PHP コードである場合は、ファイルの最後の終了タグは省略するのがおすすめです。 終了タグの後に余分な空白や改行があると、予期せぬ挙動を引き起こす場合があるからです。 余分な空白や改行のせいで PHP が出力バッファリングを開始し、その時点の内容を意図せず出力してしまうことになります。

echo "みなさん、こんにちは";

// ... いろんなコードたち

echo "最後のごあいさつ";

// PHP 終了タグを書かずに、ここでスクリプトを終わります。

バージョン 説明
7.0.0 ASP タグ (<%, %>, <%=) や script タグ (<script language="php">) が PHP から削除されました。
5.4.0 short_open_tag の設定にかかわらず、<?= は常に使えるようになりました。

add a note add a note

User Contributed Notes 5 notes

purkrt at gmail dot com
1 year ago
I would like to stress out that the opening tag is "<?php[whitespace]", not just "<?php". While this might seem blatantly obvious, I thought for some time that

<?php/*blah*/ echo "a"?>

would work, and it does not; the comment does not work as whitespace. I've run into this while converting some older code with short open tag.
crazytonyi at gmail dot com
8 months ago
Regarding earlier note by @purkrt :

> I would like to stress out that the opening tag is "<?php[whitespace]", not just "<?php"

This is absolutely correct, but the wording may confuse some developers less familiar with the extent of the term "[whitespace]".

Whitespace, in this context, would be any character that generated vertical or horizontal space, including tabs ( \t ), newlines ( \n ), and carriage returns ( \r ), as well as a space character ( \s ). So reusing purkrt's example:

<?php/*blah*/ echo "a"?>

would not work, as mentioned, but :

<?php /*php followed by space*/ echo "a"?>

will work, as well as :

/*php followed by end-of-line*/ echo "a"?>

and :

<?php    /*php followed by tab*/ echo "a"?>

I just wanted to clarify this to prevent anyone from misreading purkrt's note to mean that a the opening tag --even when being on its own line--required a space ( \s ) character. The following would work but is not at all necessary or how the earlier comment should be interpreted :

/*php followed by a space and end-of-line*/ echo "a"?>

The end-of-line character is whitespace, so it is all that you would need.
jcastromail at yahoo dot es
9 months ago
Its important:

this code (for web)
    <? echo "am;" ?>

Generates the next result:
instead of
The last tag "?>" deletes the end of the line.

However, if we changed the line
    <? echo "am"; ?>
    <? echo "am"; ?>.  (or  a space)
then the result is :
1 year ago
A few related notes, partly covered elsewhere in the manual:

  → Since PHP 5.4 the inline echo <?= ?> short tags are always
    enabled regardless of the short_open_tag (php.ini) setting.

  → PHP tags are infrequently also referred to as open/close "tokens"
    (as per the tokenizers T_OPEN_TAG / _ECHO, and T_CLOSE_TAG naming).

  → The historic ASP-style <% %> and even more rarely used
    <script language=PHP></script> tags are to be repealed in PHP7.

There also exists a small tool called "phptags tidier" for consistently rewriting PHP short/long tags.  It's suitable to normalize include and template scripts, e.g. employ the always-enabled long <?php ?> tags, and/or relieve whitespace padding before/after PHP tags:

    phptags --long --whitespace --warn  *.php

Instead of reliably fixing the common whitespace/BOM issues around tags, it can also just remove all ?> close tags with `--unclose --tokenizer` as advised afore.
alexander dot podgorny at somewhere dot com
2 years ago
One reason to use long tags over short is to avoid confusion with <?xml ?> notation.
To Top