В старых примерах для Битрикс часто встречается короткое открытие PHP: <?. Из-за этого легко запутаться: новый фрагмент с <?php работает, а соседний старый код вдруг выводится на странице обычным текстом.
Причина не в Битрикс. PHP распознаёт короткую форму <? только при включённой настройке short_open_tag. Полная форма <?php от неё не зависит.
Что писать в новом коде
Для собственного кода выбирайте полный тег. Он понятен с первого взгляда и не требует особой настройки PHP:
<?php
echo 'Здравствуйте!';
?>
Если нужно только вывести значение, подойдёт короткий тег вывода <?=. Это сокращение для <?php echo; оно работает независимо от short_open_tag начиная с PHP 5.4.
<?php $userName = 'Анна'; ?>
<p>Здравствуйте, <?= htmlspecialchars($userName, ENT_QUOTES | ENT_SUBSTITUTE, 'UTF-8') ?>!</p>
Здесь переменная определена прямо в примере. htmlspecialchars() превращает специальные символы в безопасный текст. Это важно, если имя пришло из формы, профиля или другого внешнего источника.
Почему старый фрагмент не выполняется
В официальном FAQ Битрикс есть старое объяснение: когда short_open_tag=off, код между <? и ?> не обрабатывается. FAQ полезен для понимания симптома, но не стоит воспринимать его как совет включить настройку на любом сервере.
На одном сайте короткие теги могут быть в старом шаблоне, подключаемом модуле или готовом решении. Если выключить их наугад, часть страниц перестанет работать. Если включить их только ради нового кода, проект останется зависимым от настройки сервера.
Безопасный порядок действий
- Не меняйте
short_open_tagсразу. Сначала выясните, где находится проблемный файл и действительно ли там используется<?. - В своём новом файле замените открытие на
<?php. Один такой фрагмент можно проверить на тестовой странице или в копии шаблона. - Перед сменой серверной настройки сделайте резервную копию и найдите короткие теги во всём коде проекта, включая шаблоны и локальные доработки.
- Меняйте настройку только когда все зависимости от короткой формы убраны или вы точно знаете последствия. После этого проверьте главную страницу, каталог, форму и административную часть.
Не путайте <? и <?=. Первый вариант зависит от short_open_tag; второй является отдельным синтаксисом вывода. А запись <?xml — декларация XML. Не заменяйте все совпадения <? автоматически: можно испортить XML или строку внутри программы. При включённых коротких тегах декларацию XML в PHP-шаблоне обычно выводят как строку.
Нужно ли закрывать PHP-тег
В шаблоне, где PHP чередуется с HTML, закрывающий ?> удобен: после него можно писать разметку. Но если файл состоит только из PHP, финальный закрывающий тег обычно не ставят. Так случайный пробел или перенос после него не попадёт в ответ сервера.
<?php
$message = 'Готово';
echo $message;
// Файл заканчивается здесь.
Итог
Для нового кода используйте <?php, а для простого вывода — <?=. Не исправляйте старый сайт глобальным переключением short_open_tag без инвентаризации. Это небольшой выбор в каждом новом файле, который постепенно делает проект переносимее и понятнее.
Проверено 4 октября 2026 года. Источники: документация PHP о тегах; FAQ Битрикс о выводе PHP-кода; обсуждение на форуме.