Server side includes основы и приемы использования


Содержание

Server side includes основы и приемы использования

А! Так Вы даже и не знаете, что это такое? И, тем более, не понимаете, зачем он Вам нужен? Что же, значит, Вы пришли, куда надо. Сегодня здесь всем объясняют — зачем им нужен SSI :-)

Как все нормальные люди, вначале расшифруем аббревиатуру SSI — Server S >SSI — это директивы, вставляемые прямо в HTML-код и служащие для передачи указаний Wев-серверу. Встречая такие директивы, которые, кстати, называются SSI-вставками, Web-сервер интерпретирует их и выполняет соответствующие действия. Какие, спросите Вы? А вот, например: вставка HTML-фрагмента из другого файла, динамическое формирование страничек в зависимости от некоторых переменных (например, типа броузера) и другие не менее приятные вещи.

Преимущества SSI проявляются, когда нам нужно поддерживать достаточно большой по объему сайт, имеющий определенную структуру и повторяющиеся элементы кода на всех страничках. Вообще, при применении серверных включений сайт удобно рассматривать как состоящий из отдельных блоков, каждый из которых отвечает за свою часть странички. Эти блоки практически неизменны и повторяются от страницы к странице. В эти блоки можно вынести такие элементы странички как: главное меню, рекламные вставки, повторяющиеся элементы оформления страничек и т.д. Физически эти блоки представляют собой просто HTML-файлы, содержащие часть кода, нужную для выполнения их задачи.

Для того, чтобы сервер знал, что страничка не обычная, а содержит SSI-директивы, она имеет специальное расширение: *.shtml или *.shtm, наличие которого и заставляет web-сервер предварительно обрабатывать странички. Вообще-то, расширение может быть любое — в зависимости от конфигурации web-сервера, но в основном применяется именно *.shtml.

Полная страничка формируется web-сервером на лету, собирая код странички из таких вот блоков. Для того, чтобы указать серверу, какой блок нужно вставить и в каком месте странички, используется специальная форма записи в виде комментария. Вот такая:

SSI-команд насчитывается около десятка, но я расскажу только о самых употребимых. Самая популярная команда — это команда включения содержимого одного файла в другой:

Результатом ее выполнения будет вставка содержимого файла file.ssi в месте появления данной директивы. При просмотре сформированного исходника HTML-файла мы не увидим никаких признаков SSI, т.к. данный механизм действует абсолютно прозрачно для броузеров, они получают исключительно корректный HTML-код.

Следующая команда — это команда установки значения переменной:

В данном случае мы определили переменную с именем pic и присвоили ей строковое значение «picture.gif». Значение переменной pic теперь доступно внутри SSI-вставки, и мы можем его использовать по нашему усмотрению. Например, используя одну и ту же SSI-вставку, но с разными значениями определенной в ней переменной, мы получим различные результаты. Перед тем, как показать реальный пример использования переменных в SSI-включениях, я расскажу о некоторых командах, применяемых при работе с переменными. Во-первых, это команда печати значения переменной:

Ее выполнение приведет к тому, что в месте появления команды напечатается значение переменной pic, т.е. «picture.gif».

Переменная может участвовать в выражениях, в этом случае перед ней ставится знак ‘$’, показывающий, что это именно переменная, а не просто текст. Вот пример:

После такого присвоения переменная B будет содержать строку «123456». Если же в текст понадобится просто вставить знак ‘$’ или какой-нибудь из других специальных знаков, то его нужно предварить слешем, вот так: ‘\$’. В некоторых случаях для избежания двусмысленности значение переменной может быть заключено в фигурные скобки: «$».

Более сложное применение переменных возможно с использованием условных операторов, имеющих следующую форму написания:

В зависимости от результатов проверки мы можем подставить тот или иной фрагмент кода. Допустим, мы можем проанализировать тип броузера пользователя и в зависимости от этого выдать либо код для Netscape Navigator-а, либо Internet Explorer-а. Это может оказаться полезным в некоторых случаях, когда невозможно сделать страничку, которая корректно отображалась бы в обоих броузерах. Вот пример использования условного оператора:

В данном случае условием проверки является существование переменной $Monday и, в зависимости от этого, подстановка того или иного HTML-кода.

Теперь давайте рассмотрим реальный пример применения SSI для формирования сложного документа из нескольких SSI-вставок. Вначале напишем текст основного HTML-документа, полагая, что SSI-вставки находятся в каталоге /ssi:

index.shtml

Теперь напишем код для этих SSI-вставок:

_header.shtml

Как видите, основной документ предельно упрощен и состоит из директив, устанавливающих значения переменных title, keywords и description, которые и будут подставлены в код странички при обработке SSI-вставок, определяющих код для верхней и нижней частей странички. Реальный код SSI-вставок обычно гораздо сложнее и может включать в себя большее количество определяемых переменных и сложных условий, формирующих окончательный вид странички.

Первое преимущество SSI с точки зрения дизайнера заключается в том, что при таком подходе web-мастеру, занимающимуся поддержкой сайта, можно не бояться случайно испортить дизайн. Элементы сложной верстки скрыты за счет использования SSI, и поддержка содержимого страничек становится гораздо более легким и приятным делом.

Второе, не менее важное преимущество, — это возможность мгновенной замены дизайна сайта, не требующая переделывания страничек с информационным содержанием сайта. Для смены дизайна достаточно переписать SSI-вставки, формирующие внешний вид сайта. В нашем случае это файлы _header.shtml и _footer.shtml.

Вот, вкратце то, что можно рассказать о SSI. Если Вас это заинтересовало, то возможно Вам будет интересно прочитать статью на сайте web-клуба, где об этом написано более подробно и приведен полный список SSI-директив с примерами.

SSI (Server S >

Содержание

Общая информация

Основным, наиболее простым, но в то же время чрезвычайно мощным инструментом поддержки больших наборов документов является SSI (Server-Side Includes — включения на стороне сервера). С помощью SSI можно не только в зависимости от некоторых условий выводить определенные части документа, не только формировать документ из заранее определенных кусочков, но и вставлять результат работы некоторого CGI сценария или программы прямо в документ.

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

В стандартном дистрибутиве Apache есть модуль mod_include. Начиная с версии 1.2, он имеет расширенное количество директив и называется — XSSI (eXtended SSI). По умолчанию он включен в компиляцию.

Активация механизма Server-Side Includes

Мы предоставляем своим клиентам возможность использовать директивы SSI на тарифных планах «maxi» и «ultra», тарифный план «mini» позволяет исполнять SSI инструкции только в режиме «NoExec».

Любой документ, у которого будет установлен обработчик «server-parsed», будет сканироваться этим модулем, если включена опция «Includes». При малом количестве документов с SSI, лучше всего в файле httpd.conf (в случае администрирования в автоматическом режиме данные строки уже присутствуют) указать следующее:

и устанавливать у таких файлов расширение .shtml. Если же все или почти все документы будут иметь директивы SSI, то лучше в файле конфигурации указать:

Однако, стоит помнить, что в этом случае на сервер ляжет дополнительная нагрузка по проверке всех документов вида *.html.

Также следует включить в опции директории узла параметр Includes:

Практическое использование SSI

Первым распространенным применением SSI является внедрение в документ некоего динамического куска разметки. Примерами могут служить счетчики посещений, цитаты или баннеры рекламных сетей. В любом случае, будь то строка текста или целая таблица, вставка производится с помощью директивы include, помещаемой в то место, куда должен быть вставлен кусок разметки:

Программа или сценарий CGI, вставляемая с помощью SSI, ничем не отличается от стандартной CGI программы, за исключением того, что должен выдаваться не целый документ, а только кусок разметки.

Вот текст упомянутого выше сценария:

Как видно из примера, даже во включаемых сценариях необходимо выводить HTTP заголовок.

В результате сканирования нашего простейшего документа пользователю будет возвращен примерно (с точностью до случайной величины) следующий документ:

Вторым распространенным применением SSI является формирование страницы из шаблона. В простейшем случае — это документ, в начало и конец которого вставляются шапка и подвал:

Вставляемые блоки не обязательно должны быть законченными, например, header.html может заканчиваться тэгом

, а global_menu.html или footer.html начинаться с тэга

. Таким образом, даже при определённой технической сложности шапки и подвала документа, редактируемый документ выглядит чрезвычайно просто, и его легко редактировать.

В связи со всем вышесказанным можно сделать вывод: желательно смысловую часть документа строить так, чтобы она никак не полагалась на содержимое шапок и подвалов. В этом случае легко можно перейти с табличной организации страниц на последовательную или на слоевую, что существенно повысит эргономику веб-сайта.

Что такое SSI. Учебное пособие Apache: введение в технологию Server Side Includes

Сервер Apache может реализовывать несколько механизмов для генерации динамического содержимого. Рассмотрим один из простейших — метод вставок или SSI (Server Side Includes, включения на стороне сервера).

Суть технологии — в страницу добавляются простейшие инструкции, которые при запросе этой страницы выполняются. Эта технология не является языком программирования, набор инструкций весьма невелик, а сами инструкции очень просты и касаются в основном вывода неких значений, вызова сторонних программ в процессе передачи документа и добавления в документ содержимого других документов.

Следует отметить, что SSI представляет собой механизм добавления динамического содержимого ограниченного объема к web-страницам. В соответствии с этим методом часть или все содержимое, имеющееся в наличии на сервере, маркируется как потенциально содержащее код SSI, включенный в код HTML. При обслуживании страницы сервер Apache сначала просматривает ее на наличие инструкций SSI и вносит изменения в соответствии с обнаруженными инструкциями в передаваемый браузеру пользователя результат. Поддержка данной технологии включена в Apache, но отключена обработка по умолчанию и основной причиной этого является падение производительности, ведь сервер будет вынужден просматривать всё передаваемое содержимое, либо как минимум какую-то часть передаваемого содержимого, что естественно ведёт к повышению нагрузки по сравнению с простой отдачей страниц пользователю. По той же причине, при включении обработки, рекомендуется ограничить действие SSI как можно меньшим числом каталогов или/и файлов. Технологии SSI в архитектуре web-сервера Apache реализуется модулем «mod_include», обрабатывающий любой документ, для которого в конфигурации указан обработчик «server-parsed». Также любой документ, имеющий MIME-тип text/x-server-parsed-html или text/x-server-parsed-htmls будет проанализирован данным модулем из-за соображений обратной совместимости. Кроме того можно принудительно указать «фильтр» для вывода файлов определённого типа.

Для включения возможности использования SSI используется директива «Options +Include», либо, для немного более безопасного метода включения этого режима и исключающая запуск сценариев: «Options +IncludeNOEXEC».

Чтобы включить обработку SSI-инструкций для всех файлов с расширением html, необходимо указать следующие инструкции:

AddOutputFilter INCLUDES .html

Указывать эти инстукции можно как в глобальном файле конфигурации веб-сервера (httpd.conf), так и в.htaccess, расположенном в некотором каталоге.

Из соображений повышения производительности необходимо произвести разделение страниц с использованием конструкций SSI и без них, это может быть реализовано двумя путями:

    Выделить отдельный каталог для файлов, имеющих SSI. Диапазон действия директивы может быть ограничен парой директив Location, или директив Directory, или размещением в файле.htaccess, находящемся в этом каталоге. Например:

AddType text/html .shtml

AddOutputFilter INCLUDES .shtml

Директивы во втором варианте сообщает серверу, что файлы с расширением shtml соответствуют MIME-типу text/html, а также что перед передачей таких файлов их нужно «пропускать через фильтр», который и будет обрабатывать SSI-инструкции. Конечно использовать именно расширение. shtml не обязательно, но такой метод является наиболее традиционным.

Единственной директивой модуля mod_include является директива XBitCrack. Если ее установить в значение on, это будет означать, что сервер станет рассматривать как SSI-документы только те файлы, у которых в файловой системе установлен бит «executive».

Помимо значений off и on, директива XBitCrack имеет опцию full, задающую серверу режим вставки заголовка Last-Modified при передаче файла. Это позволяет proxy—серверу производить кэширование.

Мы разобрались с принципами работы SSI, подключением обработки и способами указания какие файлы надо обрабатывать, теперь необходимо рассмотреть, что обрабатывать — команды, используемые в технологии SSI.

Команды SSI

Инструкции SSI имеют вид:

#element attribute1=value1 attribute2=value2 .

Следует заметить, что с точки зрения HTML такая инструкция является комментарием.

Команда echo

Команда echo предназначена для отображения значения переменной окружения. Параметр var обязателен и должен содержать имя выводимой переменной.

IP клиента — #echo var=»REMOTE_ADDR»

Браузер клиента — #echo var=»HTTP_USER_AGENT»

Сервер — #echo var=»SERVER_NAME»

Переход со страницы — #echo var=»HTTP_REFERER»

Команда include

Используется для вставки в документ другого документа.

Файл, который будет подключаться в документу, указывается в значении одного из двух возможных атрибутов: file или virtual. Их различие в том, что значением file должен быть путь к файлу относительного текущей папки (например: «../../files/somefile.html»). Значением атрибута virtual может содержать URL с одним лишь ограничением — этот URL должен принадлежать тому же серверу, на котором расположен документ, в который производится вставка.

Очень удобно использовать эту команду для организации сайта. Можно выделить в отдельные файлы неизменные части страниц (заголовок, меню, подвал), и всякий раз подключать их в новые страницы.

Команда flastmod

Команда предназначена для вывод даты-времени последней модификации файла.

Файл «any_file.doc» последний раз менялся: #flastmod file=»any_file.doc»

Формат вывод этой команды можно настроить командой config, меняя значение timefmt.

Команда printenv

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

Ветвление с помощью SSI

SSI позволяет выполнять ветвление. По сути процесс сводится к тому, что в зависимости от условия какие-то части документа выводятся, а какие-то не выводятся. Применяются if, elif, else, endif.

Содержимое одной ветки

Содержимое другой ветки

Содержимое третьей ветки

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


Ваше местоположение на сайте:

|| Что такое SSI (Server Side Includes)? | 6.4 Учебное пособие Apache: введение в технологию Server Side Includes

6.4 Учебное пособие Apache: введение в технологию Server Side Includes

Перевод

Технология Server-side includes предоставляет средства для добавления динамического содержания к уже существующим документам.

Введение

Эта статья описывает технологию Server Side Includes, которую обычно называют просто SSI. В этой статье я расскажу о конфигурировании вашего сервера для разрешения SSI, и объясню некоторые основные методики SSI для добавления динамического содержания к уже существующим HTML-страницам.

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

Что такое SSI?

Технология SSI (Server Side Includes) – это директивы, которые помещаются в HTML-страницы и оцениваются на сервере, когда обращаются к страницам. Она позволяет вам добавлять динамически сгенерированное содержание в существующую HTML-страницу без необходимости обработки всей страницы через CGI-программу или другую динамическую технологию.

Решение о том, когда использовать SSI, и когда ваша страница полностью генерируется какой-либо программой, состоит обычно в вопросе о том, насколько страница является статической, и сколько раз необходимо проводить повторную оценку, когда обращаются к странице. Технология SSI великолепный способ для добавления маленьких кусочков информации, например, текущего времени. Однако, если большая часть вашей страницы генерируется во время обращения к ней, то вам лучше поискать другое решение.

Конфигурирование сервера для разрешения SSI

Чтобы разрешить SSI на вашем сервере, вы должны иметь следующую директиву либо в файле httpd.conf, либо в файле.htaccess:

Options +Includes

Это сообщает серверу Apache, что вы хотите разрешить обработку в файлах директив SSI. Обратите внимание на то, что большинство конфигураций содержат многочисленные директивы OPTIONS, которые могут преодолевать друг друга. Вам, возможно, понадобится Options для определения папки, где вы хотите активизировать SSI, чтобы обеспечить работу этой технологии.

Не любой файл анализируется на наличие директив SSI. Вы должны сообщить серверу Apache, какие файлы следует анализировать. Существует два способа сделать это. Вы можете сообщить серверу Apache, чтобы он анализировал любой файл с особым расширением, таким как.shtml, с помощью следующих директив:

Директива XBITHACK просит сервер Apache анализировать файлы на наличие директив SSI, если они имеют исполняемый битовый набор. Таким образом, для добавления директив SSI в существующую страницу, вам следует только сделать файл исполняемым с использованием chmod, не менять название файла.

chmod +x pagename.html

Краткий комментарий о том, что не делать. Вы можете случайно увидеть рекомендации людей о том, чтобы вы только сообщили серверу Apache анализировать все файлы.html на наличие SSI, так что бы вам не надо путаться с названиями файлов.shtml. Эти люди, скорее всего, не слышали о директиве XBITHACK. Следует помнить, что, выполняя такой совет, вы требуете, чтобы сервер Apache просматривал каждый единичный файл, который посылается клиентам, даже если они не содержат каких-либо директив SSI. Это может привести к замедлению работы, и это – не очень хорошая идея.

Конечно, в Windows нет исполняемых битов для установки, что ограничит немного ваши варианты. В своей конфигурации по умолчанию сервер Apache не отсылает последнюю дату обновления или заголовков HTTP длины содержания на SSI-страницах, так как эти значения трудны в расчете для динамического содержания. Это может помешать кешированию вашего документа, и в результате замедлит работу клиента. Есть два способа решить эту задачу:

  1. Используйте конфигурацию XBitHack Full. Она потребует у сервера Apache определить последнюю дату обновления с помощью просмотра только даты создания запрашиваемого файла, игнорируя дату модификации любых включаемых файлов.
  2. Используйте директивы, предоставляемые модулем MOD EXPIRES, для установки явного времени устаревания ваших файлов, что позволит обозревателям и прокси-серверам знать, что они доступны для кеширования.

Основные директивы SSI

Директивы SSI имеют следующий синтаксис:

Элемент echo только выводит значение переменной. Существует ряд стандартных переменных, которые включают набор переменных окружения, доступные в CGI-программах. Кроме этого, вы можетет определить свою собственную переменную с помощью элемента set.

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

Этот элемент тоже подчиняется конфигурациям формата timefmt.

Включение результатов CGI-программы

Это – одно из обычных использований технологии SSI – вывод результатов CGI-программы, например, для любимой всеми программы счетчика посетителей («hit counter»).

Конечно, вам нужно будет заменить ssi.shtml на реальное название файла, на который вы ссылаетесь. Может возникнуть проблема, если вы лишь ищите сгенерированную часть кода, которую вы можете вставить в любой файл, так что вместо этого вам, возможно, захочется использовать переменную LAST MODIFIED:

This file last modified

Для получения более подробной информации по формату timefmt, обратитесь к вашему любимому поисковому сайту и поищите strftime. Синтаксис – такой же.

Включение стандартного нижнего колонтитула (footer)

Если вы управляете сайтом, который содержит множество страниц, то вы можете обнаружить, что изменения для всех таких станиц может стать серьезной головной болью, в частности, если вы пытаетесь поддерживать стандартный вид для всех страниц. Использование файла для верхнего (header) и/или нижнего (footer) колонтитула может уменьшить трудности такого обновления. Вы лишь должны сделать один файл нижнего колонтитула (footer), и затем включить его в каждую страницу SSI-командой include. Элемент include может определить, какой файл включить, с помощью атрибутов: либо file, либо virtual. Атрибут file – это путь к файлу, относительный к текущей папке. Это значит, что он не может быть абсолютным путем к файлу (начинающийся с /), и не может содержать../ как часть пути. Атрибут virtual, возможно, более полезен, и должен определять адрес URL, относительный к извлекаемому документу. Он может начинаться с /, но должен быть на том же сервере, где расположен данный файл.

Если вы хотите изменить это сообщение на другое, то вы можете сделать это с помощью атрибута errmsg элемента config:

Надеюсь, что конечный пользователь никогда не увидит такое сообщение, так как вы решить все проблемы до того, как запустите свой сайт. (Хорошо?).

Вы можете с помощью config конфигурировать формат, в котором выводится размеры файлов с помощью атрибута sizefmt. Вы можете определить bytes для полного подсчета в байтах или в abbrev для сокращенного числа в Кб или Мб, соответственно.

Исполняемые команды

Я надеюсь, что через некоторое время в следующие месяцы напишу статью об использовании SSI с маленькими CGI-программами. Ниже показано, что вы можете делать с элементом exec. Вы фактически можете с технологией SSI выполнить команду, используя оболочку (/bin/sh, если быть точным – или оболочку DOS, если у вас Win32). Следующие примеры предоставляют вам перечень директив.

Вы могли бы заметить некоторую странность форматирования этой директивы для Windows, так как вывод команды dir содержит строку » «, что сбивает обозреватели.

Обратите внимание на то, что эта особенность очень опасна, так как будет выполнятся любой код, который включен в тег exec. Если у вас ситуация, когда пользователи могут редактировать содержание на ваших веб-страницах, например, на «гостевой странице», убедитесь, что вы отключили эту характеристику. Вы можете разрешить использование SSI, но без функции exec, установив аргумент IncludesNOEXEC для директивы Options.

Расширенные способы технологии SSI

Дополнительно к приведенному содержанию, SSI на сервере Apache предоставляет вам возможность определять переменные и использовать эти переменные в сравнениях и условных операторах.

Предупреждение

Большинство из обсуждаемых здесь характеристик доступны только для серверов Apache 1.2 или выше. Конечно, если вы не используете Apache 1.2 или выше, то вам нужно обновить его немедленно. Делайте. Мы ждем.

Определение переменных

Используя директиву set, вы можете определить переменную для ее использования позже. Нам это понадобится позже при обсуждении, так что мы поговорим об этом здесь. Синтаксис определения следующий:

Для использования символа доллара в значение переменной, вам необходимо использовать обратную косую черту для обхода знака доллара.

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

Теперь, когда мы имеет переменные и способны определять и сравнивать эти значения, мы можем использовать их для выражения условий. Это позволяет технологии SSI быть в своем роде крошечным языком программирования. Модуль MOD INCLUDE предоставляет структуру if, elif, else, endif для создания условных выражений. Это позволяет вам эффективно генерировать несколько логических страниц из одной реальной страницы.

Структура этой условной конструкции:

Это установит переменные окружения “Mac” и “InternetExplorer” как «true», если клиент работает с Internet Explorer на Macintosh.

Затем, в вашем документе с активизированной технологией SSI вы можете ввести следующие строки:

Apologetic text goes here Cool JavaScript code goes here

Обратите внимание на то, что я не имею ничего против IE на Macs – я просто боролся в течение нескольких часов на прошлой неделе, пытаясь заставить работать JavaScript в обозревателе IE на Mac, хотя он работает везде. Вышеуказанное было временным обходным маневром. Любая другая переменная (либо несколько, которые вы определяете, или нормальные переменные окружения) может использоваться в условных выражениях. Со способностью сервера Apache устанавливать переменные окружения с помощью директивы SetEnvIf и другими связанными директивами, эта функциональность может позволить вам привлечь определенную динамическую среду без обращения к CGI.

Заключение

Технология SSI определенно не является заменой для CGI или других технологией, используемыми для генерирования динамических веб-страниц. Однако, это хороший способ добавлять небольшое количество динамического содержания на страницы без выполнения большой дополнительной работы.

#include virtual – подобно #include file включает текст другого файла в текущий файл или запускает cgi-script. В отличие от #include file может содержать относительный или абсолютный путь без названия протокола (HTTP://) и доменного имени (сайт) – то есть, не может указывать на файл другого сайта (для экспорта файлов другого сайта применяется PHP).

В директиве допускаются пути типа:

example/_ssi.html – указывает на файл _ssi.html, находящийся в подкаталоге example текущего каталога.

../_ssi.html – указывает на файл _ssi.html, находящийся в каталоге, в котором вложен текущий (родительском).

/_ssi.html – указывает на файл _ssi.html, находящийся в корневом каталоге сайта (для это файл http://сайт/_ssi.html).

#fsize file – Вставляет размер указанного файла. Файл, размер которого определяется, должен находиться на том же сайте, что и файл, содержащий данную инструкцию. Более того, он должен находится либо в том же каталоге, либо во вложеном каталоге.

#fsize virtual – Вставляет размер указанного файла. В отличие от #fsize file может содержать относительный или абсолютный путь без названия протокола (HTTP://) и доменного имени и, таким образом, указывать на файл в другом каталоге того же сайта.

Например: Выведет размер данного файла: 37K.

Формат размера определяется по SSI-инструкции .

#flastmod file – Вставляет дату последней модификации указанного файла. Файл, дата модификации которого определяется, должен находиться на том же сайте, что и файл, содержащий инструкцию. Так же, он должен находится либо в том же каталоге, либо во вложеном каталоге.

#flastmod virtual – Вставляет дату последней модификации указанного файла. В отличие от #flastmod file может содержать относительный или абсолютный путь без названия протокола (HTTP://) и доменного имени и, таким образом, указывать на файл в другом каталоге того же сайта.

Например: Выведет дату последней модификации данного файла: 10.08.2014 г.

Формат даты определяется по SSI-инструкции .

#exec cmd – Запускает внешнюю программу и вставляет в содержимое страницы результат ее выполнения.

#exec cgi – Подобно #exec cmdзапускает cgi-скрипт и вставляет в содержимое страницы результат его выполнения.

#config errmsg – определяет сообщение, выводящееся в текст при возникновении ошибки. Поскольку сообщение выводится прямо в текст страницы, может иметь смысл привести его к пустой строке ( ) или попросить посетителя сообщить автору об ошибке ( ).

#config timefmt – определяет формат даты для команды , используя следующие параметры:

Формат SSI-директивы #config timefmt

Формат Описание Пример
Формат Описание Пример
%a Краткое название дня недели Mon
%A Полное название дня недели Monday
%b Аббревиатура названия месяца Dec
%B Полное название месяца December
%d День месяца 01 (не 1)
%D Дата в формате «%m/%d/%y» 12/31/99
%e День месяца 13
%H Часы в 24-часовом формате 13
%I Часы в 12-часовом формате 01
%j День года 235
%m Номер месяца 01
%M Минуты 03
%p AM/PM (до полудня/после) AM
%r Время в формате «I:M:S p» 11:35:46 PM
%S Секунды 34
%s Время в секундах с 01.01.1970 957228726
%T Время в формате «%H:%M:%S» 14:05:34
%U Неделя года 16
%w Номер дня недели 4
%y Год в формате ГГ 99
%Y Год в формате ГГГГ 1999
%Z Временная зона MSK

В результате, не подготовленная команда дает следующий вывод: 10.08.2014 г

И эта же команда, после SSI директивы , выдаст: 10.08.2014 г

#config sizefmt – определяет формат размера для команды . настраивает на вывод размера файла в килобайтах (37K), а – в байтах (37,782)

#printenv – Подобно команде SET старого, доброго DOS-а, выводит текущие значения переменных окружения, такие как:

HTTP_USER_AGENT – название браузера, которым пользуется посетитель.

REMOTE_ADDR – IP-адрес посетителя.

REMOTE_HOST – адрес посетителя в нормальной форме.

SERVER_ADDR – IP-адрес сайта.

SERVER_NAME – адрес сервера.

CHARSET_HTTP_METHOD – протокол ((none))

REQUEST_METHOD – метод запроса страницы (GET)

HTTP_HOST – имя сайта (сайт)

REQUEST_URI – вся строка запроса, без указания протокола и имени сайта (/docs/ssi.html)

QUERY_STRING – все, что находилось в адресной строке после вопросительного знака (обычно это параметры форм) Попробуйте вызвать эту страницу с какими-то параметрами после вопросительного знака и вы увидете их здесь ()


SCRIPT_NAME – полный путь к странице от корня сайта (/docs/ssi.html)..html).

DOCUMENT_NAME – только название файла. (ssi.html)

HTTP_REFERER – страница, с которой перешли на эту ((none))

SCRIPT_FILENAME – полный путь к странице на сервере (/home/users/s/supervisork/domains/сайт/docs/ssi.html)

SERVER_SOFTWARE – название сервера и установленных модулей.

SERVER_ADMIN – почтовый адрес владельца сервера, указанный при установке.

DATE_LOCAL – сегодняшнее время и дата в вашем часовом поясе.

DATE_GMT – то же, но по Гринвичу.

LAST_MODIFIED – дата и время последнего обновления страницы.

Практическое применение команда имеет только для отладки страницы, что очень важно, учитывая тот факт что, у каждого сервера свой набор переменных. Вот что получается в результате ее применения на сайте :

Downgrade-1..9.142.17 HTTP_X_PROTOCOL=HTTP/1.1 HTTP_X_SERVER_IP=81.177.135.112 HTTP_X_FORWARDED_FOR=5.9.142.17 HTTP_X_FORWARDED_PROTOCOL=http HTTP_CONNECTION=close HTTP_USER_AGENT=Mozilla/5.0 (compatible; Googlebot/2.1; +http://www.google.com/bot..177.135.112 SERVER_PORT=80 REMOTE_ADDR=5.9.142..ru SCRIPT_FILENAME=/home/users/s/supervisork/domains/сайт/docs/ssi.html REMOTE_PORT=52812 GATEWAY_INTERFACE=CGI/1.1 SERVER_PROTOCOL=HTTP/1.0 REQUEST_METHOD=GET QUERY_STRING= REQUEST_URI=/docs/ssi.html SCRIPT_NAME=/docs/ssi.html DATE_LOCAL=03.04.2020 г DATE_GMT=03.04.2020 г LAST_MODIFIED=10.08.2014 г DOCUMENT_URI=/docs/ssi.html USER_NAME=supervisork DOCUMENT_NAME=ssi.html WORDS= KEYW= DESCRIP= TITL= HEAD= ROB=index, follow BROWSER=Mozilla/5.0 (compatible; Googlebot/2.1; +http://www.google.com/bot.html) DIR= PER=YES

Однако, сами переменные, применяются часто. Например в SSI-директиве #echo var.

#echo var – Используется для вывода значения переменной указанной в качестве параметра.

Ваш IP – Ваш браузер – Мой сервер – Вы пришли со страницы – Вы находитесь на странице – http://

Выводит следующий текст:

Ваш IP – 5.9.142.17 Ваш браузер – Mozilla/5.0 (compatible; Googlebot/2.1; +http://www.google.com/bot.html) Мой сервер – webdesign.site3k..html

В новых версиях SSI по умолчанию команда SSI echo использует кодирование entity и добавлен параметр encoding. Encoding должен задаваться ДО параметра var. Возможные значения encoding:

entity — (по умолчанию) будет произведено преобразование специальных HTML-символов в сущности и русский текст в кодировке Windows-1252 превратится в кракозябры (назначение данного преобразования непонятно);

url — будет произведено escape-преобразование, все символы все английского алфавита приобретут вид %nn, где nn — код символа в 16-ричной кодировке, что позволит их применять в строке URL;

none — не будет производиться никаких преобразований (как и раньше, с той только разницей, что HTML-сущности, которые раньше кодировались, кодироваться не будут и в переменные SSI можно вставлять угловые скобки и амперсанды).

#set var value – Устанавливает значение переменной, если переменной нет – создает. Формат команды set var=» ИМЯ_ПЕРЕМЕННОЙ» value=» ЕЕ_ЗНАЧЕНИЕ«

Например, такой код:

Значение переменной SERVER_NAME=«« » Сменим значение: Теперь значение переменной SERVER_NAME=« »

Выведет следующие строки:

Значение переменной SERVER_NAME=«сайт» Сменим значение: Теперь значение переменной SERVER_NAME=«discoverer.by.ru»

Конечно, подменять стандартные переменные окружения может и вовсе не имеет смысла, но назначать свои переменные бывает удобно, например:

Чтобы в нужном месте страницы применить команду

Выглядит так: Это самое наглядное пособие по SSI (обратите внимание, специальные символы в старой версии SSI будут перекодированы так, чтобы отображаться на странице, а не работать, как ожидается.

Естественно, определить переменную, нужно до ее применения на странице.

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

Операции и операторы SSI.

SSI не поддерживает математических вычислений и строковых операций. Однако, SSI-технология поддерживает подстановки, которые можно расценивать как аналог конкатенации. Подстановка позволяет использовать переменные окружения в качестве параметров SSI-директив и комбинировать значения переменных и строк (производить конкатенацию). При подстановке переменные заключаются в фигурные скобки «<> », и предваряются знаком доллара «$ » (иногда скобки можно опустить).

Поместит в переменную NEW_VAR полный путь и имя данной страницы и выведет его в текст:

При необходимости включения в подстановку знаков доллара, слеша, фигурных скобок и кавычек, их предваряют слешем:

#if, #elif, #else и #endif – Условные операторы. Позволяют выполнять код или выводить текст на страницу в зависимости от результата логического сравнения. Код, не соответствующий условию, никоим образом не появится даже при просмотре «исходного текста».

HTML-код, который будет выводиться, если ПЕРВОЕ_УСЛОВИЕ истинно HTML-код, который будет выводиться, если ПЕРВОЕ_УСЛОВИЕ ложно, а ВТОРОЕ_УСЛОВИЕ истинно HTML-код, который будет выводиться, если все условия ложны

Условие — это либо строка, которая является истинной, если она непустая, или набор операторов сравнения строк. Операторами могут быть:

    Равенство = Неравенство != Меньше Больше, либо равно >= Отрицание (не верно что) !

Если вторая строка заключена в слеши («/»), она является регулярным выражением . Например, условие истинно, если в первой строке встречается хоть одно вхождение второй строки.

Можно объединять несколько операторов сравнения с помощью операторов && («логическое И») и || («логическое ИЛИ»). Для группирования условий используются скобки. Для включение в условие переменных, их предваряют знаком доллара. Например:

Страница запрошена браузером Opera браузером Microsoft Internet Explorer браузером Netscape Navigator поисковым роботом

Страница запрошена браузером Netscape Navigator

Внимание: Любая SSI-директива должна начинаться с символов (конец комментария). При этом, между концом SSI директивы и дефисами конца комментария должен быть, по крайней мере, один пробел – иначе сервер может не правильно распознать директиву, приняв дефисы и угловую скобку за конец команды.

Особенности SSI скриптов

  • SSI – Server Side Includes переводится как включение со стороны сервера. В самом названии отображаются главные особенности SSI:
  • SSI инструкции не работают на локальных компьютерах, они обрабатываются только ВЕБ-серверами и, то, как будет выглядеть страница в итоге, можно увидеть только поместив ее на сервер и загрузив от туда в браузере. Перед выдачей страницы, сервер считывает ее строку за строкой, и находя SSI-инструкции обрабатывает, вставляя вместо них, результат выполнения. Сами инструкции, в полученной поситителем странице не сохраняются.
  • SSI не может включать файлы с другого домена.
  • SSI поддерживается не всеми серверами и, о его поддержке владельцы серверов обязательно указывают в описании хоста.
  • SSI обрабатывается не во всех файлах. Во многих файлах содержимое просто не анализируется на содержание SSI-инструкций – это делается, чтобы не замедлять работу сервера лишней обработкой. Обрабатываемые типы файлов указываются в описании хоста. Так же, их можно посмотреть в httpd.conf или srm.conf (если у вас есть к ним доступ). На анализ SSI-инструкций указывают строки: AddType text/html .shtml AddHandler server-parsed .shtml Обычно это HTM, HTML и SHTML файлы.
  • Иногда для обработки SSI-директив требуется размещение в корне сайта файла.htaccess (имя начинается с точки), с инструкциями типа AddHandler server-parsed .shtml AddHandler server-parsed .html Это может быть единственным способом повлиять на работу сервера, если вы не являетесь его администратором.
  • Иногда недобрые админы запрещают выполнение в SSI-директивах PHP-скриптов, и вместо результата выполнения скрипта появляется надпись типа
    «»
    В этом случае в .htaccess требуется добавить директиву Options +Includes Больше информации о файле.htaccess можно посмотреть на «Настройка файла.htaccess»
  • SSI обрабатывается не во всех каталогах. Для того чтобы в каталоге обрабатывались SSI-директивы, в файле access.conf этот каталог должен быть описан как Options Indexes Includes (или Options Includes), вложенные каталоги наследуют опцию и не требуют отдельной записи. Не у каждого есть доступ к этому файлу, однако, существует общее не писаное правило: на многих хостах содержимое делят на 2 корневые директории: cgi-bin и WWW. В файлах из директории cgi-bin никакие файлы (обычно) не проверяются на SSI-инструкции и никакие файлы (даже включенные по ) не отображаются в браузерах. Поэтому, файл, являющийся фрагментом страницы и включаемый в нее SSI-директивой НЕ доложен находиться в каталоге cgi-bin – в cgi-bin могут находиться только cgi-скрипты, так как они не включаются в страницу непосредственно (включается только результат их выполнения).
  • SSI-директивы обрабатываются не только в файлах, запрашиваемых посетителем, но и во включаемых в них фрагментах, если те имеют расширение, для которого разрешена проверка на наличие SSI-директив. Это может применяться различным образом, в частности, для обработки переменных, заданных на странице, включающей эти фрагменты.
  • Обычно, любые файлы в WWW-директории можно включить по SSI-директиве include, поэтому сами фрагменты, могут храниться в файлах с любым расширением. Тем не менее, следует учитывать что, HTM и HTML-файлы индексируются поисковыми системами, а значит, те могут послать посетителя на неполный фрагмент страницы (это, конечно, маловероятно, так как для этого на данный фрагмент должна быть проиндексированная ссылка), что, в свою очередь, может разочаровать его и оттолкнуть от сайта. Избежать такого, досадного, курьеза можно несколькими способами:

Область применения SSI.

Обычно SSI применяется там же, где Frame, Object, Script src= и т. д., например, для включения в WEB-страницу повторяющихся фрагментов (меню, баннерные коды, заголовки). Однако, механизм включения совершенно иной. Если в Frame, Object, Script src= и т. д. включаемый файл просто выдается сервером и уже на месте вставляется агентом пользователя (браузером), то в случае с SSI браузер получает страницу в уже готовом виде. Включение происходит прямо на сервере, а это порождает следующие отличия:

  • При включении типа Frame, Object, Script src= и т. д. посетитель может узнать исходный код страницы, а при SSI-включении – нет. Сокрытие исходного кода может быть полезным автору.
  • При включении типа Frame, Object, Script src= и т. д. требуется логическая завершенность включаемых объектов, а при SSI-внедрении – нет. Это так же, может оказаться удобным, так как позволяет дробить страницу на произвольные фрагменты и выделять в отдельные файлы большее количество общих мест.
  • При включении типа Frame, Object и т. д. к объекту, находящемуся во включенном фрагменте можно обратиться как ИМЯ_ФРАГМЕНТА.ИМЯ_ОБЪЕКТА, а к объекту, внедренному SSI-инструкцией, как к обычному элементу страницы – так проще.
  • При включении типа Frame, Object и т. д. можно разрешить пользователю менять содержимое объектов, а при SSI-внедрении – нет. Это заметно сужает область применения SSI.
  • При включении типа Frame, Object, Script src= и т. д. обработка условий и прочих директив происходит на компьютере посетителя, а при SSI – на сервере. Тем самым SSI-технология замедляет загрузку: выигрыш достигается, только если большие фрагменты либо включаются, либо не включаются, в зависимости от конкретных условий (тогда, хотя и возрастает нагрузка серверного процессора, уменьшается нагрузка на линию связи).
  • Поскольку SSI выполняется сервером, истинный вид страницы, можно увидеть только там, что не удобно. Программы, позволяющие получить SSI на локальном компьютере, дают не совсем тот же вариант, хотя бы за счет различия в переменных типа DOCUMENT_URI. А с учетом непосредственных настроек каждого конкретного сервера, разница может иметь принципиальное значение.
  • При включении типа Frame, Object, Script src= и т. д. включаемый объект загружается только однажды и, при последующем включении, берется из кэша. При SSI-внедрении, фрагмент загружается с каждой новой страницей, ЗНАЧИТЕЛЬНО замедляя загрузку: Это уже совсем плохо.
  • При включении типа Frame, Object, Script src= и т. д. меню находится в одном файле, а при SSI, внедряется в каждую страницу, тем самым, рассредоточивая внутреннюю ссылочную значимость, и портя все дело, когда требуется сосредоточить весь ссылочный вес на главной странице.
Илон Маск рекомендует:  Кто сегодня самый шустрый

Что применять: Frame, Object, Script src= или SSI – личное дело каждого.

Включаемый файл foot.htm :

Практическое отличие одной и той же страницы, построенной с применением различных технологий лишь в том, что каждая страница объектов технологии IFRAME выглядит полнее и является вполне самостоятельной. Это несколько увеличивает время загрузки первой страницы, но зато, за счет кэширования, повторяющиеся фрагменты не приходится загружать со следующей страницей и дальнейшая загрузка значительно ускоряется (подробней о преимуществах Frame смотрите в «Если вам не нравятся фреймы, значит вы не умеете их готовить»). Сочетание двух технологий включения дает наиболее качественный результат. Оно применяется на всех профессиональных сайтах и, если Frame и Object могут где-то не встретиться, то, по крайней мере, Script src= и
(то же включение кода, содержащегося в отдельном файле и загружающегося только однажды), используется повсеместно.

Применение IFRAME не может полностью заменить SSI, так как SSI позволяет не только загрузить фрагменты по условию (что можно решить и скриптом), но и, как показано в примере, через переменные передать им любые параметры. Без SSI это можно сделать только методом POST или через HTTP_REFERER (продолжение имени файла, после вопросительного знака), для дальнейшей обработки каким-либо скриптом. Но возможности такой передачи не идут ни в какое сравнение с возможностями передачи значений SSI переменных. Поэтому, применение SSI может потребоваться даже на страницах, основанных на фреймах – чем больше инструментов нам доступно, тем лучше и быстрее получается результат.

SSI (Server Side Includes) — технология позволяющая удобно «собирать» веб-страницы из частей, вставлять в них результаты выполнения CGI-скриптов и придавать страницам прочие элементы динамики.

Какие файлы обрабатываются как SSI, как добавить свои файлы

По умолчанию веб-сервер проверяет на предмет наличия SSI-инструкций только файлы с расширением *.shtml. Например, поместите SSI-команды в файл index.shtml и это сразу будет работать. Если есть необходимость проверять на наличие SSI другие файлы, соответствующие расширения для проверки можно добавить, поместив в файл .htaccess следующую инструкцию:

AddHandler server-parsed .ext1

.ext1 тут — расширение файлов, которые должны проверяться на наличие в них SSI. Не рекомендуется добавлять расширения .html и .htm, так как в этом случае сервер будет проверять все html-файлы на предмет наличия SSI-вставок. Это может привести к совершенно бессмысленной нагрузке на сервер.

Ограничения

Пользователям хостинга доступны все директивы SSI за исключением одного ограничения для абонентов, которые используют тариф не предусматривающий запуск собственных cgi-скриптов. Для этих клиентов запуск скриптов недоступен и через SSI-инструкции. То есть, в терминах Apache для них действует опция NoExec.

Как работает и для чего используется SSI

Технологию SSI начинающие пользователи в основном могут использовать для двух целей: для «склейки» страницы из частей html-кода и для запуска скриптов с целью размещения результатов их работы на создаваемой html-странице. В первом случае с диска сервера читаются соответствующие файлы и вставляются в код страницы, откуда был вызван SSI-код. Во втором случае веб-сервер, найдя SSI-инструкцию, запускает скрипт, размещенный на диске, и вставляет в итоговую страницу результат выполнения скрипта.

«Склейка» страницы из частей html-кода. Используется для того, чтобы не дублировать в множестве веб-страниц один и тот же html-код. Например, можно вынести весь дизайн в SSI-включения, которые подключать в конкретном html-файле, в котором будет содержаться только текст конкретной страницы.

Поместим в файл header.inc «заголовок» веб-страницы (элементы дизайна, меню, нужные ссылки и другие элементы, которые присутствуют на всех страницах), а в файл footer.inc поместим нижнюю часть веб-страницы (завершающую часть дизайна). Далее создадим файл с именем index.shtml, который будет выглядеть так:

А здесь у нас будет основной текст страницы ;

Предполагается, что в файлы-включения мы поместили html-код хотя бы вроде начальных/конечных тэгов , , и так далее. В результате пользователь получит страницу, в которую будет сначала включено содержимое файла header.inc , далее слова «А здесь у нас будет основной текст страницы» и затем содержимое файла footer.inc.

Такое использование SSI удобно с точки зрения отсутствия необходимости все время вставлять во вновь создаваемые страницы один и тот же html-код, а также с точки зрения удобства изменения основных элементов сайта — меняем в одном месте html-код, который сразу меняется на всех страницах по всему сайту.

Запуск скриптов и размещение результатов их работы на создаваемой html-странице. Таким образом, можно разместить на странице практически любой функционал, например, на языке Perl (или другом языке программирования, поддерживаемом хостингом).

Например, у вас есть скрипт-счетчик, который показывает сколько посетителей заходило на вашу страницу и находится он по адресу /cgi-bin/count.pl. Включим результат его работы в веб-страницу. Для этого в коде html-страницы разместим такой SSI-код:

В итоге на странице, которую увидит пользователь, будет размещен счетчик, который вывел скрипт /cgi-bin/count.pl.

Полный список команд SSI вы найдете в описании Apache-модуля mod_include

Еще примеры использования SSI

Инструкции SSI можно использовать не только для запуска скриптов и включения файлов. Также SSI позволяет работать с переменными окружения веб-сервера, производить манипуляции с датами, выполнять команды по условию и так далее. Хорошее описание наиболее востребованных применений команд SSI вы найдете на сервере CIT Forum .

Диагностика ошибок при использовании SSI

Если при использовании SSI-команд на своих html-страницах вы увидели сообщение «», это свидетельствует о возникновении ошибки при обработке SSI-инструкции веб-сервером.

Возможные причины возникновения такой ошибки.


Что такое ssi и с чем его едят?

Server Side Include (SSI) .Эта вещь в WWW-дизайне чрезвычайно нужная и полезная, так как во много раз облегчает работу по созданию и поддержке Web-сайта.

Server Side Include с английского переводится как «включаемый на стороне сервера».Эта технология позволяет Web-серверу включать в текст ваших HTML-страниц любой другой текст: содержимое текстовых файлов или, например, результат работы CGI-скриптов (который, как известно, обычно оформляется в виде HTML-текста). Происходит это «включение» непосредственно перед передачей текста HTML-страницы броузеру пользователя, так что посетитель страницы даже не догадывается об этой серверной «возне».

Какова же польза от SSI ? Польза огромна. Предположим, на каждой странице своего сайта вы поместили список доступных разделов сайта. Творение ваше, как и положено, постоянно развивается, и вот вы решили добавить еще один раздел. Что же теперь, открывать все страницы в редакторе и тупо добавлять в текст одно и то же? Советский пионер (любящий трудности) поступил бы именно так, а умный Web-дизайнер станет использовать SSI . Для этого достаточно создать отдельный текстовый файл (например, menu.html) и занести туда HTML-код списка разделов. Непосредственно же в страницы сайта, в том месте, где должен находиться список разделов, нужно вставить следующую инструкцию:
Обратие внимание на то, что нужно дословно следовать синтаксису директив SSI. Забудете, например, поставить два тире в конце директивы — и сервер ей буквально «подавится», прекратив анализ страницы.

Когда кто-либо захочет просмотреть эту страницу, сервер заменит инструкцию содержимым файла menu.html. Если вы измените файл menu.html, то все страницы, где вы использовали , обновятся автоматически. Обратите внимание: в HTML-файлах, лежащих на диске Web-сервера, ничего не меняется — сервер производит вставку текста «на лету», перед тем, как отправить WWW-страницу в броузер посетителя.

Вместо имени обычного текстового файла в инструкции можно указывать имя CGI-скрипта. В этом случае сервер сначала выполнит CGI-скрипт, а потом вставит результат работы скрипта в текст WWW-страницы. Это означает, что вы сможете реализовать такие вещи как, например, текстовый счетчик посещений или отображение на странице случайно выбранной фразы.

Есть еще одно косвенное преимущество применения SSI: из-за использования шаблонов типа вышеупомянутого menu.html WWW-страницы будут меньшими по объему, и вы сможете сэкономить немало времени, перписывая файлы на Web-сервер по FTP.

Но не все так прекрасно. Например, вам не удастся поэксперементировать с механизмом SSI на машине, на которой не установлен Web-сервер. Функционирование SSI обеспечивается именно сервером, поэтому при просмотре HTML-файлов с локального жесткого диска (например, С:), ваш броузер проигнорирует директивы SSI — ведь они, с точки зрения HTML, являются обычными комментариями.

Кроме того, сервер должен быть настроен для поддержки SSI. И попадаются такие алчные провайдеры, которые начинают требовать деньги за такую настройку. Лучше всего не пользоваться их услугами, так как поддержка SSI включается добавлением пары строк в файлы конфигурации Web-сервера Apache и еще кое-какими нехитрыми действиями администратора, за что брать деньги, на мой взгляд, грешно.

К счастью, таких провайдеров не очень много. Большинство предлагают поддержку SSI по умолчанию. Но учтите, что на бесплатных серверах, таких, как Хоом, Tripod, Geocities, Chat.ru SSI не разрешается. Тут уж ничего поделать нельзя:-(

Кстати о настройках сервера. При включении поддержки SSI сервер начинает просматривать все страницы на предмет наличия в них директив SSI, что увеличивает нагрузку на сервер. Поэтому очень часто системные администраторы включают SSI только для файлов с определенным расширением — обычно.shtml. Так что если в файлах.html SSI не работает, попробуйте переименовать их в.shtml, а лучше спросите об этом системного администратора:-)

В общем, SSI — действительно полезный инструмент, игнорировать который, если вам дорого свое время (и деньги), не стоит.

Что такое SSI и с чем его едят II

Этой статьей хотелось бы открыть новый подраздел на DVK URL CLUB. «Ваша колонка» призвана собрать материалы и мнения наших посетителей. Первая статья написана нашим модератором раздела «Перекур» по мотивам одного из топиков на «Перекуре», в которой Александр поясняет некоторые особеннсти использования директив SSI. Так же автор хочет напомнить вам, что инструкциями SSI можно пользоваться только на том сервере, который их поддерживает. Большинство бесплатных хостингов в сети не выделяется такой особенностью, а попросту, не поддерживают SSI.

Преамбула
Суть и простейшие приемы в SSI уже были описаны на данном сайте. Как правило, на развалах статей по мастерингу редко встречается что-то кроме описание единственной функции «include» в самом простом варианте.

Однако SSI смело можно назвать языком программирования, пусть не полноценным, но языком. SSI позволяет определять условия и переменные, а также умеет работать с так называемыми переменными окружения, одной из которых является $QUERY_STRING, активно использующаяся при программировании на Perl, PHP, и других языках создания серверных скриптов. Здесь-то и начинается самое интересное.

Суть явления или результат который имеет Webmaster.
По большому счету речь сейчас пойдет о шаблонах. При очередном обновлении человеку обслуживающему сайт будет достаточно добавить ссылку на новую страницу в оглавлении и создать файл с обычным форматированным текстом без какой бы то ни было разметки. Согласитесь, что это весьма удобно:)

SSI. Способ регистрации элементов управления с использованием директивы include SSI

Кроме одиночных контактов в папке можно размещать списки рассылки, которые являются группами контактов. Предположим, у вас есть четыре заместителя и большинство директив приходится рассылать всем четырем. Чтобы облегчить свою работу, подготовьте список рассылки и включите в него контакты заместителей. После этого при отправке очередной директивы не нужно будет последовательно указывать адреса всех четырех человек, достаточно выбрать соответствующий список рассылки. Для добавления списка выполните следующие шаги.

1. В раскрывающемся списке кнопки Создать выберите команду Создать список рассылки .

Примечание В Outlook XP имеется возможность объединять несколько контактов в списке рассылки, который, в свою очередь, может использоваться в операциях как одновременный контакт с несколькими людьми.

Рис. 20.7. Добавление адресов в список рассылки Outlook

2. В поле Имя введите название Четыре электронных адреса.

3. Щелкните на кнопке Выберите членов .

4. В списке Источник адресов окна добавления адресов, показанного на рис. 20.7, выберите пункт Контакты.

Примечание Адреса для списка рассылки можно выбирать не только из папки контактов, но также из адресной книги Windows и из других адресных справочников, зарегистрированных в Outlook.

5. В левом списке окна выделите строку Александр Петров (Эл. почта).

6. Щелкните на кнопке Члены .

7. Повторяя шаги 5 и 6, добавьте в список рассылки электронные адреса двух других людей.

8. Щёлкните на кнопке ОК .

10. В открывшемся окне диалога Добавление новой записи в поле Краткое имя введите Сергей Николаев. В поле Адрес электронной почты напечатайте электронный адрес. Установите флажок Добавить контакт , чтобы новый адрес автоматически был добавлен в папку контактов Outlook. Затем щелкните на кнопке ОК . Теперь окно списка рассылки будет выглядеть так, как показано на рис. 20.8.

Примечание Чтобы удалить адрес из списка рассылки, выделите строку с этим адресом и щелкните на кнопке Удалить .

Directives in AngularJS play an important role. Directives can be used to teach new tricks to HTML, and you can even create your own HTML tags or attributes. Directives also help in keeping the mark-up more fluent and defines a nice way of separating code and mark-up from each other.

View is a HTML template. View is nothing but the information you want to render to the end user’s browser. A view in AngularJS is also called as compiled DOM . View makes use of directives to render the data with HTML template.

This article is Part IV of the Project Tracking Website built in AngularJS and ASP.NET Web API. So far, we have , created a , and have .

Thanks to to review this Angular series and fix the bugs.

We have already seen the $scope object which provides a Model to the View. Model code is not intermixed with the HTML code we write into our views. Rather data is moved from the model to views by using data binding expressions. This way developers can achieve Separation of Concerns (SoC). Since Models are independent of Views, they can be bound to any View. This binding of model is done with the help of AngularJS Directives.

We have already seen some Angular directives in our like ng-app which bootstraps AngularJS, as well as ng-controller that makes the controller available to HTML. From the controller, we can bind the data to the views using Angular <>.

In this article, we will look at a couple of additional AngularJS directives which come out-of-the-box with Angular. One of them is ng-repeat . Let’s try using ng-repeat directive into our EmployeeDetails.html page that can be found in the accompanying this article. Modify the service URL in our EmployeesController.js file. The service URL is as follows:

Now we will modify the EmployeeDetails.html page as shown in following code —

Replace the

of EmployeeDetails.html page with above code. The output of the above code is shown here:

In this code, we have used the ng-repeat directive of AngularJS. It is similar to the for or foreach loop in .NET. Here we are getting an IEnumerable collection using ASP.NET Web API. We are using this collection as a model in our Angular Controller. Using this model, we are iterating the objects of employees, into our view. This is a very helpful directive which repeats through the objects in the collection to display the data on the view.

Now let’s try adding a filter to search a particular Employee from the collection and display the employee based on given Employee Name or Employee Name character. Till now, we have fetched the model and used it in our Views. It also works the other way. We can make our views talk back to our models which are there in our controllers.

To add a search filter based on Employee Name, we will modify the EmployeeDetails.html page by adding HTML input elements as shown below —

Add the above code just after the

tag. In the above code, we are using ng-model directive which enables us to send the data back to the model. Based on this data, we will make a search for an employee using EmployeeName property. Make sure that EmployeeName property is declared in our model, which we will do in the following steps. Also notice that we are using ng-submit directive which will give a call to SearchEmployee function from our controller.

Now let’s modify the EmployeesController.js file so that we can search the employee based on EmployeeName property as a searching criteria. The code is shown below —

In the above code, we have added the SearchEmployee() method to our $scope object as a model. This method will search for Employees based on employee name or the character of an employee name. We have also declared EmployeeName property in our controller at the end of this code. The SearchEmployees method fetches the Web API method. I have modified the method GET as shown here:

Public HttpResponseMessage Get(string name)

The Employee Repository code is as shown here:

Public static List SearchEmployeesByName(string employeeName)

After all these changes, now run the EmployeeDetails.html page and see the output.

In the above output, we are searching for employees whose name contains the ‘J’ character in it.

AngularJS Filters extend the behavior of binding expressions or directives. Filters are used with binding expressions to format the data being bound. When they are used with directives, they add some additional actions to the directives. Out-of-the-box, AngularJS provides a number of filters which we can use to format the values of an expression and display the values/data into our views. You can make use of filters in Views, Controllers and Services. The syntax of using filters into views is << expression | filter1 | filter2 | . >>.

We will now try a filter which will sort the data using employee name. To sort the data, let’s add a filter in our ng-repeat using a | operator as shown here:

In the above code, we are adding filter in our ng-repeat directive. The orderBy:’employeeName’ will sort the data using Employee name in an ascending order. You can observe the output here:

To display the data in descending order, you can change the filter as shown here:

In the above code, to sort the employee names in descending order, we have used (-) minus sign. Likewise, you can make use of (+) sign to sort it in ascending.

You can also make use limitTo filter to limit the number of records. For example, let us say at a time you want to display 5 employees. To display the restricted number of records in our EmployeeDetails.html page, let’s modify the ng-repeat directive as shown here-

The output is shown here:

Now if you run the ProjectDetails.html page, the date is getting displayed with time. You can apply the date filter as shown in following code —

The output of this page is as follows:

You can make use of different date formats like — fulldate, longdate, mediumdate, shortdate etc. Now let’s open EmployeeDetails.html page and run it. I am using the ‘Z’ character to display employees whose employee name contains Z.

If you observe, the output displays an Employee table heading without data. We can make the heading invisible using the ng-show directive when the filter doesn’t produce any result. Apply ng-show directive in our table tag as shown in the below code and try running the application with Z character. Now you will not see the table columns when Employees model is null. The ng-show attribute will evaluate the Employees model and accordingly it will either display the table or hide the table.

Likewise, there are a number of directives which you can use in AngularJS. You can also design a Custom Directive which we will see later in this series. Apply the search on various views as per your requirement in our views. In our next article, we will take a look at

Поисковая система Google (www.google.com) предоставляет множество возможностей для поиска. Все эти возможности – неоценимый инструмент поиска для пользователя впервые попавшего в Интернет и в то же время еще более мощное оружие вторжения и разрушения в руках людей с злыми намерениями, включая не только хакеров, но и некомпьютерных преступников и даже террористов.
(9475 просмотров за 1 неделю)

Денис Батранков
denisNOSPAMixi.ru

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

Введение

Я, например, за 0.14 секунд нашел 1670 страниц!

2. Введем другую строку, например:

немного меньше, но этого уже достаточно для свободного скачивания и для подбора паролей (при помощи того же John The Ripper). Ниже я приведу еще ряд примеров.

Итак, Вам надо осознать, что поисковая машина Google посетила большинство из сайтов Интернет и сохранила в кэше информацию, содержащуюся на них. Эта кэшированная информация позволяет получить информацию о сайте и о содержимом сайта без прямого подключения к сайту, лишь копаясь в той информации, которая хранится внутри Google. Причем, если информация на сайте уже недоступна, то информация в кэше еще, возможно, сохранилась. Все что нужно для этого метода: знать некоторые ключевые слова Google. Этот технический прием называется Google Hacking.

Впервые информация о Google Hacking появилась на рассылке Bugtruck еще 3 года назад. В 2001 году эта тема была поднята одним французским студентом. Вот ссылка на это письмо http://www.cotse.com/mailing-lists/bugtraq/2001/Nov/0129.html . В нем приведены первые примеры таких запросов:

1) Index of /admin
2) Index of /password
3) Index of /mail
4) Index of / +banques +filetype:xls (for france. )
5) Index of / +passwd
6) Index of / password.txt

Нашумела эта тема в англо-читающей части Интернета совершенно недавно: после статьи Johnny Long вышедшей 7 мая 2004 года. Для более полного изучения Google Hacking советую зайти на сайт этого автора http://johnny.ihackstuff.com . В этой статье я лишь хочу ввести вас в курс дела.

Кем это может быть использовано:
— Журналисты, шпионы и все те люди, кто любит совать нос не в свои дела, могут использовать это для поиска компромата.
— Хакеры, разыскивающие подходящие цели для взлома.

Как работает Google.

Для продолжения разговора напомню некоторые из ключевых слов, используемых в запросах Google.

Поиск при помощи знака +

Google исключает из поиска неважные, по его мнению, слова. Например вопросительные слова, предлоги и артикли в английском языке: например are, of, where. В русском языке Google, похоже, все слова считает важными. Если слово исключается из поиска, то Google пишет об этом. Чтобы Google начал искать страницы с этими словами перед ними нужно добавить знак + без пробела перед словом. Например:

Поиск при помощи знака –

Если Google находит большое количество станиц, из которых необходимо исключить страницы с определенной тематикой, то можно заставить Google искать только страницы, на которых нет определенных слов. Для этого надо указать эти слова, поставив перед каждым знак – без пробела перед словом. Например:

Поиск при помощи знака

Возможно, что вы захотите найти не только указанное слово, но также и его синонимы. Для этого перед словом укажите символ

Поиск точной фразы при помощи двойных кавычек

Google ищет на каждой странице все вхождения слов, которые вы написали в строке запроса, причем ему неважно взаимное расположение слов, главное чтобы все указанные слова были на странице одновременно (это действие по умолчанию). Чтобы найти точную фразу – ее нужно взять в кавычки. Например:

«подставка для книг»

Чтобы было хоть одно из указанных слов нужно указать логическую операцию явно: OR. Например:


книга безопасность OR защита

Кроме того в строке поиска можно использовать знак * для обозначения любого слова и. для обозначения любого символа.

Поиск слов при помощи дополнительных операторов

Существуют поисковые операторы, которые указываются в строке поиска в формате:

Пробелы рядом с двоеточием не нужны. Если вы вставите пробел после двоеточия, то увидите сообщение об ошибке, а перед ним, то Google будет использовать их как обычную строку для поиска.
Существуют группы дополнительных операторов поиска: языки — указывают на каком языке вы хотите увидеть результат, дата — ограничивают результаты за прошедшие три, шесть или 12 месяцев, вхождения — указывают в каком месте документа нужно искать строку: везде, в заголовке, в URL, домены — производить поиск по указанному сайту или наоборот исключить его из поиска, безопасный поиск — блокируют сайты содержащие указанный тип информации и удаляют их со страниц результатов поиска.
При этом некоторые операторы не нуждаются в дополнительном параметре, например запрос «cache:www.google.com » может быть вызван, как полноценная строка для поиска, а некоторые ключевые слова, наоборот, требуют наличия слова для поиска, например » site:www.google.com help «. В свете нашей тематики посмотрим на следующие операторы:

Требует дополнительного параметра?

поиск только по указанному в search_term сайту

поиск только в документах с типом search_term

найти страницы, содержащие search_term в заголовке

найти страницы, содержащие все слова search_term в заголовке

найти страницы, содержащие слово search_term в своем адресе

найти страницы, содержащие все слова search_term в своем адресе

Оператор site: ограничивает поиск только по указанному сайту, причем можно указать не только доменное имя, но и IP адрес. Например, введите:

Оператор filetype: ограничивает поиск в файлах определенного типа. Например:

На дату выхода статьи Googlе может искать внутри 13 различных форматов файлов:

  • Adobe Portable Document Format (pdf)
  • Adobe PostScript (ps)
  • Lotus 1-2-3 (wk1, wk2, wk3, wk4, wk5, wki, wks, wku)
  • Lotus WordPro (lwp)
  • MacWrite (mw)
  • Microsoft Excel (xls)
  • Microsoft PowerPoint (ppt)
  • Microsoft Word (doc)
  • Microsoft Works (wks, wps, wdb)
  • Microsoft Write (wri)
  • Rich Text Format (rtf)
  • Shockwave Flash (swf)
  • Text (ans, txt)

Оператор link: показывает все страницы, которые указывают на указанную страницу.
Наверно всегда интересно посмотреть, как много мест в Интернете знают о тебе. Пробуем:

Оператор cache: показывает версию сайта в кеше Google, как она выглядела, когда Google последний раз посещал эту страницу. Берем любой, часто меняющийся сайт и смотрим:

Оператор intitle: ищет указанное слово в заголовке страницы. Оператор allintitle: является расширением – он ищет все указанные несколько слов в заголовке страницы. Сравните:

intitle:полет на марс
intitle:полет intitle:на intitle:марс
allintitle:полет на марс

Оператор inurl: заставляет Google показать все страницы содержащие в URL указанную строку. Оператор allinurl: ищет все слова в URL. Например:

Эта команда особенно полезна для тех, у кого нет SNORT – хоть смогут посмотреть, как он работает на реальной системе.

Методы взлома при помощи Google

Итак, мы выяснили что, используя комбинацию вышеперечисленных операторов и ключевых слов, любой человек может заняться сбором нужной информации и поиском уязвимостей. Эти технические приемы часто называют Google Hacking.

Карта сайта

Можно использовать оператор site: для просмотра всех ссылок, которые Google нашел на сайте. Обычно страницы, которые динамически создаются скриптами, при помощи параметров не индексируются, поэтому некоторые сайты используют ISAPI фильтры, чтобы ссылки были не в виде /article.asp?num=10&dst=5 , а со слешами /article/abc/num/10/dst/5 . Это сделано для того, чтобы сайт вообще индексировался поисковиками.

Google думает, что каждая страница сайта содержит слово whitehouse. Этим мы и пользуемся, чтобы получить все страницы.
Есть и упрощенный вариант:

И что самое приятное — товарищи с whitehouse.gov даже не узнали, что мы посмотрели на структуру их сайта и даже заглянули в кэшированные странички, которые скачал себе Google. Это может быть использовано для изучения структуры сайтов и просмотра содержимого, оставаясь незамеченным до поры до времени.

Просмотр списка файлов в директориях

WEB серверы могут показывать списки директорий сервера вместо обычных HTML страниц. Обычно это делается для того, чтобы пользователи выбирали и скачивали определенные файлы. Однако во многих случаях у администраторов нет цели показать содержимое директории. Это возникает вследствие неправильной конфигурации сервера или отсутствия главной страницы в директории. В результате у хакера появляется шанс найти что-нибудь интересное в директории и воспользоваться этим для своих целей. Чтобы найти все такие страницы, достаточно заметить, что все они содержат в своем заголовке слова: index of. Но поскольку слова index of содержат не только такие страницы, то нужно уточнить запрос и учесть ключевые слова на самой странице, поэтому нам подойдут запросы вида:

intitle:index.of parent directory
intitle:index.of name size

Поскольку в основном листинги директорий сделаны намеренно, то вам, возможно, трудно будет найти ошибочно выведенные листинги с первого раза. Но, по крайней мере, вы уже сможете использовать листинги для определения версии WEB сервера, как описано ниже.

Получение версии WEB сервера.

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

Apache1.3.29 — ProXad Server at trf296.free.fr Port 80

Опытный администратор может подменить эту информацию, но, как правило, она соответствует истине. Таким образом, чтобы получить эту информацию достаточно послать запрос:

Чтобы получить информацию для конкретного сервера уточняем запрос:

intitle:index.of server.at site:ibm.com

Или наоборот ищем сервера работающие на определенной версии сервера:

intitle:index.of Apache/2.0.40 Server at

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

Также можно получить версию сервера, просматривая страницы, которые по умолчанию устанавливаются при установке свежей версии WEB сервера. Например, чтобы увидеть тестовую страницу Apache 1.2.6 достаточно набрать

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

Попробуйте найти страницы IIS 5.0

allintitle:Welcome to Windows 2000 Internet Services

В случае с IIS можно определить не только версию сервера, но и версию Windows и Service Pack.

Еще одним способом определения версии WEB сервера является поиск руководств (страниц подсказок) и примеров, которые могут быть установлены на сайте по умолчанию. Хакеры нашли достаточно много способов использовать эти компоненты, чтобы получить привилегированный доступ к сайту. Именно поэтому нужно на боевом сайте удалить эти компоненты. Не говоря уже о том, что по наличию этих компонентов можно получить информацию о типе сервера и его версии. Например, найдем руководство по apache:

inurl:manual apache directives modules

Использование Google как CGI сканера.

CGI сканер или WEB сканер – утилита для поиска уязвимых скриптов и программ на сервере жертвы. Эти утилиты должны знать что искать, для этого у них есть целый список уязвимых файлов, например:

/cgi-bin/cgiemail/uargg.txt
/random_banner/index.cgi
/random_banner/index.cgi
/cgi-bin/mailview.cgi
/cgi-bin/maillist.cgi
/cgi-bin/userreg.cgi

/iissamples/ISSamples/SQLQHit.asp
/SiteServer/admin/findvserver.asp
/scripts/cphost.dll
/cgi-bin/finger.cgi

Мы может найти каждый из этих файлов с помощью Google, используя дополнительно с именем файла в строке поиска слова index of или inurl: мы можем найти сайты с уязвимыми скриптами, например:

Пользуясь дополнительными знаниями, хакер может использовать уязвимость скрипта и с помощью этой уязвимости заставить скрипт выдать любой файл, хранящийся на сервере. Например файл паролей.

Как защитить себя от взлома через Google.

1. Не выкладывайте важные данные на WEB сервер.

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

2. Проверьте свой сайт.

Используйте описанные методы, для исследования своего сайта. Проверяйте периодически свой сайт новыми методами, которые появляются на сайте http://johnny.ihackstuff.com . Помните, что если вы хотите автоматизировать свои действия, то нужно получить специальное разрешение от Google. Если внимательно прочитать http://www.google.com/terms_of_service.html , то вы увидите фразу: You may not send automated queries of any sort to Google»s system without express permission in advance from Google.

3. Возможно, вам не нужно чтобы Google индексировал ваш сайт или его часть.

Google позволяет удалить ссылку на свой сайт или его часть из своей базы, а также удалить страницы из кэша. Кроме того вы можете запретить поиск изображений на вашем сайте, запретить показывать короткие фрагменты страниц в результатах поиска Все возможности по удалению сайта описаны на сранице http://www.google.com/remove.html . Для этого вы должны подтвердить, что вы действительно владелец этого сайта или вставить на страницу теги или

4. Используйте robots.txt

Известно, что поисковые машины заглядывают в файл robots.txt лежащий в корне сайта и не индексируют те части, которые помечены словом Disallow . Вы можете воспользоваться этим, для того чтобы часть сайта не индексировалась. Например, чтобы не индексировался весь сайт, создайте файл robots.txt содержащий две строчки:

Что еще бывает

Чтобы жизнь вам медом не казалась, скажу напоследок, что существуют сайты, которые следят за теми людьми, которые, используя вышеизложенные выше методы, разыскивают дыры в скриптах и WEB серверах. Примером такой страницы является

Приложение.

Немного сладкого. Попробуйте сами что-нибудь из следующего списка:

1. #mysql dump filetype:sql — поиск дампов баз данных mySQL
2. Host Vulnerability Summary Report — покажет вам какие уязвимости нашли другие люди
3. phpMyAdmin running on inurl:main.php — это заставит закрыть управление через панель phpmyadmin
4. not for distribution confidential
5. Request Details Control Tree Server Variables
6. Running in Child mode
7. This report was generated by WebLog
8. intitle:index.of cgiirc.config
9. filetype:conf inurl:firewall -intitle:cvs – может кому нужны кофигурационные файлы файрволов? :)
10. intitle:index.of finances.xls – мда.
11. intitle:Index of dbconvert.exe chats – логи icq чата
12. intext:Tobias Oetiker traffic analysis
13. intitle:Usage Statistics for Generated by Webalizer
14. intitle:statistics of advanced web statistics
15. intitle:index.of ws_ftp.ini – конфиг ws ftp
16. inurl:ipsec.secrets holds shared secrets – секретный ключ – хорошая находка
17. inurl:main.php Welcome to phpMyAdmin
18. inurl:server-info Apache Server Information
19. site:edu admin grades
20. ORA-00921: unexpected end of SQL command – получаем пути
21. intitle:index.of trillian.ini
22. intitle:Index of pwd.db
23. intitle:index.of people.lst
24. intitle:index.of master.passwd
25. inurl:passlist.txt
26. intitle:Index of .mysql_history
27. intitle:index of intext:globals.inc
28. intitle:index.of administrators.pwd
29. intitle:Index.of etc shadow
30. intitle:index.of secring.pgp
31. inurl:config.php dbuname dbpass
32. inurl:perform filetype:ini

«Hacking mit Google»

Учебный центр «Информзащита» http://www.itsecurity.ru — ведущий специализированный центр в области обучения информационной безопасности (Лицензия Московского Комитета образования № 015470, Государственная аккредитация № 004251). Единственный авторизованный учебный центр компаний Internet Security Systems и Clearswift на территории России и стран СНГ. Авторизованный учебный центр компании Microsoft (специализация Security). Программы обучения согласованы с Гостехкомиссией России, ФСБ (ФАПСИ). Свидетельства об обучении и государственные документы о повышении квалификации.

Компания SoftKey – это уникальный сервис для покупателей, разработчиков, дилеров и аффилиат–партнеров. Кроме того, это один из лучших Интернет-магазинов ПО в России, Украине, Казахстане, который предлагает покупателям широкий ассортимент, множество способов оплаты, оперативную (часто мгновенную) обработку заказа, отслеживание процесса выполнения заказа в персональном разделе, различные скидки от магазина и производителей ПО.

Что такое гостевая книга?

Разумеется, здесь речь идет о наиболее типичной гостевой книге. Прежде всего это система, предоставляющая пользователю возможности для ввода текста, выбора оценки того или иного сайта, а также для указания собственных данных (ФИО, e-mail, http и т.д.). Это также система представления данных, введенных различными пользователями, с возможностью навигации, отправки электронных писем авторам сообщений. Возможны и вариации с различными настройками и с контролем нормативности лексики.

Что нам понадобится

Конечно, предполагается, что читатель знаком с основами ASP- и SQL-программирования (знакомства с первыми частями настоящей статьи для этого будет вполне достаточно). Кроме того, нам потребуется Microsoft SQL Server 7.0 или 2000, какой-нибудь HTML- или текстовый редактор (рекомендую использовать Macromedia Dreamweaver UltraDev 4.0) и немного терпения.

Создание и подготовка базы данных

Для организации хранения введенных пользователями данных вам понадобиться одна таблица, где можно завести поля для хранения имени пользователя, его электронного адреса, страны проживания, адреса сайта, IP-адреса, значения оценки пользователем сайта по пятибалльной шкале и т.д:

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

  • Запустите программу-конфигуратор источников данных (Data Sources ODBC) — Start->Settings->Control Panel->Administrative Tools->Data Sources ODBC.
  • Перейдите во вкладку System DSN и создайте новый источник данных, нажав на Add…
  • В появившемся списке драйверов выберите драйвер баз данных — Microsoft SQL Server и нажмите на Next.
  • В строке Data Source Name задайте имя вашей базы данных (в описываемом примере Gustbook — это имя, по которому вы в дальнейшем будете обращаться к ней).
  • В строке Server укажите сервер, к которому будет осуществлено подключение, и нажмите на Next.
  • Выберите режим аутентификации With SQL Server…, задайте имя пользователя и пароль для подключения к SQL-серверу; определите протокол связи с сервером (кнопка Client Configuration — TCP/IP) и два раза нажмите на Next, после чего нажмите на Finish.
  • Вы увидите статистику о проделанных действиях, а для проверки источника данных можете воспользоваться кнопкой Test Data Source.
  • В итоге перед вами появится строка в списке источников данных в вашей системе.
Илон Маск рекомендует:  Таблица имен

Теперь, когда база данных готова, можно переходить непосредственно к созданию гостевой книги.

Интеграция системы в уже готовый сайт

Понятно, что сама по себе гостевая книга не имеет смысла. Посудите сами: кому нужен сайт, предназначенный исключительно для сбора мнений читателей. Ведь для того чтобы собирать мнения о чем-либо, надо сначала это что-либо представить на их суд. Следовательно, необходимо уделить особое внимание моментам, связанным с упрощением встраивания системы в уже готовые сайты.

В частности, для упрощения настройки системы под характерные особенности того или иного сайта рекомендуется (как уже говорилось выше) создать специальную таблицу для хранения всех этих предпочтений, чтобы заносить в нее определенные значения, специфические для вашего сайта. Очевидное преимущество такого подхода заключается в том, что для осуществления встраивания системы в уже готовый сайт не потребуется производить изменения в исходном коде модулей, нужно изменить только настройки в соответствующей таблице базы данных.

Представим себе пример реализации такой таблицы: .

Как видите, здесь присутствуют поля для хранения информации об имени и пароле доступа к режиму настройки системы, о цветах основного фона сообщения пользователей, верхней и нижней рамок (поля Mid_Color, Top_Color, Bot_Color соответственно), о цвете и размере заголовка формы, служащей для ввода пользователем данных (поля Form_Color и FormTitleSize соответственно), о цвете, размере и начертании шрифра текста самого сообщения, информационных полей, а также самих страниц с гостевой книгой (поля MessageFontColor, MessageFontSize, MessageFontFace, InfoFontColor, InfoFontSize, InfoFontFace, PageFontColor, PageFontSize и PageFontFace соответственно), полей-переключателей для включения режима автоматической отправки уведомлений о поступлении новых сообщений по электронной почте ответственному лицу (например, менеджеру или администратору сайта), поля хранения электронного адреса ответственного лица, текста сообщения с благодарностями за оставленное пользователем сообщение, со списком недопустимых слов и переключателем режима их фильтрации (если последний включен, то слова, находящиеся в списке недопустимых, будут автоматически заменяться в тексте сообщения на звездочки и таким образом будет осуществлен контроль за нормативностью лексики текстов сайта).


Развитие системы интеграции гостевой книги подразумевает организацию и Web-интерфейса для настройки всех рассмотренных нами параметров (полей таблицы администрирования).

Интеграция системы в уже готовый сайт в чистом виде может создавать некоторые сложности и при восприятии исходного текста, и в дальнейшем, если, например, потребуется временно отключить гостевую книгу на том или ином сайте. Поэтому попытаемся разработать систему таким образом, чтобы ее интеграция в готовый сайт не составила особого труда. Для этого необходимо сформировать независимый модуль системы и включить его в текст основного сайта там, где это необходимо. Так, к примеру, текст страницы вашего сайта может выглядеть следующим образом:

ASP на блюдечке (Часть — 15) – Гостевая книга … …

1.1 Основы SSI

server side includes сервер

Технология SSI (Server Side Includes — включения на стороне сервера, разработанная компанией Questar Microsystems) — несложный язык для динамической «сборки» веб-страниц на сервере из отдельных составных частей и выдачи клиенту полученного HTML-документа. Реализован в веб-сервере Apache при помощи модуля mod_include. Включённая в настройках по умолчанию веб-сервера возможность позволяет подключать HTML-файлы, поэтому для использования инструкций файл должен оканчиваться расширением .shtml, .stm или .shtm

Синтаксис SSI позволяет включать в текст страницы другие SSI-страницы, вызывать внешние CGI-скрипты, реализовывать условные операции (if/else), работать с переменными и т.п. Благодаря крайней простоте языка, сборка SSI-страниц происходит очень быстро, однако многие возможности полноценных языков программирования, например, работа с файлами, в SSI отсутствуют.

При создании сайта многие Вебмастера испытывают сложности с его оформлением, особенно это проявляется в первые этапы разработки. Приходится всё время что-то менять, исправлять и убирать. С одной страницей это легко, но, что делать, когда у Вас более 10 страниц. Возьмем, к примеру, такую ситуацию. У Вас 100 страниц сайта и Вам вдруг неожиданно потребовалось в верхней части каждой страницы поместить какой-то элемент (баннер, ссылка и т.д.) Исправлять 100 страниц очень и очень туго, да и стоит ли. Даже при помощи всяких программ-заменителей это не просто сделать, особенно когда менять не одну строчку, а несколько. Как решить эту проблему?

Решается эта проблема при помощи SSI (Server Side Include). С помощью этой технологии можно собирать страницы по кускам на лету. Технология очень проста — при запросе клиента сервер проверяет документ на наличие специальных команд и выполняет их, если находит. Вот пример, нам надо собрать страницу из двух частей (logo.html и inform1.html). Первая часть сверху — общая часть (логотип, меню и т.д.), вторая часть — сама информационная страничка. Тогда на информационной страничке мы ставим следующую строчку-команду SSI: — путь к файлу logo.html указывается от текущего файла inform1.html.

Предполагаем, что файл logo.html лежит на сайте в каталоге SSI. Таким образом, при запросе на такой файл, сервер выполнит команду INCLUDE и вместо этой команды выдаст содержимое файла logo.html. Для всех предполагаемых страниц сайта можно написать эту команду, тогда при загрузке они будут показывать верхнюю общую часть и своё содержание, естественно. Что это даёт? Теперь достаточно изменять файл logo.html, чтобы изменились все 100 страниц сайта. Причём, меняются не сами страницы, а только этот один файл. Остальные же просто при загрузке выводят его содержимое, которое легко менять. Так, к примеру, можно оформлять в едином стиле весь свой сайт, можно легко менять его дизайн и вид, задавая параметры в общем файле logo.html.

При использовании технологии SSI важно учитывать тот факт, что сервер должен поддерживать для проверки на команды SSI данные расширения файлов. Перед отправкой обычных документов сервер не проверяет их на команды SSI и поэтому работает быстрее, а если он каждый раз проверяет все файлы сайта на SSI, работы сервера замедляется. Для того чтобы этого избежать многие серверы обрабатывают на SSI только файлы определённого типа (Например *.shtm *.shtml и т.д.) Остальные же файлы не просматриваются на такие команды, а отправляются клиенту сразу. Поэтому не удивляйтесь, если Ваши команды SSI не сработали, вероятно, сервер просто не настроен на их проверку. В итоге Вы не увидите ничего, хотя сервер выдаст команду клиенту, браузер никак на неё не отреагирует (для него это обычная ремарка). Важно знать какие типы файлов сервер проверяет на команды SSI. Например, сервер http://webservis.ru проверяет и файлы *.html. Это конечно хорошо и удобно для самих вебмастеров, но нагрузка на сервер выше.

При создании общего стиля использование SSI просто необходимо, так как нужно использовать общую шапку. Многие сайты используют общие и шапку и низ документа. Это позволяет делать практически идентичные по дизайну страницы. Менять общий стиль очень легко. Когда создаёте сайт с большим количеством страниц, всегда используйте SSI.

С точки зрения непрофессионала серверные включения, SSI (Server Side Includes)- это специальные заполнители в HTML-документе, которые сервер будет заменять реальными данными непосредственно перед отправкой на браузер окончательного документа. К тому времени, как документ попадает на браузер, он ничем не отличается от других страниц, как будто данные в HTML-код вставлены вручную. SSI позволяет создавать структуры для страниц, которые будут динамически генерироваться сервером. Для web-авторов он может оказаться мощным сродством управления разработкой сайта и повышения его эффективности. Примеры использования SSI:

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

· размещение одной строкой элемента, который постоянно изменяется. Например, если вы поддерживаете домашнюю страницу, на которой имеется ежедневно меняемой сообщение, используйте команду SSI (и сценарий на сервере) ля автоматического замещения сообщения.

· вывод даты и времени последнего обновления.

· размещение многочисленным пользователям предоставлять содержимое для включения его в web-страницу без предоставления им доступа к исходному HTML коду. Например, возможность передачи еженедельных обновлений по электронной почте. Сервер может запустить сценарий, который преобразует сообщение в текстовый файл и затем командой SSI вставит его на web-страницу.

· SSI может обслуживать web-страницу осуществляющую запрос с браузера. Даже можно обслуживать документы на базе имени домена пользователя.

Для того чтобы сервер знал, что страничка не обычная, а содержит SSI-директивы, она имеет специальное расширение: *.shtml или *.shtm, наличие которого и заставляет web-сервер предварительно обрабатывать странички. Вообще-то, расширение может быть любое — в зависимости от конфигурации web-сервера, но в основном применяется именно *.shtml.

Полная страничка формируется web-сервером на лету, собирая код странички из таких вот блоков. Для того, чтобы указать серверу, какой блок нужно вставить и в каком месте странички, используется специальная форма записи в виде комментария. Вот такая:

Как за 7 дней превратиться из server-side-программиста в client-side

Всем привет! Меня зовут Дмитрий Исайкин, и с недавних пор я занимаюсь мобильной разработкой. Почему с недавних? Еще три месяца назад я был руководителем группы C/C++-разработки Почты Mail.Ru. Но однажды я в очередной раз задумался о том, что мне всё меньше и меньше нравится то, чем я занимаюсь. Больше времени стали отнимать обязанности тимлида: мотивация, стимуляция, отчётность, административные заботы. И тогда я решил: пора что-то менять. Разместил резюме, сходил на несколько собеседований. Всё это время я размышлял о том, чего же я хочу. Мне предложили возглавить направление разработки в одной достаточно крупной фирме, и я практически согласился. Но, «переспав» с этим решением бессонную ночь, я понял, что такая работа будет мне не в радость. Ещё был вариант пойти старшим разработчиком в другую хорошую фирму. Но там пришлось бы заниматься примерно той же работой, что и в предыдущие годы.

То ли в шутку, то ли всерьёз я предложил перейти в другой отдел на позицию iOS-разработчика (это была совершенно незнакомая мне область). Я давно хотел заняться чем-то новым, но меня останавливало неизбежное в этом случае падение доходов. А при внутреннем переходе падения зарплаты можно было избежать. Произошло чудо — меня взяли. Без собеседования, без испытательного срока (на самом деле собеседование всё же состоялось через неделю, в течение которой я по 12 часов в сутки читал документацию, туториалы, Хабр и различные статьи о разработке под iOS). Таким вот образом я, пробыв почти десять лет разработчиком высоконагруженных серверных решений, открыл для себя совершенно новый, чудный и огромный мир клиент-сайда.

Сейчас, спустя три месяца, могу твёрдо заявить, что сделал правильный выбор. За это время я узнал много нового, начал постигать премудрости клиентской разработки. Взглянул на сервер «с другой стороны баррикад» (раньше я занимался серверной частью почтовых сервисов Mail.Ru и My.com, теперь же разрабатываю их мобильные версии).

Разработка сервера и клиента во многом похожи. Но есть и достаточно существенные различия, которые требуют совершенно разных подходов при решении одних и тех же задач. Я уверен, что ещё не скоро стану гуру client-side-разработки, но всё же решил поделиться своими размышлениями по этому поводу. Заметьте, целью данной статьи ни в коем случае не ставилась попытка выяснить, что круче — клиент или сервер. Напротив, я попробую показать, что каждый из этих миров своеобразен, и что разработчик может очень много выиграть от перехода из одной области в другую.

Рабочее окружение

Любая более-менее сложная серверная система состоит из достаточно большого (несколько десятков) количества связанных между собой компонентов. Это базы данных (у нас это были в основном MySQL и Tarantool), очереди, веб-серверы, прокси-серверы, балансировщики, системы мониторинга, резервирования, куча самописных сервисов с нужной нам бизнес-логикой. При разработке нового функционала часто требуется поменять код сразу нескольких компонентов. Для проверки и отладки кода удобно иметь собственную инсталляцию всей системы. Её необходимо развернуть, настроить, наполнить тестовыми данными. А потом периодически обновлять и пересобирать, так как многие компоненты находятся в активной разработке. Кстати, из сложности и гетерогенности серверной системы следует необходимость как-то этой сложностью управлять. Это всевозможные системы развертывания, управления, конфигурирования, мониторинга, диагностики, сбора, анализа и хранения логов. Подчас на разработку этих инфраструктурных компонентов приходится тратить львиную долю сил и времени.

При разработке клиентского мобильного приложения основная часть этой сложности прячется за серверными API. В большинстве случаев в качестве сервера для тестовой версии приложения выступает production-кластер, поэтому от клиентского разработчика не требуется никаких усилий по его поддержке. Всё, что нужно для разработки, — это достаточно мощный ноутбук с установленными SDK и IDE. Ну и тестовый телефон.

Масштабируемость

Как часто это случается в серверной жизни: по какой-то причине (массовые почтовые рассылки на День святого Валентина, или оптимизаторы поискового трафика постарались, или менеджеры купили трафик, или начались крупные распродажи — конкретные сценарии зависят от специфики сервиса) происходит серьёзный наплыв пользователей. Нагрузка на серверную систему возрастает. Одна из подсистем (обычно это база данных) немного деградирует из-за увеличившейся нагрузки, начинает медленнее отвечать или вообще перестаёт укладываться в приемлемое время ответа. Вследствие этого возрастает общее время обработки одного запроса на сервере бизнес-логики, что, в свою очередь, приводит к увеличению числа одновременно работающих процессов-воркеров. На сервере заканчивается свободная память, операционная система, пытаясь обслужить возросшее количество процессов, теперь в основном занимается переключением контекстов и перетасовкой страниц в памяти. Это ещё больше ухудшает положение. Тут в дело включается балансировщик, выкидывая из нагрузки затупивший сервер и тем самым увеличивая нагрузку на оставшиеся в строю серверы. Поздравляем, наш сайт прилёг, и поднять его без снятия нагрузки будет очень проблематично.

Понятное дело, подобные ситуации возникают обычно только в самом начале развития нового сервиса. В дальнейшем либо разработчики исправляют недостаток системы, либо сервис постепенно загибается.

Чтобы успешно переживать такие эксцессы, серверное ПО должно быть достаточно «эластичным» и масштабируемым. Тогда рост нагрузки приведёт не к отказу сервиса целиком, а, например, лишь к незначительной деградации по скорости обработки запросов. В таком случае временное повышение нагрузки можно просто переждать, а если нагрузка возросла навсегда (то есть сервис стал популярнее), достаточно компенсировать её, доставив необходимое количество серверов. Иногда для этого приходится серьёзно перерабатывать архитектуру всего приложения, целенаправленно выискивая и устраняя самые узкие места системы.

В мире клиентского ПО такой проблемы попросту нет. Каждый пользователь приносит с собой устройство со своим процессором и памятью. И сколько бы ни было инсталляций приложения, каждая его копия работает на своём устройстве.

Отказ оборудования

Серверное ПО должно уметь переживать отказ оборудования. Если один из серверов вышел из строя, система обязана продолжить работать как ни в чём не бывало. Мало того, что не должны потеряться пользовательские данные — в идеале пользователи вообще не должны ничего заметить. Для достижения высокой доступности применяются такие приёмы, как репликация данных, серверы горячей замены, резервирование, дублирование серверов, устранение единых точек отказа. Упавшие из-за отказа сервера запросы могут быть перенаправлены на другой сервер группы (зависит от бизнес-логики).

А если, например, телефон выйдет из строя, никто не будет требовать, чтобы приложение продолжало работать на этом устройстве. Пользователь погорюет, конечно, но затем пойдёт и купит себе новый телефон — скорее всего, более крутой и мощный. Снова установит нужные ему приложения и продолжит работать. Главное, чтобы наше приложение не было виновато в поломке телефона.

Пропускная способность и скорость отклика

Пожалуй, одно из самых главных нефункциональных требований к клиентскому приложению — это отзывчивость интерфейса приложения на действия пользователя. Причём существенны именно субъективные ощущения скорости отклика, а не реальное быстродействие. Пользователь не любит ждать: если он обратился к приложению, значит, именно сейчас ему понадобилось сделать нечто важное. И когда приложение тормозит, это раздражает. Замечали, как медленно CI-сервер начинает работать, когда вы уже собираетесь идти домой и просто хотите убедиться, что в этот раз тесты уж точно пройдут успешно? Подчас приходится жертвовать реальной скоростью работы, лишь бы создать у пользователя впечатление максимального быстродействия приложения. Для этого используются, например, анимация и индикаторы прогресса.

Для серверного ПО, напротив, важно умение обрабатывать огромное количество одновременных запросов (пользователей много, серверов мало), желательно с минимальным временем обработки запроса (латентность). Но время генерации ответа — отнюдь не главный параметр при оптимизации. Иногда незначительное увеличение времени обработки позволяет заметно улучшить пропускную способность системы в целом. Например, когда-то для меня было большим откровением, что некоторые клиенты для мемкэша откладывают выполнение запросов на несколько десятков миллисекунд, чтобы сгруппировать их в один запрос.

Обновления

Большим плюсом серверной разработки для меня лично является возможность чёткого контроля версий ПО, работающих в продакшене. Обычно в бою одновременно крутится не больше двух версий (я говорю про in-house-разработку, с коробочными продуктами всё намного хуже). Это позволяет держать в голове один актуальный вариант кодовой базы. После обнаружения и исправления ошибки про неё можно благополучно забыть, не нужно бэкпортировать правки на другие поддерживаемые версии программы, код которых был уже многократно чуть ли не полностью переписан. Не нужно разбираться, присутствует ли там тоже этот баг и как его чинить в этой конкретной вариации кода.

Контроль боевых версий также позволяет относительно легко и слаженно, в несколько этапов, проводить переезд на новую схему данных. Обычно переезд выполняется в три стадии. Сначала выкатывается версия, умеющая читать данные в обоих форматах — и в старом, и в новом. После того, как все удостоверятся, что система работает в штатном режиме, без багов, её сменяет версия программы, которая, как и предыдущая, читает данные в обоих форматах, а вот пишет уже только в новом формате (на самом деле выкатка может заключаться просто во включении опции в конфиге — зависит от конкретного случая). Затем, после окончания полной конвертации данных, код поддержки старого формата полностью удаляется. Переезд завершён.

Итак, на сервере необходимо обеспечить корректное функционирование системы в ситуации, когда часть серверов уже обновили, и они хотят данные в новом формате, а часть серверов — ещё нет, и им подавай данные в старом формате. А вот на клиенте подобной проблемы с миграцией схемы данных вообще не существует. При обновлении приложения в удобный для пользователя момент (когда он сам согласился установить обновление и готов немного потерпеть) можно спокойно сконвертировать данные, в монопольном режиме последовательно применив к ним серию необходимых преобразований. То есть даже нет необходимости в разработке промежуточной версии. Красота.

Но вот зоопарк версий на клиенте точно есть. И мне, как бывшему серверному разработчику, это не нравится. Как только представлю, что кто-то, пользуясь приложенькой, натыкается на уже неделю или месяц как исправленный мною баг… Может, со временем я и привыкну, но пока аж в дрожь кидает!

Например, если на сервере обнаруживается критичная ошибка, мы можем быстренько сделать фикс, разработать комплекс мер по починке поломанных данных, и в короткий срок выкатить этот фикс на production-серверы. В случае мобильного приложения, даже если исправленная версия оперативно попадёт в стор, нельзя гарантировать, что пользователь кинется его обновлять. Кто-то экономит интернет-трафик, кому-то некогда обновляться, у кого-то обновления вообще отключены. А кое-кто мог и вовсе удалить «глючную приложеньку».

Управление ресурсами

Современные мобильные телефоны имеют достаточно серьёзные вычислительные возможности, что позволяет разработчику сконцентрироваться не только на эффективности, но и на красоте кода. Также этому способствуют и популярные в клиентской разработке языки. Я рад, что познакомился с Objective-C именно сейчас, когда в языке уже повсеместно применяется автоматический подсчёт ссылок. С/С++ позволяют очень эффективно использовать ресурсы, и эта возможность оптимизации нередко приводит к излишнему усложнению алгоритма — лишь бы выделить память на стеке, а не в куче, лишь бы уменьшить количество вызовов виртуальных функций. Динамическая природа Objective-C, в котором практически отсутствуют возможности для преждевременной оптимизации, поначалу вызывает внутреннее сопротивление, но через некоторое время напряжение спадает, и у тебя начинает получаться более гибкий, красивый, лаконичный код.

Заключение

Как видите, у клиентского и серверного программиста совершенно разные задачи. Их программы функционируют в совершенно разных условиях, к ним выдвигаются чуть ли не диаметрально противоположные требования. Соответственно, и решают они задачи по-разному. Различаются применяемые подходы, архитектурные решения. Даже взгляды на жизнь у нас отличаются, наверное.

Так стоило ли переходить на другую сторону баррикад? В моём случае — стоило. Часто в нашей жизни высокий профессионализм означает узкую специализацию. Чем больше человек погружается в свою область, тем более сильно «затачивается» под неё. Это естественный процесс. Со временем это, правда, приводит к тому, что человек перестаёт развиваться, узнавать новое. Его знаний и опыта полностью хватает для эффективного решения встающих перед ним задач. Ему становится скучно. В таком случае самым правильным и удачным выбором может стать смена профессии или хотя бы направления.

Итак, вы тоже стали замечать за собой потерю интереса к своей работе? Не торопитесь размещать резюме, для начала я бы посоветовал разобраться в причине. Решится ли проблема сменой работы? Может быть, вы сможете достичь своих целей и выполнения желаний на этой работе, к обоюдной пользе для себя и компании?

Например, вы считаете, что ваши результаты никто не замечает, вы жаждете известности, но она никак не приходит? Тогда имеет смысл выступить со своим докладом на профильной конференции или модном митапе. А может быть, вам надоело постоянно «косячить» и наступать на одни и те же грабли? Извлеките уроки и составьте план, как не допускать подобных ошибок в будущем. Или, например, вы хотите больше полномочий? Большинство руководителей (правильных) с радостью делегируют часть своих обязанностей, если их готов взять способный, надёжный и ответственный человек. Достаточно подойти и попросить. Но учтите, что бóльшие полномочия обычно подразумевают и бóльшую ответственность.

Если вы недовольны качеством выпускаемого вашей командой продукта или вам не нравится подход к разработке или тестированию, планированию релизов (а может быть, у вас и планирования релизов как такового не существует), то вполне может быть, что именно вы сможете всё исправить. Ну или хотя бы что-нибудь усовершенствовать. Проанализируйте, что нуждается в улучшении. Может быть, пора начать писать модульные тесты? Начните, напишите парочку тестов для своего нового функционала. Видите, что менеджер плохо сформулировал вашу задачу? Встретьтесь с ним и попытайтесь прояснить детали, обсудите видимые вами проблемы и недочёты.

Но, предположим, вы всё-таки поняли, что вам не нравится ваша профессия. Давайте выбирать. Главное — не пойти на поводу у моды. Современное общество диктует: конечно же, нужно идти на повышение, становиться начальником — будете попивать кофеёк и ничегошеньки не делать. Во-первых, это неправда — работать придётся очень много, просто обязанности будут другими. А во-вторых, даже если и так, долго ли вы сможете ничего не делать? Есть большая разница — ничего не делать две недели во время отпуска или же всю жизнь. Так что сначала разберитесь, хотите ли вы становиться начальником, брать на себя ответственность за других людей, или это просто дань моде. Очень часто люди оказываются на нелюбимой работе как раз из-за моды. На мой взгляд, самый лучший выход — подыскать вариант, в котором ваш предыдущий опыт позволит получить синергический эффект. Например, если вы были отличным менеджером по закупкам, ваш опыт может помочь вам стать отличным менеджером по продажам.

Программистам могу посоветовать попробовать силы в тестировании. Ваши навыки и знание специфики разработки помогут вам при соответствующем желании стать очень хорошим тестировщиком. По сути, задача тестировщика — убедиться, что программа удовлетворяет заявленным характеристикам. Задача программиста — сделать, чтобы программа им удовлетворяла. Задачи похожие, но разные. И проблемы возникают разные. И решать их нужно по-разному. Опыт в смежной области может очень сильно помочь. Аналогично тестировщик может попробовать свои силы в разработке. Его навыки тестирования и взгляд на систему с точки зрения обеспечения и контроля качества помогут ему стать очень хорошим программистом. Опять же при наличии желания и способностей.

Если вы тоже решили заняться клиентской разработкой под iOS, не откладывайте в долгий ящик. Для получения начальных знаний достаточно прочитать несколько руководств на официальном сайте Apple. Кроме того, на GitHub полно готовых проектов практически по всем тематикам. Читайте их код — это позволит вам быстрее и полнее понять практические аспекты и секреты разработки под iOS.

Server side includes основы и приемы использования

config — контролирует различные аспекты сканирования. Его атрибутами могут быть:

  • errmsg — устанавливает сообщение, выводящееся при возникновении ошибки; в большинстве случаев целесообразно установить в пустую строку;
  • sizefmt — устанавливает формат, в котором будет выводиться размер файла. Формат соответствует передаваемому библиотечной функции strftime;
  • timefmt — устанавливает формат, в котором будет выводиться дата.

Переменные для sizefmt:

Переменные для timefmt:

Формат Описание Пример
%a Краткое название дня недели Mon
%A Полное название дня недели Monday
%b Аббревиатура названия месяца Dec
%B Полное название месяца December
%d День месяца 01 (не 1)
%D Дата в формате «%m/%d/%y» 12/31/99
%e День месяца 13
%H Часы в 24-часовом формате 13
%I Часы в 12-часовом формате 01
%j День года 235
%m Номер месяца 01
%M Минуты 03
%p AM/PM (до полудня/после) AM
%r Время в формате «I:M:S p» 11:35:46 PM
%S Секунды 34
%s Время в секундах с 01.01.1970 957228726
%T Время в формате «%H:%M:%S» 14:05:34
%U Неделя года 16
%w Номер дня недели 4
%y Год в формате ГГ 99
%Y Год в формате ГГГГ 1999
%Z Временная зона MSK

Обратите внимание на то, что команды #config sizefmt и #config timefmt влияют на все связанные с ними SSI-команды от того места, откуда они были вызваны и до самого конца страницы. Поэтому каждый вызов команд #flastmod и #fsize лучше снабжать своей командой #config.

set — устанавливает значение переменной. Ее атрибутами являются var, определяющий имя переменной, и value, определяющий ее значение.

Подстановка переменных производится внутри заключенных в кавычки строк в большинстве аргументов SSI директив. В этих случаях знак доллара можно вставить, предварив его слешом:

Для предотвращения двусмысленности можно заключать имя переменной в фигурные скобки:

В результате такого присвоения переменная Zed будет иметь значение «Xbc_Y», если переменная a равна X, а переменная abc равна Y.

printenv — Выводит список так называемых «переменных окружения» («environment variables») с их значениями. Вызывается без параметров. В их числе переменные:

  • DOCUMENT_ROOT (название основной папки для вебстраниц на сервере, обычно ваша папка public_html и путь к ней)
  • HTTP_USER_AGENT (название браузера, которым пользуется посетитель)
  • REMOTE_ADDR (IP-адрес посетителя)
  • REMOTE_HOST (адрес посетителя в нормальной форме — например, adsl53.peterlink.ru)
  • SERVER_ADDR (IP-адрес вашего сайта)
  • SERVER_NAME и HTTP_HOST (адрес сервера, типа userguide.webservis.ru),
  • DOCUMENT_URI, REQUEST_URI и SCRIPT_NAME (запрошенная вами страница, типа /examples/mysqlexample.shtml.),
  • DOCUMENT_NAME (имя файла (без каталогов) документа, запрошенного пользователем),
  • SCRIPT_FILENAME (полный путь к вебстранице на сервере. Например /home/home-webservis/public_html/ и так далее),
  • SERVER_SOFTWARE (название сервера, например, Apache/1.3.2 (Unix))
  • SERVER_ADMIN (почтовый адрес владельца сервера, указанный при установке),
  • DATE_LOCAL (сегодняшниее время и дата в вашем часовом поясе(для сервера)),
  • DATE_GMT (текущее время по Гринвичу),
  • LAST_MODIFIED (дата последней модификации документа, запрошенного пользователем. То есть во вложенном SSI эта переменная будет содержать имя «главного» документа, а не вложенного).

echo — выводит значение установленной переменной SSI. Допустимые атрибуты:

flastmod — выводит дату последней модификации файла в определенном с помощью timefmt формате. Атрибуты аналогичны атрибутам fsize.

fsize — выводит размер файла в определенном с помощью sizefmt формате. Допустимые атрибуты:

  • file — определяет путь к файлу, относительно сканируемого документа;
  • virtual — определяет стандартный кодированный URL, относительно сканируемого документа, или, при наличии в начале слеша (/) — относительно корня документов узла.

include — включает текст другого документа или файла в сканируемый файл. К включаемому файлу применяются все установленные правила ограничения доступа. Если для каталога, из которого включается файл, установлена опция IncludesNOEXEC, и включение данного документа привело бы к запуску программы, то документ не включается, и выводится сообщение об ошибке. CGI сценарии вызываются, как обычно с помощью URL, который может содержать кодированную строку запроса (query string). Положение файла указывается с помощью атрибутов:

  • file — указывает путь, относительно сканируемого документа; путь не может содержать ../ и не может быть абсолютным путем; всегда предпочтительнее использовать атрибут virtual;
  • virtual — содержит кодированный URL, относительный или абсолютный; URL не может содержать имя протокола или имя хоста, и может содержать строку запроса.

Условные операторы

Базовыми элементами контроля являются:

Элементы elif и else являются необязательными.

Элемент endif заканчивает элемент if и является обязательным.

test_condition может быть одним из следующих:

  • string — истинно, если string не пуста;
  • string1 = string2
  • string1 != string2
  • string1 string2
  • string1 >= string2
  • всё вышеперечисленное истинно, если выполняется условие сравнения;
  • string1

string2 — истинно, если string1 содержит в себе string2;

string1 =

/string2/ — истинно, если string1 содержит в себе string2, а string2 — регулярное выражение Unix (см. ниже).


Если string2 имеет форму /string/, то тогда она интерпретируется, как регулятное выражение. Их синтаксис аналогичен синтаксису регулярных выражений в Unix команде egrep;(см. Регулярные выражения)
(test_condition) — истинно, если test_condition истинно;
! test_condition — истинно, если test_condition ложно;
test_condition1 && test_condition2 — истинно, если как test_condition1, так и test_condition2 истинны;
test_condition1 || test_condition2 — истинно, если хотя бы test_condition1 или test_condition2 истинно.
«=» и «!=» имеют больший приоритет, чем «&&» и «||», а «!» имеет наивысший приоритет.

Все, что не распознается, как переменная, считается строкой. Если строка имеет пробелы или символы табуляции, то ее надо заключать в кавычки.
О чём стоит помнить, так это о том, что лучше не использовать SSI-команды при создании страниц в редакторах типа Front Page — они их обычно не понимают и выкидывают, и о том, что одну SSI-команду нельзя вызвать из другой (как нельзя вызвать SSI-команду из скрипта, и скрипт из скрипта).

zoonman ·ru ПроектыСтатьи и заметки

Как это включается.

Чтобы включить этот модуль, в конфигурационный файл httpd.conf Apache нужно включить указание обработки файлов сервером:

Как правило, а может это так и есть, данный файл расположен по адресу /etc/httpd/httpd.conf если вы работаете под Linux или путь_к_серверу/conf/httpd.conf под Windows. Но помните, из правил бывают и исключения.

Отмечу такую особенность, что на модуль mod_include еще ссылаются mod_cgi, mod_expires.

Еще желательно добавить указание разрешения обрабатывать файлы в директории по умолчанию.

Можно слегка защититься указав директиву IncludesNOEXEC:

Если вы хотите использовать файл .htaccess для включения парсинга, то в нем нужно указать:

И не забыть про разрешение обрабатывать файл .htaccess:

Есть еще один оригинальный метод включения SSI обработки — это директива XBitHack, установка её в on приводит к тому, что все файлы имеющие флаг «выполняемый», будут обрабатываться:

Для присвоения такого флага для файлов нужно дать команду (при работе в Unix-системах)

Известно, что в конфигурации по умолчанию Apache отдает SSI страницу без даты ее последней модификации, потому что расчет её достаточно сложен. Естественно это приводит к некэшируемости страницы и, за счет этого, увеличению расходов по передаче трафика. Проблема кэширования страниц стоит уже давно, тут надо строго определиться, нужно ли вам её кэшировать или нет. Если на странице представлена динамичная информация, то кэшировать не стоит, иначе придется призадуматься. Пока вы ломаете голову, я вернусь к решению проблемы. Тут есть два пути:

  1. Использовать XBitHack Full запись в конфигурации. Это приведет к тому, что дата последней модификации будет установлена по дате запрашиваемого файла. Например, ежели запрошен файл projects.shtml , а он включает в себя cms.shtml и profiler.shtml , то дата будет отправлена по файлу projects.shtml .
  2. Использовать директивы модуля mod_expires, которые указывают браузеру и прокси-серверам возможность кэширования страницы.

В Apache 2.x появилась возможность применения фильтров:

Все начинается с элементарных конструкций, называемых директивами. Общий вид:

Внешне это выглядит как обычный HTML комментарий, поэтому если ваш сервер не обрабатыет SSI-страницы, то в браузер не выводится никаких ошибок, по крайней мере их просто не видно, но в коде страницы они все равно присутствуют. В случае, когда SSI уже работает, директивы заменяются результами.

element — элемент, команда указывающая на действие

attribute — атрибут команды

value — значение атрибута

Значение атрибута часто бывает заключено в двойные кавычки. Многие команды разрешают только одну пару атрибут=»значение» . Существует замечание относительно окончания команды « , оно должно обязательно отделяться пробелом от выражения, иначе может быть воспринято как часть выражения или, к примеру, значения атрибута.

Рассмотрим базовые директивы:

Такая конструкция позволяет просто включить файл my_included_file.inc не производя над ним никаких действий. В качестве такого файла может быть статичная веб-страница.

Значение атрибута file — это путь относительно директории, содержащей вызываемый документ. Он не может содержать ../ или абсолютный путь, то есть находящейся в той же папке, что и вызывающий файл.

Server side includes основы и приемы использования

А! Так Вы даже и не знаете, что это такое? И, тем более, не понимаете, зачем он Вам нужен? Что же, значит, Вы пришли, куда надо. Сегодня здесь всем объясняют — зачем им нужен SSI :-)

Как все нормальные люди, вначале расшифруем аббревиатуру SSI — Server S >SSI — это директивы, вставляемые прямо в HTML-код и служащие для передачи указаний Wев-серверу. Встречая такие директивы, которые, кстати, называются SSI-вставками, Web-сервер интерпретирует их и выполняет соответствующие действия. Какие, спросите Вы? А вот, например: вставка HTML-фрагмента из другого файла, динамическое формирование страничек в зависимости от некоторых переменных (например, типа броузера) и другие не менее приятные вещи.

Преимущества SSI проявляются, когда нам нужно поддерживать достаточно большой по объему сайт, имеющий определенную структуру и повторяющиеся элементы кода на всех страничках. Вообще, при применении серверных включений сайт удобно рассматривать как состоящий из отдельных блоков, каждый из которых отвечает за свою часть странички. Эти блоки практически неизменны и повторяются от страницы к странице. В эти блоки можно вынести такие элементы странички как: главное меню, рекламные вставки, повторяющиеся элементы оформления страничек и т.д. Физически эти блоки представляют собой просто HTML-файлы, содержащие часть кода, нужную для выполнения их задачи.

Для того, чтобы сервер знал, что страничка не обычная, а содержит SSI-директивы, она имеет специальное расширение: *.shtml или *.shtm, наличие которого и заставляет web-сервер предварительно обрабатывать странички. Вообще-то, расширение может быть любое — в зависимости от конфигурации web-сервера, но в основном применяется именно *.shtml.

Полная страничка формируется web-сервером на лету, собирая код странички из таких вот блоков. Для того, чтобы указать серверу, какой блок нужно вставить и в каком месте странички, используется специальная форма записи в виде комментария. Вот такая:

SSI-команд насчитывается около десятка, но я расскажу только о самых употребимых. Самая популярная команда — это команда включения содержимого одного файла в другой:

Результатом ее выполнения будет вставка содержимого файла file.ssi в месте появления данной директивы. При просмотре сформированного исходника HTML-файла мы не увидим никаких признаков SSI, т.к. данный механизм действует абсолютно прозрачно для броузеров, они получают исключительно корректный HTML-код.

Следующая команда — это команда установки значения переменной:

В данном случае мы определили переменную с именем pic и присвоили ей строковое значение «picture.gif». Значение переменной pic теперь доступно внутри SSI-вставки, и мы можем его использовать по нашему усмотрению. Например, используя одну и ту же SSI-вставку, но с разными значениями определенной в ней переменной, мы получим различные результаты. Перед тем, как показать реальный пример использования переменных в SSI-включениях, я расскажу о некоторых командах, применяемых при работе с переменными. Во-первых, это команда печати значения переменной:

Ее выполнение приведет к тому, что в месте появления команды напечатается значение переменной pic, т.е. «picture.gif».

Переменная может участвовать в выражениях, в этом случае перед ней ставится знак ‘$’, показывающий, что это именно переменная, а не просто текст. Вот пример:

После такого присвоения переменная B будет содержать строку «123456». Если же в текст понадобится просто вставить знак ‘$’ или какой-нибудь из других специальных знаков, то его нужно предварить слешем, вот так: ‘\$’. В некоторых случаях для избежания двусмысленности значение переменной может быть заключено в фигурные скобки: «$».

Более сложное применение переменных возможно с использованием условных операторов, имеющих следующую форму написания:

В зависимости от результатов проверки мы можем подставить тот или иной фрагмент кода. Допустим, мы можем проанализировать тип броузера пользователя и в зависимости от этого выдать либо код для Netscape Navigator-а, либо Internet Explorer-а. Это может оказаться полезным в некоторых случаях, когда невозможно сделать страничку, которая корректно отображалась бы в обоих броузерах. Вот пример использования условного оператора:

В данном случае условием проверки является существование переменной $Monday и, в зависимости от этого, подстановка того или иного HTML-кода.

Теперь давайте рассмотрим реальный пример применения SSI для формирования сложного документа из нескольких SSI-вставок. Вначале напишем текст основного HTML-документа, полагая, что SSI-вставки находятся в каталоге /ssi:

index.shtml

Теперь напишем код для этих SSI-вставок:

_header.shtml

Как видите, основной документ предельно упрощен и состоит из директив, устанавливающих значения переменных title, keywords и description, которые и будут подставлены в код странички при обработке SSI-вставок, определяющих код для верхней и нижней частей странички. Реальный код SSI-вставок обычно гораздо сложнее и может включать в себя большее количество определяемых переменных и сложных условий, формирующих окончательный вид странички.

Первое преимущество SSI с точки зрения дизайнера заключается в том, что при таком подходе web-мастеру, занимающимуся поддержкой сайта, можно не бояться случайно испортить дизайн. Элементы сложной верстки скрыты за счет использования SSI, и поддержка содержимого страничек становится гораздо более легким и приятным делом.

Второе, не менее важное преимущество, — это возможность мгновенной замены дизайна сайта, не требующая переделывания страничек с информационным содержанием сайта. Для смены дизайна достаточно переписать SSI-вставки, формирующие внешний вид сайта. В нашем случае это файлы _header.shtml и _footer.shtml.

Вот, вкратце то, что можно рассказать о SSI. Если Вас это заинтересовало, то возможно Вам будет интересно прочитать статью на сайте web-клуба, где об этом написано более подробно и приведен полный список SSI-директив с примерами.

Что такое SSI. Учебное пособие Apache: введение в технологию Server Side Includes

Сервер Apache может реализовывать несколько механизмов для генерации динамического содержимого. Рассмотрим один из простейших — метод вставок или SSI (Server Side Includes, включения на стороне сервера).

Суть технологии — в страницу добавляются простейшие инструкции, которые при запросе этой страницы выполняются. Эта технология не является языком программирования, набор инструкций весьма невелик, а сами инструкции очень просты и касаются в основном вывода неких значений, вызова сторонних программ в процессе передачи документа и добавления в документ содержимого других документов.

Следует отметить, что SSI представляет собой механизм добавления динамического содержимого ограниченного объема к web-страницам. В соответствии с этим методом часть или все содержимое, имеющееся в наличии на сервере, маркируется как потенциально содержащее код SSI, включенный в код HTML. При обслуживании страницы сервер Apache сначала просматривает ее на наличие инструкций SSI и вносит изменения в соответствии с обнаруженными инструкциями в передаваемый браузеру пользователя результат. Поддержка данной технологии включена в Apache, но отключена обработка по умолчанию и основной причиной этого является падение производительности, ведь сервер будет вынужден просматривать всё передаваемое содержимое, либо как минимум какую-то часть передаваемого содержимого, что естественно ведёт к повышению нагрузки по сравнению с простой отдачей страниц пользователю. По той же причине, при включении обработки, рекомендуется ограничить действие SSI как можно меньшим числом каталогов или/и файлов. Технологии SSI в архитектуре web-сервера Apache реализуется модулем «mod_include», обрабатывающий любой документ, для которого в конфигурации указан обработчик «server-parsed». Также любой документ, имеющий MIME-тип text/x-server-parsed-html или text/x-server-parsed-htmls будет проанализирован данным модулем из-за соображений обратной совместимости. Кроме того можно принудительно указать «фильтр» для вывода файлов определённого типа.

Для включения возможности использования SSI используется директива «Options +Include», либо, для немного более безопасного метода включения этого режима и исключающая запуск сценариев: «Options +IncludeNOEXEC».

Чтобы включить обработку SSI-инструкций для всех файлов с расширением html, необходимо указать следующие инструкции:

AddOutputFilter INCLUDES .html

Указывать эти инстукции можно как в глобальном файле конфигурации веб-сервера (httpd.conf), так и в.htaccess, расположенном в некотором каталоге.

Из соображений повышения производительности необходимо произвести разделение страниц с использованием конструкций SSI и без них, это может быть реализовано двумя путями:

    Выделить отдельный каталог для файлов, имеющих SSI. Диапазон действия директивы может быть ограничен парой директив Location, или директив Directory, или размещением в файле.htaccess, находящемся в этом каталоге. Например:

AddType text/html .shtml

AddOutputFilter INCLUDES .shtml

Директивы во втором варианте сообщает серверу, что файлы с расширением shtml соответствуют MIME-типу text/html, а также что перед передачей таких файлов их нужно «пропускать через фильтр», который и будет обрабатывать SSI-инструкции. Конечно использовать именно расширение. shtml не обязательно, но такой метод является наиболее традиционным.

Единственной директивой модуля mod_include является директива XBitCrack. Если ее установить в значение on, это будет означать, что сервер станет рассматривать как SSI-документы только те файлы, у которых в файловой системе установлен бит «executive».

Помимо значений off и on, директива XBitCrack имеет опцию full, задающую серверу режим вставки заголовка Last-Modified при передаче файла. Это позволяет proxy—серверу производить кэширование.

Мы разобрались с принципами работы SSI, подключением обработки и способами указания какие файлы надо обрабатывать, теперь необходимо рассмотреть, что обрабатывать — команды, используемые в технологии SSI.

Команды SSI

Инструкции SSI имеют вид:

#element attribute1=value1 attribute2=value2 .

Следует заметить, что с точки зрения HTML такая инструкция является комментарием.

Команда echo

Команда echo предназначена для отображения значения переменной окружения. Параметр var обязателен и должен содержать имя выводимой переменной.

IP клиента — #echo var=»REMOTE_ADDR»

Браузер клиента — #echo var=»HTTP_USER_AGENT»

Сервер — #echo var=»SERVER_NAME»

Переход со страницы — #echo var=»HTTP_REFERER»

Команда include

Используется для вставки в документ другого документа.

Файл, который будет подключаться в документу, указывается в значении одного из двух возможных атрибутов: file или virtual. Их различие в том, что значением file должен быть путь к файлу относительного текущей папки (например: «../../files/somefile.html»). Значением атрибута virtual может содержать URL с одним лишь ограничением — этот URL должен принадлежать тому же серверу, на котором расположен документ, в который производится вставка.

Очень удобно использовать эту команду для организации сайта. Можно выделить в отдельные файлы неизменные части страниц (заголовок, меню, подвал), и всякий раз подключать их в новые страницы.

Команда flastmod

Команда предназначена для вывод даты-времени последней модификации файла.

Файл «any_file.doc» последний раз менялся: #flastmod file=»any_file.doc»

Формат вывод этой команды можно настроить командой config, меняя значение timefmt.

Команда printenv

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

Ветвление с помощью SSI


SSI позволяет выполнять ветвление. По сути процесс сводится к тому, что в зависимости от условия какие-то части документа выводятся, а какие-то не выводятся. Применяются if, elif, else, endif.

Содержимое одной ветки

Содержимое другой ветки

Содержимое третьей ветки

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

Ваше местоположение на сайте:

|| Что такое SSI (Server Side Includes)? | 6.4 Учебное пособие Apache: введение в технологию Server Side Includes

6.4 Учебное пособие Apache: введение в технологию Server Side Includes

Перевод

Технология Server-side includes предоставляет средства для добавления динамического содержания к уже существующим документам.

Введение

Эта статья описывает технологию Server Side Includes, которую обычно называют просто SSI. В этой статье я расскажу о конфигурировании вашего сервера для разрешения SSI, и объясню некоторые основные методики SSI для добавления динамического содержания к уже существующим HTML-страницам.

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

Что такое SSI?

Технология SSI (Server Side Includes) – это директивы, которые помещаются в HTML-страницы и оцениваются на сервере, когда обращаются к страницам. Она позволяет вам добавлять динамически сгенерированное содержание в существующую HTML-страницу без необходимости обработки всей страницы через CGI-программу или другую динамическую технологию.

Решение о том, когда использовать SSI, и когда ваша страница полностью генерируется какой-либо программой, состоит обычно в вопросе о том, насколько страница является статической, и сколько раз необходимо проводить повторную оценку, когда обращаются к странице. Технология SSI великолепный способ для добавления маленьких кусочков информации, например, текущего времени. Однако, если большая часть вашей страницы генерируется во время обращения к ней, то вам лучше поискать другое решение.

Конфигурирование сервера для разрешения SSI

Чтобы разрешить SSI на вашем сервере, вы должны иметь следующую директиву либо в файле httpd.conf, либо в файле.htaccess:

Options +Includes

Это сообщает серверу Apache, что вы хотите разрешить обработку в файлах директив SSI. Обратите внимание на то, что большинство конфигураций содержат многочисленные директивы OPTIONS, которые могут преодолевать друг друга. Вам, возможно, понадобится Options для определения папки, где вы хотите активизировать SSI, чтобы обеспечить работу этой технологии.

Не любой файл анализируется на наличие директив SSI. Вы должны сообщить серверу Apache, какие файлы следует анализировать. Существует два способа сделать это. Вы можете сообщить серверу Apache, чтобы он анализировал любой файл с особым расширением, таким как.shtml, с помощью следующих директив:

Директива XBITHACK просит сервер Apache анализировать файлы на наличие директив SSI, если они имеют исполняемый битовый набор. Таким образом, для добавления директив SSI в существующую страницу, вам следует только сделать файл исполняемым с использованием chmod, не менять название файла.

chmod +x pagename.html

Краткий комментарий о том, что не делать. Вы можете случайно увидеть рекомендации людей о том, чтобы вы только сообщили серверу Apache анализировать все файлы.html на наличие SSI, так что бы вам не надо путаться с названиями файлов.shtml. Эти люди, скорее всего, не слышали о директиве XBITHACK. Следует помнить, что, выполняя такой совет, вы требуете, чтобы сервер Apache просматривал каждый единичный файл, который посылается клиентам, даже если они не содержат каких-либо директив SSI. Это может привести к замедлению работы, и это – не очень хорошая идея.

Конечно, в Windows нет исполняемых битов для установки, что ограничит немного ваши варианты. В своей конфигурации по умолчанию сервер Apache не отсылает последнюю дату обновления или заголовков HTTP длины содержания на SSI-страницах, так как эти значения трудны в расчете для динамического содержания. Это может помешать кешированию вашего документа, и в результате замедлит работу клиента. Есть два способа решить эту задачу:

  1. Используйте конфигурацию XBitHack Full. Она потребует у сервера Apache определить последнюю дату обновления с помощью просмотра только даты создания запрашиваемого файла, игнорируя дату модификации любых включаемых файлов.
  2. Используйте директивы, предоставляемые модулем MOD EXPIRES, для установки явного времени устаревания ваших файлов, что позволит обозревателям и прокси-серверам знать, что они доступны для кеширования.

Основные директивы SSI

Директивы SSI имеют следующий синтаксис:

Элемент echo только выводит значение переменной. Существует ряд стандартных переменных, которые включают набор переменных окружения, доступные в CGI-программах. Кроме этого, вы можетет определить свою собственную переменную с помощью элемента set.

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

Этот элемент тоже подчиняется конфигурациям формата timefmt.

Включение результатов CGI-программы

Это – одно из обычных использований технологии SSI – вывод результатов CGI-программы, например, для любимой всеми программы счетчика посетителей («hit counter»).

Конечно, вам нужно будет заменить ssi.shtml на реальное название файла, на который вы ссылаетесь. Может возникнуть проблема, если вы лишь ищите сгенерированную часть кода, которую вы можете вставить в любой файл, так что вместо этого вам, возможно, захочется использовать переменную LAST MODIFIED:

This file last modified

Для получения более подробной информации по формату timefmt, обратитесь к вашему любимому поисковому сайту и поищите strftime. Синтаксис – такой же.

Включение стандартного нижнего колонтитула (footer)

Если вы управляете сайтом, который содержит множество страниц, то вы можете обнаружить, что изменения для всех таких станиц может стать серьезной головной болью, в частности, если вы пытаетесь поддерживать стандартный вид для всех страниц. Использование файла для верхнего (header) и/или нижнего (footer) колонтитула может уменьшить трудности такого обновления. Вы лишь должны сделать один файл нижнего колонтитула (footer), и затем включить его в каждую страницу SSI-командой include. Элемент include может определить, какой файл включить, с помощью атрибутов: либо file, либо virtual. Атрибут file – это путь к файлу, относительный к текущей папке. Это значит, что он не может быть абсолютным путем к файлу (начинающийся с /), и не может содержать../ как часть пути. Атрибут virtual, возможно, более полезен, и должен определять адрес URL, относительный к извлекаемому документу. Он может начинаться с /, но должен быть на том же сервере, где расположен данный файл.

Если вы хотите изменить это сообщение на другое, то вы можете сделать это с помощью атрибута errmsg элемента config:

Надеюсь, что конечный пользователь никогда не увидит такое сообщение, так как вы решить все проблемы до того, как запустите свой сайт. (Хорошо?).

Вы можете с помощью config конфигурировать формат, в котором выводится размеры файлов с помощью атрибута sizefmt. Вы можете определить bytes для полного подсчета в байтах или в abbrev для сокращенного числа в Кб или Мб, соответственно.

Исполняемые команды

Я надеюсь, что через некоторое время в следующие месяцы напишу статью об использовании SSI с маленькими CGI-программами. Ниже показано, что вы можете делать с элементом exec. Вы фактически можете с технологией SSI выполнить команду, используя оболочку (/bin/sh, если быть точным – или оболочку DOS, если у вас Win32). Следующие примеры предоставляют вам перечень директив.

Вы могли бы заметить некоторую странность форматирования этой директивы для Windows, так как вывод команды dir содержит строку » «, что сбивает обозреватели.

Обратите внимание на то, что эта особенность очень опасна, так как будет выполнятся любой код, который включен в тег exec. Если у вас ситуация, когда пользователи могут редактировать содержание на ваших веб-страницах, например, на «гостевой странице», убедитесь, что вы отключили эту характеристику. Вы можете разрешить использование SSI, но без функции exec, установив аргумент IncludesNOEXEC для директивы Options.

Расширенные способы технологии SSI

Дополнительно к приведенному содержанию, SSI на сервере Apache предоставляет вам возможность определять переменные и использовать эти переменные в сравнениях и условных операторах.

Предупреждение

Большинство из обсуждаемых здесь характеристик доступны только для серверов Apache 1.2 или выше. Конечно, если вы не используете Apache 1.2 или выше, то вам нужно обновить его немедленно. Делайте. Мы ждем.

Определение переменных

Используя директиву set, вы можете определить переменную для ее использования позже. Нам это понадобится позже при обсуждении, так что мы поговорим об этом здесь. Синтаксис определения следующий:

Для использования символа доллара в значение переменной, вам необходимо использовать обратную косую черту для обхода знака доллара.

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

Теперь, когда мы имеет переменные и способны определять и сравнивать эти значения, мы можем использовать их для выражения условий. Это позволяет технологии SSI быть в своем роде крошечным языком программирования. Модуль MOD INCLUDE предоставляет структуру if, elif, else, endif для создания условных выражений. Это позволяет вам эффективно генерировать несколько логических страниц из одной реальной страницы.

Структура этой условной конструкции:

Это установит переменные окружения “Mac” и “InternetExplorer” как «true», если клиент работает с Internet Explorer на Macintosh.

Затем, в вашем документе с активизированной технологией SSI вы можете ввести следующие строки:

Apologetic text goes here Cool JavaScript code goes here

Обратите внимание на то, что я не имею ничего против IE на Macs – я просто боролся в течение нескольких часов на прошлой неделе, пытаясь заставить работать JavaScript в обозревателе IE на Mac, хотя он работает везде. Вышеуказанное было временным обходным маневром. Любая другая переменная (либо несколько, которые вы определяете, или нормальные переменные окружения) может использоваться в условных выражениях. Со способностью сервера Apache устанавливать переменные окружения с помощью директивы SetEnvIf и другими связанными директивами, эта функциональность может позволить вам привлечь определенную динамическую среду без обращения к CGI.

Заключение

Технология SSI определенно не является заменой для CGI или других технологией, используемыми для генерирования динамических веб-страниц. Однако, это хороший способ добавлять небольшое количество динамического содержания на страницы без выполнения большой дополнительной работы.

#include virtual – подобно #include file включает текст другого файла в текущий файл или запускает cgi-script. В отличие от #include file может содержать относительный или абсолютный путь без названия протокола (HTTP://) и доменного имени (сайт) – то есть, не может указывать на файл другого сайта (для экспорта файлов другого сайта применяется PHP).

В директиве допускаются пути типа:

example/_ssi.html – указывает на файл _ssi.html, находящийся в подкаталоге example текущего каталога.

../_ssi.html – указывает на файл _ssi.html, находящийся в каталоге, в котором вложен текущий (родительском).

/_ssi.html – указывает на файл _ssi.html, находящийся в корневом каталоге сайта (для это файл http://сайт/_ssi.html).

#fsize file – Вставляет размер указанного файла. Файл, размер которого определяется, должен находиться на том же сайте, что и файл, содержащий данную инструкцию. Более того, он должен находится либо в том же каталоге, либо во вложеном каталоге.

#fsize virtual – Вставляет размер указанного файла. В отличие от #fsize file может содержать относительный или абсолютный путь без названия протокола (HTTP://) и доменного имени и, таким образом, указывать на файл в другом каталоге того же сайта.

Например: Выведет размер данного файла: 37K.

Формат размера определяется по SSI-инструкции .

#flastmod file – Вставляет дату последней модификации указанного файла. Файл, дата модификации которого определяется, должен находиться на том же сайте, что и файл, содержащий инструкцию. Так же, он должен находится либо в том же каталоге, либо во вложеном каталоге.

#flastmod virtual – Вставляет дату последней модификации указанного файла. В отличие от #flastmod file может содержать относительный или абсолютный путь без названия протокола (HTTP://) и доменного имени и, таким образом, указывать на файл в другом каталоге того же сайта.

Например: Выведет дату последней модификации данного файла: 10.08.2014 г.

Формат даты определяется по SSI-инструкции .

#exec cmd – Запускает внешнюю программу и вставляет в содержимое страницы результат ее выполнения.

#exec cgi – Подобно #exec cmdзапускает cgi-скрипт и вставляет в содержимое страницы результат его выполнения.

#config errmsg – определяет сообщение, выводящееся в текст при возникновении ошибки. Поскольку сообщение выводится прямо в текст страницы, может иметь смысл привести его к пустой строке ( ) или попросить посетителя сообщить автору об ошибке ( ).

#config timefmt – определяет формат даты для команды , используя следующие параметры:

Формат SSI-директивы #config timefmt

Формат Описание Пример
Формат Описание Пример
%a Краткое название дня недели Mon
%A Полное название дня недели Monday
%b Аббревиатура названия месяца Dec
%B Полное название месяца December
%d День месяца 01 (не 1)
%D Дата в формате «%m/%d/%y» 12/31/99
%e День месяца 13
%H Часы в 24-часовом формате 13
%I Часы в 12-часовом формате 01
%j День года 235
%m Номер месяца 01
%M Минуты 03
%p AM/PM (до полудня/после) AM
%r Время в формате «I:M:S p» 11:35:46 PM
%S Секунды 34
%s Время в секундах с 01.01.1970 957228726
%T Время в формате «%H:%M:%S» 14:05:34
%U Неделя года 16
%w Номер дня недели 4
%y Год в формате ГГ 99
%Y Год в формате ГГГГ 1999
%Z Временная зона MSK

В результате, не подготовленная команда дает следующий вывод: 10.08.2014 г

И эта же команда, после SSI директивы , выдаст: 10.08.2014 г

#config sizefmt – определяет формат размера для команды . настраивает на вывод размера файла в килобайтах (37K), а – в байтах (37,782)

#printenv – Подобно команде SET старого, доброго DOS-а, выводит текущие значения переменных окружения, такие как:

HTTP_USER_AGENT – название браузера, которым пользуется посетитель.

REMOTE_ADDR – IP-адрес посетителя.

REMOTE_HOST – адрес посетителя в нормальной форме.

SERVER_ADDR – IP-адрес сайта.

SERVER_NAME – адрес сервера.


CHARSET_HTTP_METHOD – протокол ((none))

REQUEST_METHOD – метод запроса страницы (GET)

HTTP_HOST – имя сайта (сайт)

REQUEST_URI – вся строка запроса, без указания протокола и имени сайта (/docs/ssi.html)

QUERY_STRING – все, что находилось в адресной строке после вопросительного знака (обычно это параметры форм) Попробуйте вызвать эту страницу с какими-то параметрами после вопросительного знака и вы увидете их здесь ()

SCRIPT_NAME – полный путь к странице от корня сайта (/docs/ssi.html)..html).

DOCUMENT_NAME – только название файла. (ssi.html)

HTTP_REFERER – страница, с которой перешли на эту ((none))

SCRIPT_FILENAME – полный путь к странице на сервере (/home/users/s/supervisork/domains/сайт/docs/ssi.html)

SERVER_SOFTWARE – название сервера и установленных модулей.

SERVER_ADMIN – почтовый адрес владельца сервера, указанный при установке.

DATE_LOCAL – сегодняшнее время и дата в вашем часовом поясе.

DATE_GMT – то же, но по Гринвичу.

LAST_MODIFIED – дата и время последнего обновления страницы.

Практическое применение команда имеет только для отладки страницы, что очень важно, учитывая тот факт что, у каждого сервера свой набор переменных. Вот что получается в результате ее применения на сайте :

Downgrade-1..9.142.17 HTTP_X_PROTOCOL=HTTP/1.1 HTTP_X_SERVER_IP=81.177.135.112 HTTP_X_FORWARDED_FOR=5.9.142.17 HTTP_X_FORWARDED_PROTOCOL=http HTTP_CONNECTION=close HTTP_USER_AGENT=Mozilla/5.0 (compatible; Googlebot/2.1; +http://www.google.com/bot..177.135.112 SERVER_PORT=80 REMOTE_ADDR=5.9.142..ru SCRIPT_FILENAME=/home/users/s/supervisork/domains/сайт/docs/ssi.html REMOTE_PORT=52812 GATEWAY_INTERFACE=CGI/1.1 SERVER_PROTOCOL=HTTP/1.0 REQUEST_METHOD=GET QUERY_STRING= REQUEST_URI=/docs/ssi.html SCRIPT_NAME=/docs/ssi.html DATE_LOCAL=03.04.2020 г DATE_GMT=03.04.2020 г LAST_MODIFIED=10.08.2014 г DOCUMENT_URI=/docs/ssi.html USER_NAME=supervisork DOCUMENT_NAME=ssi.html WORDS= KEYW= DESCRIP= TITL= HEAD= ROB=index, follow BROWSER=Mozilla/5.0 (compatible; Googlebot/2.1; +http://www.google.com/bot.html) DIR= PER=YES

Однако, сами переменные, применяются часто. Например в SSI-директиве #echo var.

#echo var – Используется для вывода значения переменной указанной в качестве параметра.

Ваш IP – Ваш браузер – Мой сервер – Вы пришли со страницы – Вы находитесь на странице – http://

Выводит следующий текст:

Ваш IP – 5.9.142.17 Ваш браузер – Mozilla/5.0 (compatible; Googlebot/2.1; +http://www.google.com/bot.html) Мой сервер – webdesign.site3k..html

В новых версиях SSI по умолчанию команда SSI echo использует кодирование entity и добавлен параметр encoding. Encoding должен задаваться ДО параметра var. Возможные значения encoding:

entity — (по умолчанию) будет произведено преобразование специальных HTML-символов в сущности и русский текст в кодировке Windows-1252 превратится в кракозябры (назначение данного преобразования непонятно);

url — будет произведено escape-преобразование, все символы все английского алфавита приобретут вид %nn, где nn — код символа в 16-ричной кодировке, что позволит их применять в строке URL;

none — не будет производиться никаких преобразований (как и раньше, с той только разницей, что HTML-сущности, которые раньше кодировались, кодироваться не будут и в переменные SSI можно вставлять угловые скобки и амперсанды).

#set var value – Устанавливает значение переменной, если переменной нет – создает. Формат команды set var=» ИМЯ_ПЕРЕМЕННОЙ» value=» ЕЕ_ЗНАЧЕНИЕ«

Например, такой код:

Значение переменной SERVER_NAME=«« » Сменим значение: Теперь значение переменной SERVER_NAME=« »

Выведет следующие строки:

Значение переменной SERVER_NAME=«сайт» Сменим значение: Теперь значение переменной SERVER_NAME=«discoverer.by.ru»

Конечно, подменять стандартные переменные окружения может и вовсе не имеет смысла, но назначать свои переменные бывает удобно, например:

Чтобы в нужном месте страницы применить команду

Выглядит так: Это самое наглядное пособие по SSI (обратите внимание, специальные символы в старой версии SSI будут перекодированы так, чтобы отображаться на странице, а не работать, как ожидается.

Естественно, определить переменную, нужно до ее применения на странице.

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

Операции и операторы SSI.

SSI не поддерживает математических вычислений и строковых операций. Однако, SSI-технология поддерживает подстановки, которые можно расценивать как аналог конкатенации. Подстановка позволяет использовать переменные окружения в качестве параметров SSI-директив и комбинировать значения переменных и строк (производить конкатенацию). При подстановке переменные заключаются в фигурные скобки «<> », и предваряются знаком доллара «$ » (иногда скобки можно опустить).

Поместит в переменную NEW_VAR полный путь и имя данной страницы и выведет его в текст:

При необходимости включения в подстановку знаков доллара, слеша, фигурных скобок и кавычек, их предваряют слешем:

#if, #elif, #else и #endif – Условные операторы. Позволяют выполнять код или выводить текст на страницу в зависимости от результата логического сравнения. Код, не соответствующий условию, никоим образом не появится даже при просмотре «исходного текста».

HTML-код, который будет выводиться, если ПЕРВОЕ_УСЛОВИЕ истинно HTML-код, который будет выводиться, если ПЕРВОЕ_УСЛОВИЕ ложно, а ВТОРОЕ_УСЛОВИЕ истинно HTML-код, который будет выводиться, если все условия ложны

Условие — это либо строка, которая является истинной, если она непустая, или набор операторов сравнения строк. Операторами могут быть:

    Равенство = Неравенство != Меньше Больше, либо равно >= Отрицание (не верно что) !

Если вторая строка заключена в слеши («/»), она является регулярным выражением . Например, условие истинно, если в первой строке встречается хоть одно вхождение второй строки.

Можно объединять несколько операторов сравнения с помощью операторов && («логическое И») и || («логическое ИЛИ»). Для группирования условий используются скобки. Для включение в условие переменных, их предваряют знаком доллара. Например:

Страница запрошена браузером Opera браузером Microsoft Internet Explorer браузером Netscape Navigator поисковым роботом

Страница запрошена браузером Netscape Navigator

Внимание: Любая SSI-директива должна начинаться с символов (конец комментария). При этом, между концом SSI директивы и дефисами конца комментария должен быть, по крайней мере, один пробел – иначе сервер может не правильно распознать директиву, приняв дефисы и угловую скобку за конец команды.

Особенности SSI скриптов

  • SSI – Server Side Includes переводится как включение со стороны сервера. В самом названии отображаются главные особенности SSI:
  • SSI инструкции не работают на локальных компьютерах, они обрабатываются только ВЕБ-серверами и, то, как будет выглядеть страница в итоге, можно увидеть только поместив ее на сервер и загрузив от туда в браузере. Перед выдачей страницы, сервер считывает ее строку за строкой, и находя SSI-инструкции обрабатывает, вставляя вместо них, результат выполнения. Сами инструкции, в полученной поситителем странице не сохраняются.
  • SSI не может включать файлы с другого домена.
  • SSI поддерживается не всеми серверами и, о его поддержке владельцы серверов обязательно указывают в описании хоста.
  • SSI обрабатывается не во всех файлах. Во многих файлах содержимое просто не анализируется на содержание SSI-инструкций – это делается, чтобы не замедлять работу сервера лишней обработкой. Обрабатываемые типы файлов указываются в описании хоста. Так же, их можно посмотреть в httpd.conf или srm.conf (если у вас есть к ним доступ). На анализ SSI-инструкций указывают строки: AddType text/html .shtml AddHandler server-parsed .shtml Обычно это HTM, HTML и SHTML файлы.
  • Иногда для обработки SSI-директив требуется размещение в корне сайта файла.htaccess (имя начинается с точки), с инструкциями типа AddHandler server-parsed .shtml AddHandler server-parsed .html Это может быть единственным способом повлиять на работу сервера, если вы не являетесь его администратором.
  • Иногда недобрые админы запрещают выполнение в SSI-директивах PHP-скриптов, и вместо результата выполнения скрипта появляется надпись типа
    «»
    В этом случае в .htaccess требуется добавить директиву Options +Includes Больше информации о файле.htaccess можно посмотреть на «Настройка файла.htaccess»
  • SSI обрабатывается не во всех каталогах. Для того чтобы в каталоге обрабатывались SSI-директивы, в файле access.conf этот каталог должен быть описан как Options Indexes Includes (или Options Includes), вложенные каталоги наследуют опцию и не требуют отдельной записи. Не у каждого есть доступ к этому файлу, однако, существует общее не писаное правило: на многих хостах содержимое делят на 2 корневые директории: cgi-bin и WWW. В файлах из директории cgi-bin никакие файлы (обычно) не проверяются на SSI-инструкции и никакие файлы (даже включенные по ) не отображаются в браузерах. Поэтому, файл, являющийся фрагментом страницы и включаемый в нее SSI-директивой НЕ доложен находиться в каталоге cgi-bin – в cgi-bin могут находиться только cgi-скрипты, так как они не включаются в страницу непосредственно (включается только результат их выполнения).
  • SSI-директивы обрабатываются не только в файлах, запрашиваемых посетителем, но и во включаемых в них фрагментах, если те имеют расширение, для которого разрешена проверка на наличие SSI-директив. Это может применяться различным образом, в частности, для обработки переменных, заданных на странице, включающей эти фрагменты.
  • Обычно, любые файлы в WWW-директории можно включить по SSI-директиве include, поэтому сами фрагменты, могут храниться в файлах с любым расширением. Тем не менее, следует учитывать что, HTM и HTML-файлы индексируются поисковыми системами, а значит, те могут послать посетителя на неполный фрагмент страницы (это, конечно, маловероятно, так как для этого на данный фрагмент должна быть проиндексированная ссылка), что, в свою очередь, может разочаровать его и оттолкнуть от сайта. Избежать такого, досадного, курьеза можно несколькими способами:

Область применения SSI.

Обычно SSI применяется там же, где Frame, Object, Script src= и т. д., например, для включения в WEB-страницу повторяющихся фрагментов (меню, баннерные коды, заголовки). Однако, механизм включения совершенно иной. Если в Frame, Object, Script src= и т. д. включаемый файл просто выдается сервером и уже на месте вставляется агентом пользователя (браузером), то в случае с SSI браузер получает страницу в уже готовом виде. Включение происходит прямо на сервере, а это порождает следующие отличия:

  • При включении типа Frame, Object, Script src= и т. д. посетитель может узнать исходный код страницы, а при SSI-включении – нет. Сокрытие исходного кода может быть полезным автору.
  • При включении типа Frame, Object, Script src= и т. д. требуется логическая завершенность включаемых объектов, а при SSI-внедрении – нет. Это так же, может оказаться удобным, так как позволяет дробить страницу на произвольные фрагменты и выделять в отдельные файлы большее количество общих мест.
  • При включении типа Frame, Object и т. д. к объекту, находящемуся во включенном фрагменте можно обратиться как ИМЯ_ФРАГМЕНТА.ИМЯ_ОБЪЕКТА, а к объекту, внедренному SSI-инструкцией, как к обычному элементу страницы – так проще.
  • При включении типа Frame, Object и т. д. можно разрешить пользователю менять содержимое объектов, а при SSI-внедрении – нет. Это заметно сужает область применения SSI.
  • При включении типа Frame, Object, Script src= и т. д. обработка условий и прочих директив происходит на компьютере посетителя, а при SSI – на сервере. Тем самым SSI-технология замедляет загрузку: выигрыш достигается, только если большие фрагменты либо включаются, либо не включаются, в зависимости от конкретных условий (тогда, хотя и возрастает нагрузка серверного процессора, уменьшается нагрузка на линию связи).
  • Поскольку SSI выполняется сервером, истинный вид страницы, можно увидеть только там, что не удобно. Программы, позволяющие получить SSI на локальном компьютере, дают не совсем тот же вариант, хотя бы за счет различия в переменных типа DOCUMENT_URI. А с учетом непосредственных настроек каждого конкретного сервера, разница может иметь принципиальное значение.
  • При включении типа Frame, Object, Script src= и т. д. включаемый объект загружается только однажды и, при последующем включении, берется из кэша. При SSI-внедрении, фрагмент загружается с каждой новой страницей, ЗНАЧИТЕЛЬНО замедляя загрузку: Это уже совсем плохо.
  • При включении типа Frame, Object, Script src= и т. д. меню находится в одном файле, а при SSI, внедряется в каждую страницу, тем самым, рассредоточивая внутреннюю ссылочную значимость, и портя все дело, когда требуется сосредоточить весь ссылочный вес на главной странице.

Что применять: Frame, Object, Script src= или SSI – личное дело каждого.

Включаемый файл foot.htm :

Практическое отличие одной и той же страницы, построенной с применением различных технологий лишь в том, что каждая страница объектов технологии IFRAME выглядит полнее и является вполне самостоятельной. Это несколько увеличивает время загрузки первой страницы, но зато, за счет кэширования, повторяющиеся фрагменты не приходится загружать со следующей страницей и дальнейшая загрузка значительно ускоряется (подробней о преимуществах Frame смотрите в «Если вам не нравятся фреймы, значит вы не умеете их готовить»). Сочетание двух технологий включения дает наиболее качественный результат. Оно применяется на всех профессиональных сайтах и, если Frame и Object могут где-то не встретиться, то, по крайней мере, Script src= и
(то же включение кода, содержащегося в отдельном файле и загружающегося только однажды), используется повсеместно.

Применение IFRAME не может полностью заменить SSI, так как SSI позволяет не только загрузить фрагменты по условию (что можно решить и скриптом), но и, как показано в примере, через переменные передать им любые параметры. Без SSI это можно сделать только методом POST или через HTTP_REFERER (продолжение имени файла, после вопросительного знака), для дальнейшей обработки каким-либо скриптом. Но возможности такой передачи не идут ни в какое сравнение с возможностями передачи значений SSI переменных. Поэтому, применение SSI может потребоваться даже на страницах, основанных на фреймах – чем больше инструментов нам доступно, тем лучше и быстрее получается результат.

SSI (Server Side Includes) — технология позволяющая удобно «собирать» веб-страницы из частей, вставлять в них результаты выполнения CGI-скриптов и придавать страницам прочие элементы динамики.

Какие файлы обрабатываются как SSI, как добавить свои файлы

По умолчанию веб-сервер проверяет на предмет наличия SSI-инструкций только файлы с расширением *.shtml. Например, поместите SSI-команды в файл index.shtml и это сразу будет работать. Если есть необходимость проверять на наличие SSI другие файлы, соответствующие расширения для проверки можно добавить, поместив в файл .htaccess следующую инструкцию:

AddHandler server-parsed .ext1

.ext1 тут — расширение файлов, которые должны проверяться на наличие в них SSI. Не рекомендуется добавлять расширения .html и .htm, так как в этом случае сервер будет проверять все html-файлы на предмет наличия SSI-вставок. Это может привести к совершенно бессмысленной нагрузке на сервер.

Ограничения

Пользователям хостинга доступны все директивы SSI за исключением одного ограничения для абонентов, которые используют тариф не предусматривающий запуск собственных cgi-скриптов. Для этих клиентов запуск скриптов недоступен и через SSI-инструкции. То есть, в терминах Apache для них действует опция NoExec.

Как работает и для чего используется SSI

Технологию SSI начинающие пользователи в основном могут использовать для двух целей: для «склейки» страницы из частей html-кода и для запуска скриптов с целью размещения результатов их работы на создаваемой html-странице. В первом случае с диска сервера читаются соответствующие файлы и вставляются в код страницы, откуда был вызван SSI-код. Во втором случае веб-сервер, найдя SSI-инструкцию, запускает скрипт, размещенный на диске, и вставляет в итоговую страницу результат выполнения скрипта.

«Склейка» страницы из частей html-кода. Используется для того, чтобы не дублировать в множестве веб-страниц один и тот же html-код. Например, можно вынести весь дизайн в SSI-включения, которые подключать в конкретном html-файле, в котором будет содержаться только текст конкретной страницы.

Поместим в файл header.inc «заголовок» веб-страницы (элементы дизайна, меню, нужные ссылки и другие элементы, которые присутствуют на всех страницах), а в файл footer.inc поместим нижнюю часть веб-страницы (завершающую часть дизайна). Далее создадим файл с именем index.shtml, который будет выглядеть так:

А здесь у нас будет основной текст страницы ;

Предполагается, что в файлы-включения мы поместили html-код хотя бы вроде начальных/конечных тэгов , , и так далее. В результате пользователь получит страницу, в которую будет сначала включено содержимое файла header.inc , далее слова «А здесь у нас будет основной текст страницы» и затем содержимое файла footer.inc.

Такое использование SSI удобно с точки зрения отсутствия необходимости все время вставлять во вновь создаваемые страницы один и тот же html-код, а также с точки зрения удобства изменения основных элементов сайта — меняем в одном месте html-код, который сразу меняется на всех страницах по всему сайту.

Запуск скриптов и размещение результатов их работы на создаваемой html-странице. Таким образом, можно разместить на странице практически любой функционал, например, на языке Perl (или другом языке программирования, поддерживаемом хостингом).

Например, у вас есть скрипт-счетчик, который показывает сколько посетителей заходило на вашу страницу и находится он по адресу /cgi-bin/count.pl. Включим результат его работы в веб-страницу. Для этого в коде html-страницы разместим такой SSI-код:

В итоге на странице, которую увидит пользователь, будет размещен счетчик, который вывел скрипт /cgi-bin/count.pl.

Полный список команд SSI вы найдете в описании Apache-модуля mod_include

Еще примеры использования SSI

Инструкции SSI можно использовать не только для запуска скриптов и включения файлов. Также SSI позволяет работать с переменными окружения веб-сервера, производить манипуляции с датами, выполнять команды по условию и так далее. Хорошее описание наиболее востребованных применений команд SSI вы найдете на сервере CIT Forum .

Диагностика ошибок при использовании SSI

Если при использовании SSI-команд на своих html-страницах вы увидели сообщение «», это свидетельствует о возникновении ошибки при обработке SSI-инструкции веб-сервером.

Возможные причины возникновения такой ошибки.

Что такое ssi и с чем его едят?

Server Side Include (SSI) .Эта вещь в WWW-дизайне чрезвычайно нужная и полезная, так как во много раз облегчает работу по созданию и поддержке Web-сайта.

Server Side Include с английского переводится как «включаемый на стороне сервера».Эта технология позволяет Web-серверу включать в текст ваших HTML-страниц любой другой текст: содержимое текстовых файлов или, например, результат работы CGI-скриптов (который, как известно, обычно оформляется в виде HTML-текста). Происходит это «включение» непосредственно перед передачей текста HTML-страницы броузеру пользователя, так что посетитель страницы даже не догадывается об этой серверной «возне».

Какова же польза от SSI ? Польза огромна. Предположим, на каждой странице своего сайта вы поместили список доступных разделов сайта. Творение ваше, как и положено, постоянно развивается, и вот вы решили добавить еще один раздел. Что же теперь, открывать все страницы в редакторе и тупо добавлять в текст одно и то же? Советский пионер (любящий трудности) поступил бы именно так, а умный Web-дизайнер станет использовать SSI . Для этого достаточно создать отдельный текстовый файл (например, menu.html) и занести туда HTML-код списка разделов. Непосредственно же в страницы сайта, в том месте, где должен находиться список разделов, нужно вставить следующую инструкцию:
Обратие внимание на то, что нужно дословно следовать синтаксису директив SSI. Забудете, например, поставить два тире в конце директивы — и сервер ей буквально «подавится», прекратив анализ страницы.

Когда кто-либо захочет просмотреть эту страницу, сервер заменит инструкцию содержимым файла menu.html. Если вы измените файл menu.html, то все страницы, где вы использовали , обновятся автоматически. Обратите внимание: в HTML-файлах, лежащих на диске Web-сервера, ничего не меняется — сервер производит вставку текста «на лету», перед тем, как отправить WWW-страницу в броузер посетителя.

Вместо имени обычного текстового файла в инструкции можно указывать имя CGI-скрипта. В этом случае сервер сначала выполнит CGI-скрипт, а потом вставит результат работы скрипта в текст WWW-страницы. Это означает, что вы сможете реализовать такие вещи как, например, текстовый счетчик посещений или отображение на странице случайно выбранной фразы.

Есть еще одно косвенное преимущество применения SSI: из-за использования шаблонов типа вышеупомянутого menu.html WWW-страницы будут меньшими по объему, и вы сможете сэкономить немало времени, перписывая файлы на Web-сервер по FTP.

Но не все так прекрасно. Например, вам не удастся поэксперементировать с механизмом SSI на машине, на которой не установлен Web-сервер. Функционирование SSI обеспечивается именно сервером, поэтому при просмотре HTML-файлов с локального жесткого диска (например, С:), ваш броузер проигнорирует директивы SSI — ведь они, с точки зрения HTML, являются обычными комментариями.

Кроме того, сервер должен быть настроен для поддержки SSI. И попадаются такие алчные провайдеры, которые начинают требовать деньги за такую настройку. Лучше всего не пользоваться их услугами, так как поддержка SSI включается добавлением пары строк в файлы конфигурации Web-сервера Apache и еще кое-какими нехитрыми действиями администратора, за что брать деньги, на мой взгляд, грешно.

К счастью, таких провайдеров не очень много. Большинство предлагают поддержку SSI по умолчанию. Но учтите, что на бесплатных серверах, таких, как Хоом, Tripod, Geocities, Chat.ru SSI не разрешается. Тут уж ничего поделать нельзя:-(

Кстати о настройках сервера. При включении поддержки SSI сервер начинает просматривать все страницы на предмет наличия в них директив SSI, что увеличивает нагрузку на сервер. Поэтому очень часто системные администраторы включают SSI только для файлов с определенным расширением — обычно.shtml. Так что если в файлах.html SSI не работает, попробуйте переименовать их в.shtml, а лучше спросите об этом системного администратора:-)

В общем, SSI — действительно полезный инструмент, игнорировать который, если вам дорого свое время (и деньги), не стоит.

Что такое SSI и с чем его едят II

Этой статьей хотелось бы открыть новый подраздел на DVK URL CLUB. «Ваша колонка» призвана собрать материалы и мнения наших посетителей. Первая статья написана нашим модератором раздела «Перекур» по мотивам одного из топиков на «Перекуре», в которой Александр поясняет некоторые особеннсти использования директив SSI. Так же автор хочет напомнить вам, что инструкциями SSI можно пользоваться только на том сервере, который их поддерживает. Большинство бесплатных хостингов в сети не выделяется такой особенностью, а попросту, не поддерживают SSI.

Преамбула
Суть и простейшие приемы в SSI уже были описаны на данном сайте. Как правило, на развалах статей по мастерингу редко встречается что-то кроме описание единственной функции «include» в самом простом варианте.

Однако SSI смело можно назвать языком программирования, пусть не полноценным, но языком. SSI позволяет определять условия и переменные, а также умеет работать с так называемыми переменными окружения, одной из которых является $QUERY_STRING, активно использующаяся при программировании на Perl, PHP, и других языках создания серверных скриптов. Здесь-то и начинается самое интересное.

Суть явления или результат который имеет Webmaster.
По большому счету речь сейчас пойдет о шаблонах. При очередном обновлении человеку обслуживающему сайт будет достаточно добавить ссылку на новую страницу в оглавлении и создать файл с обычным форматированным текстом без какой бы то ни было разметки. Согласитесь, что это весьма удобно:)

Илон Маск рекомендует:  sepia() в CSS
Понравилась статья? Поделиться с друзьями:
Кодинг, CSS и SQL