Активация сокращенных открывающих тегов в настройках PHP

Раздел: администрирование PHP -> настройка конфигурации PHP

Варианты включения коротких тегов PHP

Как постоянно активировать короткие теги через основной файл конфигурации?

Наиболее надёжный способ - изменить директиву short_open_tag в файле php.ini. Этот файл централизованно управляет поведением PHP на сервере.

Шаги:

  1. Определите расположение php.ini. Выполните команду php --ini в терминале или создайте скрипт с вызовом phpinfo() и найдите строку "Loaded Configuration File".
  2. Откройте php.ini в текстовом редакторе с правами администратора (например, sudo nano /etc/php/8.1/cli/php.ini).
  3. Найдите строку short_open_tag = Off (или = On) и измените её на short_open_tag = On.
  4. Сохраните файл и перезапустите веб-сервер (например, sudo systemctl restart apache2 или sudo systemctl restart php8.1-fpm).

; php.ini
short_open_tag = On
  

Short open tags php (включение коротких тегов php)

Проблема: после изменения php.ini короткие теги не работают. Возможные ошибки:

  • Не перезапущен веб-сервер или PHP-FPM - изменения вступают в силу только после перезагрузки.
  • Редактируется не тот php.ini (например, для CLI, а не для Apache). Проверьте через phpinfo() значение Configuration File (php.ini) Path.
  • Директива может быть переопределена в конфигурации пула или .htaccess - проверьте наличие других установок.

Как включить короткие теги через .htaccess, если нет доступа к php.ini?

Если вы используете Apache с модулем mod_php или FastCGI, а у хоста разрешено переопределение директив (AllowOverride All), можно активировать short_open_tag через файл .htaccess в корне сайта.


# .htaccess
php_value short_open_tag On
  

Php размер загружаемого файла (настройка максимального размера загружаемого файла в php)

Важно: директива php_value сработает только в режиме mod_php или при поддержке PHP-FPM через ProxyPass (зависит от настройки сервера). Проверьте, что модуль mod_rewrite и AllowOverride не запрещены.

Типичная ошибка: "500 Internal Server Error" при неправильном синтаксисе или отсутствии прав на override. Убедитесь, что в конфигурации Apache есть AllowOverride All для вашей директории. Также проверьте, что директива не конфликтует с настройками в Directory.

Как настроить short_open_tag для отдельного пула PHP-FPM?

На серверах с Nginx и PHP-FPM удобно задать директиву в конфигурации пула (например, /etc/php/8.1/fpm/pool.d/www.conf).


; www.conf
php_value[short_open_tag] = On
  

Php файл конфигурации (файл конфигурации php (php.ini, config.php))

После изменения перезапустите PHP-FPM: sudo systemctl restart php8.1-fpm. Эти настройки применяются только к запросам, обработанным данным пулом, и не влияют на другие сайты.

Ошибка: "Unrecognized directive" при неверном формате. Используйте именно запись php_value[short_open_tag] = On (с квадратными скобками). Если в той же секции используются другие php_value, убедитесь в совместимости версий.

Можно ли включить короткие теги из самого скрипта?

Нет, директива short_open_tag имеет режим PHP_INI_PERDIR - её можно установить только в php.ini, .htaccess, конфигурации веб-сервера или файле .user.ini, но не через ini_set() в коде. Попытка вызова ini_set('short_open_tag', 'On'); не даст эффекта и может вызвать ошибку уровня E_WARNING.


<?php
ini_set('short_open_tag', 'On'); // Не сработает
echo "Тег открыт? ".ini_get('short_open_tag');
?>
  

Php memory limit (лимит памяти в php)

Warning: ini_set(): Use of ini_set() for short_open_tag is not allowed in /path/file.php on line 2
Тег открыт? 0
  

Использование ini_set() для short_open_tag - распространённая ошибка. Единственный легальный способ - изменить конфигурационный файл до запуска скрипта.

Как временно включить короткие теги для скрипта в командной строке?

Для разовых запусков из CLI можно использовать опцию -d при вызове PHP:


php -d short_open_tag=On myscript.php
  

Это переопределяет значение для одного вызова. Удобно для тестирования, но не влияет на веб-окружение.

Если нужно постоянно использовать короткие теги в CLI - меняйте соответствующий php.ini для CLI (обычно /etc/php/8.1/cli/php.ini).

Ниже приведены расширенные примеры использования коротких тегов и особенности их работы.

Пример 1: Вывод переменной с помощью <?=

Короткий тег <?= - это сокращение для <?php echo. Он особенно удобен в шаблонах.

Пример

<?php
$name = 'Мир';
?>
<p>Привет, <?= $name ?>!</p>
<p>Привет, Мир!</p>

Пример 2: Использование <? вместо <?

Если включены короткие теги, можно писать <? ... ?> вместо <?php ... ?>. Однако это не рекомендуется из-за конфликта с XML.

Пример

<? 
$num = 42;
echo "Число: $num";
?>
Число: 42

Пример 3: Вложенные короткие теги в HTML

Пример

<ul>
<?php
$items = ['яблоко', 'банан', 'вишня'];
foreach ($items as $item): ?>
    <li><?= $item ?></li>
<?php endforeach; ?>
</ul>
<ul>
    <li>яблоко</li>
    <li>банан</li>
    <li>вишня</li>
</ul>

Пример 4: Ошибка синтаксиса при выключенных коротких тегах

Если short_open_tag выключен, интерпретатор воспринимает <? как обычный текст и выдаёт синтаксическую ошибку при последующем коде.

Пример

<? 
echo 'Это вызовет ошибку';
?>
PHP Parse error:  syntax error, unexpected 'echo' (T_ECHO) in /path/file.php on line 2

Пример 5: Комбинирование коротких тегов с условными конструкциями

Пример

<?php
$show = true;
?>
<? if ($show): ?>
    <p>Отображается</p>
<? endif; ?>
    <p>Отображается</p>

Пример 6: Проверка состояния short_open_tag через phpinfo()

Создайте файл info.php:

Пример

<?php phpinfo(); ?>

Затем найдите строку short_open_tag в разделе Core. Значение On означает, что короткие теги активны.

Пример 7: Использование short_open_tag в командной строке с несколькими флагами

Пример

php -d short_open_tag=On -r 'echo "Короткий тег: ".(1+2);'
Короткий тег: 3

включение коротких тегов PHP - comments

En
Short open tags php (php)