Сам ASP не поддерживает динамическое включение файлов. Текущее динамическое включение использует FSO для объединения включенных файлов в основной файл и последующего его запуска. Далее обычный метод включаемого файла в форме <!--#include file="filename.asp" --> также называется «традиционной ссылкой», а динамический включаемый файл, реализуемый функциями, называется «динамической ссылкой». ". Распространенными программами являются следующие:
Функция include(имя файла)
Dim re,content,fso,f,aspStart,aspEnd
set fso=CreateObject("Scripting.FileSystemObject")
set f=fso.OpenTextFile(server.mappath(имя файла))
контент = f.ReadAll
е.закрыть
установить f=ничего
set fso=ничего
set re=new RegExp
re.pattern="^s*="
aspEnd=1
aspStart=inStr(aspEnd,content,"<%")+2
делать, пока aspStart>aspEnd+1
Response.write Mid(content,aspEnd,aspStart-aspEnd-2)
aspEnd=inStr(aspStart,content,"%>")+2
Execute(re.replace(Mid(content,aspStart,aspEnd-aspStart-2),"Response.Write "))
aspStart=inStr(aspEnd,content,"<%")+2
петля
Response.write Mid(content,aspEnd)
установить повторно = ничего
функции End
: include("youinc.asp")
Однако эта функция не работает, если во включенных файлах есть включенные файлы. На основе приведенной выше функции я улучшил следующую функцию. Во включенном файле также есть обычный включаемый файл <!--#include file="filename.asp" -->, который также может работать нормально.
Функция includeconvert(oRegExp, strFilename, strBlock)
Dim incStart, incEnd, match, oMatches, str, код
'Извлеките имя файла включаемой части так же, как код ASP, и выведите остальное как есть
код = ""
инкКонд = 1
incStart = InStr(incEnd,strBlock,"<!--#include ") + 13 'Чтобы найти целевую строку, <!--#include содержит ровно 13 символов, поэтому +13
Do While incStart>incEnd+12 'Минимальное расстояние между двумя ссылками является непрерывным --><--#, incStart составляет 13 символов, считая от <!--#include, поэтому оно должно быть как минимум на 13 символов больше, чем предыдущий incEnd 1 Полученное условие >inEnd+12
str = Mid(strBlock,incEnd,incStart-incEnd-13)
str = Заменить(str, """", """""") 'Заменить одинарную двойную кавычку двумя двойными кавычками
str = Заменить(str, VbCr, "")
str = Заменить(str, VbLf, "")
str = Заменить(str, VbCrLf, "")
code = code & VbCrLf & "Response.Write """ & str & """"
incEnd=InStr(incStart,strBlock,"-->")+3
oRegExp.pattern="(w+)=""([^""]+)""" 'Сопоставление file="filename.ext" или virtual="virtualname.ext", захватывает две подстроки типа и имени файла.
Set oMatches = oRegExp.Execute(Mid(strBlock,incStart,incEnd-incStart-3))
Set match = oMatches(0) 'Когда определено, что существует только один набор захватов, чтобы получить совпадающие подстроки этого набора, вы можете сделать это без использования For Each match In oMatches... Далее
code = code & include(Mid(strFilename, 1, InStrRev(strFilename, "/")) & match.SubMatches(1)) 'Mid(filename, 1, InStrRev(filename, "/")) используется, когда имя подфайла имеет путь, извлеките путь и добавьте его перед именем файла, традиционно указанным в подфайле, чтобы найти правильный путь для открытия файла, поскольку путь к файлу в динамической ссылке относится к основному файлу . Чтобы сопоставить вторую подстроку, используйте SubMatches(1)
incStart = InStr(incEnd,strBlock,"<!--#include ")+13
Петля
ул = Mid(strBlock,incEnd)
str = Заменить(str, """", """""") 'Заменить одинарную двойную кавычку двумя двойными кавычками
str = Заменить(str, VbCr, "")
str = Заменить(str, VbLf, "")
str = Заменить(str, VbCrLf, "")
code = code & VbCrLf & "Response.Write """ & str & """"
includeconvert = код
Конечная функция
Функция включает (имя файла)
Dim re, контент, fso, f, aspStart, aspEnd, код
Set fso=CreateObject("scripting.FileSystemObject")
Установите f=fso.OpenTextFile(Server.MapPath(имя файла))
контент = f.ReadAll
е.закрыть
Установить f=ничего
Установите
код fso=nothing = ""
aspEnd=1
aspStart=InStr(aspEnd,content,"<%")+2
Установить re=новое регулярное выражение
Выполните Пока aspStart>aspEnd+1
'Традиционная ссылка <!--#inclde должна находиться за пределами сегмента кода ASP, поэтому сначала передайте ее.
код = код & includeconvert (re, имя файла, Mid(content,aspEnd,aspStart-aspEnd-2))
aspEnd=InStr(aspStart,content,"%>")+2
re.pattern="^s*=" 'Эта обычная замена первоначально заменила <% = str %> на стандартный <%Response.Write str %>
code = code & VbCrLf & re.replace(Mid(content,aspStart,aspEnd-aspStart-2),"Response.Write") 'Добавьте возврат каретки и перевод строки перед блоком ASP, чтобы избежать множественных ошибок Response.Write между соединяющимися блоками на той же линии
aspStart=InStr(aspEnd,content,"<%")+2
Петля
код = код & includeconvert (re, имя файла, Mid(content,aspEnd))
Установить повторно = ничего
включить = код
Конечная функция
. Для удобства приведенная выше функция в конечном итоге возвращает весь код ASP, который интегрирует включенный файл. При ее использовании вам необходимо использовать Execute для его выполнения, то есть при ее использовании вам необходимо: Execute(include("file. жерех")).
Вышеупомянутая функция проходит проверку, когда пути к включенному файлу и основному файлу совпадают. Она не обеспечивает дополнительную отказоустойчивость, когда пути к включенному файлу и основному файлу различаются. Время ограничено. Добро пожаловать, чтобы предоставить комментарии и улучшения.