# 包含文件

“服务器端包含”指令提供了一种方式，可在 Web 服务器处理文件之前，在此文件中插入其他文件的内容。ASP 只实现此机制的 #include。可使用下列语法将文件插入 .asp 文件：

    <!-- #include virtual | file ="filename" -->

关键字 virtual 和 file 表示包含文件的路径类型，filename 表示想要包含文件的路径和文件名。

被包含的文件并不要求具有特定的文件扩展名；但是，赋予被包含文件 .inc 扩展名是一个良好的编程习惯，这样有助于将它们与其他类型的文件区分开来。

## 使用 Virtual 关键字

可以使用关键字 virtual 表示以虚拟目录开始的路径。例如，如果文件 Footer.inc 驻留在虚拟目录 /Myapp 中，则下列命令将 Footer.inc 的内容插入到包含此行的文件中：

    <!-- #include virtual ="/myapp/footer.inc" -->

## 使用 File 关键字

可以使用关键字 file 表示相对路径。相对路径以包含文件所在的路径开始。例如，如果文件 Header1.inc 在 Myapp\Headers 中，并且 Myapp 中有一个文件，则下列命令将 Header1.inc 插入到此文件中：

    <!-- #include file ="headers\header1.inc" -->

注意，被包含文件 Headers\header1.inc 的路径是相对于包含文件的；如果包含此 #include 语句的脚本不位于目录 /Myapp 中，语句将不起作用。

也可以使用关键字 file 和语法 (`..\`) 来包含父目录或更高层目录中的文件，但必须选中 Internet 信息服务管理单元中的“启用父路径”选项。
有关说明，请参阅配置 ASP 应用程序。

## 被包含文件的位置

ASP 检测被包含文件的变化（不考虑位置），并当浏览器下一次请求包含此文件的 .asp 文件时插入此文件内容。不过，通常而言，如果包含文件驻留在同一应用程序或网站内部，则很容易维护这些文件的安全性。若需要更高安全性，最好将包含文件放到应用程序内的单独目录中（如 \Includes），并且只应用适当的“执行”（Web 服务器）权限。详细信息，请参阅设置 Web 服务器权限。

要点 默认情况下，对所有文件应用 Web 服务器“读取”权限。不过，要防止用户查看包含文件的内容，可以禁用 Include 目录的“读取”权限。

## 包含文件：提示和警告

被包含的文件也可以包含其他文件。只要 #include 命令不导致循环，.asp 文件也可以多次包含同一文件。例如，如果文件 First.asp 包含文件 Second.inc，则 Second.inc 不能反过来包含 First.asp。文件也不能包含其自身。ASP 检测这种循环或嵌套错误，生成错误消息，并停止处理请求的 .asp 文件。

ASP 在执行脚本命令之前包含文件。因此，不能使用脚本命令建立被包含的文件名。举例来说，因为 ASP 试图在将文件名指派给变量 `name` 之前执行 #include 命令，所以下列脚本无法打开文件 Header1.inc。

    <!-- 此脚本将失败 -->
    <% 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 脚本包含的文件中存在包含脚本不需要的大量函数和变量，则这些无用的结构反而会影响性能，并最终降低 Web 应用程序的可扩展性。因此，通常将包含文件分成多个小文件，并且只包含那些服务器端脚本必需的文件，而不是包含那些带有冗余信息的一个或多个大型包含文件。

有时，可能需要使用 HTML <SCRIPT></SCRIPT> 标签来包含服务器端文件。例如，下列脚本包含一个服务器可以执行的文件（使用相对路径）：

    <SCRIPT LANGUAGE="VBScript" RUNAT=SERVER SRC="Utils\datasrt.inc"></SCRIPT>

下表说明通过 SRC 属性使用虚拟或相对路径来包含文件的正确语法：

路径类型 | 语法 | 示例：
--- | --- | ---
相对 | SRC="Path\Filename" | SRC="Utilities\Test.asp"
虚拟 | SRC="/Path/Filename" | SRC="/MyScripts/Digital.asp"
虚拟 | SRC="\Path\Filename" | SRC="\RegApps\Process.asp"

注意 当使用此方法包含文件时，不要在 <SCRIPT> 标签内放置任何编程逻辑；使用另外一组 <SCRIPT> 标签添加此类逻辑。

© 1997-2001 Microsoft Corporation. 保留所有权利。