Я хочу написать функцию, которая будет включать внешний файл, очень похожий на Server.Execute, но будет передавать параметры. Мне известно, что Server.Execute будет передавать параметры query , но я бы хотел передать данные в более общем виде. Например:
' main.asp
MyInclude("external.inc", Array("mykey", "myval"))
' external.inc
Response.Write mykey
Я сомневаюсь, что смогу продвинуться достаточно далеко, не прочитав внешний штраф, не перевернув его и не выполнив, но я бы хотел подойти как можно ближе. Также, если это возможно, я бы предпочел не использовать опцию передачи запросов по соображениям безопасности.
EDIT:
Критерии, которые я хотел бы выполнить, если это возможно, следующие:
- Динамическое включение (т. Е. Без SSI)
- Простой синтаксис для вызова (предпочтительно один вызов функции)
- Простые включаемые файлы (только фрагменты HTML / ASP)
- Передача максимально возможного количества данных.
SSI подходит для 2, 3 и 4, и я бы использовал его в одно мгновение, за исключением того, что я не хочу жестко кодировать явные пути в мои файлы. Если я могу использовать механизм VBScript, я могу просто указать имя включаемого файла и заставить его найти его.
Чтение файла и его выполнение удовлетворят требованиям 1, 2 и 4. 3 нарушено, потому что вы не можете вставить прямой HTML во включаемый файл. Я использую этот подход для импорта сценариев, потому что мне не нужна эта возможность, но для фрагментов это просто необходимо.
Server.Execute имеет 1, 2 и 3, но единственный способ (AFAICT) для передачи включаемых данных - изменить строку запроса. Сохранение контекста выполнения вызывающей стороны невозможно.
Запись включаемых файлов как классов удовлетворяла бы 1, 2 и 4. В этом случае включаемые файлы были бы значительно усложнены.