Условные выражения

Влад Мержевич

Сами переменные окружения редко применяются для их вывода на страницу. Гораздо полезнее сравнивать их с некоторым значением и в зависимости от этого сравнения принимать решение о выводе текста. Такое сравнение называется условным выражением и встречается практически во всех языках программирования. Условные выражения есть и в SSI, в общем виде они записываются так.

<!--#if expr="условие1"-->
  Если условие1 истинно, то будет выводиться этот текст.
<!--#elif expr="условие2"-->
  Если условие1 ложно, а условие2 истинно, тогда вместо первого текста выводится этот.
<!--#else-->
  Данный текст выводится, если условие1 и условие2 оба ложны.
<!--#endif-->

Не обязательно использовать эту конструкцию целиком, вполне можно вставлять её частично, например так.

<!--#if expr="условие1" -->
  Если условие1 истинно, что-нибудь вывести.
<!--#endif -->

В этом случае если условие выполняется, то будет выводиться текст или код внутри <!--#if--> и <!--#endif-->, в противном случае, т. е. когда условие1 ложно, то конструкция пропускается и текст не отображается.

В табл. 1 перечислены возможные выражения, которые возвращают истину при соблюдении описанных условий.

Табл. 1. Условные выражения
Условие Описание
str Строка str не пустая.
!str Строка str пустая.
str1=str2 Значение str1 равно str2.
str1!=str2 Значение str1 НЕ равно str2.
str1<str2 Значение str1 меньше str2.
str1<=str2 Значение str1 меньше или равно str2.
str1>str2 Значение str1 больше str2.
str1>=str2 Значение str1 больше или равно str2.
str1 && str2 Строка str1 И строка str2 не пустые.
str1 || str2 Строка str1 ИЛИ строка str2 не пустые.

Сложные выражения можно брать в круглые скобки, например, написать так:

(str1>0) && (str1<5)

Это условие возвращает истину, когда str1 больше нуля и меньше пяти. Под истиной и ложью подразумевается выполнение логического или математического соответствия, так, 1>0 это истина, а 1<0 ложь.

Для использования переменных окружения в условных выражениях перед именем переменной следует поставить знак $. Текст и сравниваемые значения берутся в слэш (/текст/). Если внутри значения встречается символ /, то значение можно экранировать следующим образом.

\"/path/to/server\"
'/path/to/server'

Текст пишется внутри \" и \" или обрамляется одинарными кавычками. В примере 1 показано использование условия и переменной REMOTE_ADDR для сравнения IP-адреса со значением 127.0.0.1.

Пример 1. IP-адрес

<!DOCTYPE html>
<html>
 <head>
  <meta charset="utf-8">
  <title>SSI</title>
 </head>
 <body>
  <!--#if expr="($REMOTE_ADDR = /127.0.0.1/)"-->
   <p>Вы зашли с локального адреса.</p>
  <!--endif-->
 </body>
</html>
SSI

Не выкладывайте свой код напрямую в комментариях, он отображается некорректно. Воспользуйтесь сервисом cssdeck.com или jsfiddle.net, сохраните код и в комментариях дайте на него ссылку. Так и результат сразу увидят.