Теги PHP

Когда PHP обрабатывает файл, он ищет открывающие и закрывающие теги, такие как <?php и ?>, которые указывают PHP, когда начинать и заканчивать обработку кода между ними. Подобный способ обработки позволяет PHP внедряться во все виды различных документов, так как всё, что находится вне пары открывающих и закрывающих тегов, будет проигнорировано парсером PHP.

PHP также допускает короткий открывающий тег <?, однако использовать их нежелательно, так как они доступны только если включены с помощью конфигурационной директивы php.ini short_open_tag, либо если PHP был сконфигурирован с опцией --enable-short-tags .

Если файл содержит только код PHP, предпочтительно опустить закрывающий тег в конце файла. Это помогает избежать добавления случайных символов пробела или перевода строки после закрывающего тега PHP, которые могут послужить причиной нежелательных эффектов, так как PHP начинает выводить данные в буфер при отсутствии намерения у программиста выводить какие-либо данные в этой точке скрипта.

echo "Hello world";

// ... еще код

echo "Последнее выражение";

// Скрипт заканчивается тут без закрывающего тега PHP

Список изменений
Версия Описание
7.0.0 ASP-теги <%, %>, <%=, и теги скриптов <script language="php"> удалены из PHP.
5.4.0 Тег <?= доступен всегда, вне зависимости от настройки short_open_tag.

add a note add a note

User Contributed Notes 6 notes

crazytonyi at gmail dot com
3 years 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.
Mark Clements (kennel17.co.uk)
1 year ago
Closing PHP tags are recognised within single-line comments:

// Code will end here ?> This is output as literal text.

# Same with this method of commenting ?> This is output as literal text.

However they do not have an effect in C-style comments:

/* Code will not end here ?> as closing tags are ignored inside C-style comments. */
pl at dot pl
1 month ago
Omit closing tag ?> always whenever you can

<!DOCTYPE html><head>
<title><?php include'varia.php'; echo$title?></title>

= 'Welcome';
[new line]        //other words: an extra 'Enter' is guilty

and you get:

Welcome - at the browser label

source won't tell you what happened - there will be fine:

<!DOCTYPE html><head>

Now imagine, what else can go wrong because of it? Everything, as Murphy said.
And you will look for the answer why...? And where...?
It's just simplest example.
raoni at gmail dot com
11 months ago
If short_open_tag = Off

<?php/*php not followed by space*/ echo "a"?>
This will not be parsed by php

If short_open_tag = On

<?php/*php not followed by space*/ echo "a"?>
This will be parsed by php, but it throw "Parse error: Syntax error ..." because because 'php' will be assumed as a constant

<?/*? not followed by space*/ echo "a"?>
This will be parsed by php,  and work fine.

(Tested in php 7.1)
dave at juuce dot com
1 year ago
// ///////
// comments

Found that single line comments cause issues and received "notice: use of undefined constant php - assumed 'php'" for line 1 of file.

// //////
// comments

Add a space character after <?php on the first line corrects the problem.
purkrt at gmail dot com
4 years 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.
To Top