ASP - Включение файлов
Включение на стороне сервера. Директивы включения дают возможность включения в файл содержимого другого файла перед обработкой его веб-сервером. В ASP этот механизм поддерживается только директивой #include. Для вставки файла в файл .asp используется следующий синтаксис:
<!-- #include virtual | file ="имя_файла" -->
Ключевые слова virtual и file обозначают тип пути, используемый для включения файла, а имя_файла представляет собой путь и имя файла, который требуется включить.
Включаемые файлы могут иметь любое расширение, но удобно давать им расширение, отличающее их от других файлов.
Использование ключевого слова Virtual
Ключевое слово virtual указывает, что путь начинается с виртуального каталога. Например, если файл Footer.inc расположен в виртуальном каталоге /Myapp, следующая строка вставит содержимое файла Footer.inc в файл, содержащий эту строку:
<!-- #include virtual ="/myapp/footer.inc" -->
Использование ключевого слова File
Ключевое слово file указывает, что используется относительный путь. Относительный путь начинается с каталога, содержащего файл, в который включается другой файл. Например, если данный файл находится в каталоге Myapp, а файл Header1.inc — в каталоге Myapp\Headers, следующая строка вставит файл Header1.inc в данный файл:
<!-- #include file ="headers\header1.inc" -->
Имейте в виду, что путь к включаемому файлу, Headers\header1.inc, является относительным к данному файлу; если сценарий, содержащий эту инструкцию #include, находится не в каталоге /Myapp, эта инструкция не будет работать.
В ключевом слове file также можно использовать ссылки (..\
) на файлы в родительском каталоге (или каталоге верхнего уровня), если в оснастке IIS установлен флажок Включить пути к родительским каталогам.
Дополнительные сведения см. в разделе Настройка приложений ASP.
Расположение включаемых файлов
ASP обнаруживает изменения во включаемом файле независимо от его расположения и включает содержимое файлов при следующем запросе обозревателем файла .asp, включающего этот файл. Однако, в общем случае проще включать файлы с обеспечением защиты, если они находятся на одном веб-узле в пределах одного приложения. Для обеспечения лучшей защиты рекомендуется располагать включаемые файлы в отдельном каталоге в пределах приложения, например, в каталоге \Includes, и применять к нему только соответствующие разрешения на выполнение (на веб-сервере). Дополнительные сведения см. в разделе Задание разрешений для веб-сервера.
Важно! По умолчанию ко всем файлам на веб-сервере применяются разрешения на чтение. Для того, чтобы предотвратить просмотр содержимого включаемых файлов пользователями, запретите чтение файлов из каталога Include.
Включение файлов: советы и предупреждения
Включаемые файлы могут, в свою очередь, включать другие файлы. Файлы .asp также могут включать один файл несколько раз, при условии что директивы #include не вызовут зацикливание. Например, если файл First.asp включает файл Second.inc, файл Second.inc не должен включать файл First.asp. В противном случае файл будет включен сам в себя. В ASP предусмотрено обнаружение таких зацикливаний и ошибок вложения, в таких случаях выдается сообщение об ошибке, а обработка запрошенного файла .asp прекращается.
ASP включает файлы до выполнения команд сценариев. Таким образом, команду сценария нельзя использовать для построения имени включаемого файла. Например, следующий сценарий не сможет открыть файл Header1.inc, так как в ASP попытка выполнить директиву #include будет предпринята раньше, чем имя файла будет назначено переменной name
.
<!-- Этот сценарий не будет выполнен --> <% name=(header1 & ".inc") %> <!-- #include file="<%= name %>" -->
Команды и процедуры сценариев полностью должны быть заключены в ограничители сценариев <% и %>, теги HTML <SCRIPT> и </SCRIPT> или теги HTML <OBJECT> и </OBJECT>. То есть, нельзя открыть ограничитель сценариев во включающем файле .asp и закрыть его во включаемом файле; сценарий или команда сценария должны присутствовать в виде отдельных законченных модулей. Например, следующий сценарий не будет работать:
<!-- Этот сценарий не будет выполнен --> <% For i = 1 To n инструкции основного файла <!-- #include file="header1.inc" --> Next %>
Следующий сценарий будет работать:
<% For i = 1 to n инструкции основного файла %> <!-- #include file="header1.inc" --> <% Next %>
Примечание. Если файл, включаемый в сценарий ASP, содержит много функций и переменных, не используемых во включающем сценарии, использование дополнительных ресурсов, занимаемых этими неиспользуемыми структурами, может значительно снизить производительность и, в результате, уменьшить масштабируемость веб-приложения. Таким образом, рекомендуется разбить включаемые файлы на несколько небольших файлов и включить только те из них, которые требуются серверному сценарию, а не включать один или два больших сценария, содержащих избыточные сведения.
Иногда может потребоваться включить файл на стороне сервера с помощью тегов HTML <SCRIPT></SCRIPT>. Например, следующий сценарий включает файл (посредством относительного пути), который можно выполнять на сервере:
<SCRIPT LANGUAGE="VBScript" RUNAT=SERVER SRC="Utils\datasrt.inc"></SCRIPT>
В следующей таблице приведен правильный синтаксис включения файлов с атрибутом SRC посредством виртуального или относительного пути:
Тип пути | Синтаксис | Пример |
---|---|---|
Относительный | SRC="путь\имя_файла" | SRC="Utilities\Test.asp" |
Виртуальный | SRC="/путь/имя_файла" | SRC="/MyScripts/Digital.asp" |
Виртуальный | SRC="\путь\имя_файла" | SRC="\RegApps\Process.asp" |
Примечание. При использовании этого метода между тегами <SCRIPT> нельзя помещать никаких логических операций; для добавления логических операций используйте отдельную пару тегов <SCRIPT>.