ファイルをインクルードする

ファイルをインクルードする

"サーバー側インクルード" ディレクティブを使用すると、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 は、"相対" パスを指定するときに使用します。相対パスでは、インクルードする側のファイルのあるディレクトリがパスの起点になります。たとえば、ディレクトリ Myapp にインクルードする側のファイルがあり、ファイル Header1.inc が Myapp\Headers にある場合、次のように記述すると、Header1.inc がファイルに挿入されます。

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

インクルードされる側のファイルのパス Headers\header1.inc が、インクルードする側のファイルに対して相対的に指定されていることに注意してください。この #include ステートメントを含むスクリプトがディレクトリ /Myapp に存在しない場合、ステートメントは正しく動作しません。

インターネット インフォメーション サービス スナップインで [親のパスを有効にする] オプションをオンにしている場合は、キーワード file を構文 (..\) と共に使用して、親ディレクトリ (1 つ上のディレクトリ) のファイルをインクルードすることもできます。 その方法については、「ASP アプリケーションを構成する」を参照してください。

インクルード ファイルの場所

ASP は、インクルードされるファイルがどこに存在していても、そのファイルの変更を検出し、次回ブラウザからこのファイルをインクルードする .asp ファイルを要求されたとき、そのファイルのコンテンツを挿入します。ただし、通常、インクルードするファイルが同じアプリケーションまたは Web サイト内に存在する場合は、インクルードするファイルをセキュリティ保護する方が簡単です。セキュリティを強化する場合には、インクルードするファイルを \Includes などのアプリケーション内の別のディレクトリに置き、適切な (Web サーバーの) 実行アクセス権だけを設定することをお勧めします。詳細については、「 Web サーバーのアクセス権を設定する」を参照してください。

重要   特に指定しない限り、Web サーバーの読み取りアクセス権がすべてのファイルに設定されます。ただし、ユーザーにインクルードするファイルのコンテンツを見せないようにするには、Include ディレクトリに対する読み取りアクセス権を無効にします。

ファイルをインクルードする際のヒントと注意事項

インクルードされる側のファイルが、ほかのファイルをインクルードすることもできます。.asp ファイルでは、同じファイルを何度もインクルードすることができます。ただし、これは #include ディレクティブがループを発生させない場合に限ります。たとえば、ファイル First.asp がファイル Second.inc をインクルードする場合、Second.inc が First.asp をインクルードすることはできません。また、ファイルがそのファイル自体をインクルードすることもできません。ASP はこのようなループやネストのエラーを検出し、エラー メッセージを表示して、要求された .asp ファイルの処理を停止します。

ASP は、スクリプト コマンドを実行する前にファイルをインクルードします。したがって、スクリプト コマンドを使って、インクルードされるファイルの名前を作成することはできません。たとえば、次のスクリプトではファイル Header1.inc は開けません。これは、変数 name にファイル名が代入される前に、ASP が #include ディレクティブを実行しようとするためです。

<!--  This script will fail -->
<% name=(header1 & ".inc") %>
<!-- #include file="<%= name %>" -->

スクリプト コマンドおよびプロシージャは、スクリプトの区切り記号 <% と %> の間、HTML タグ <SCRIPT> と </SCRIPT> の間、または HTML タグ <OBJECT> と </OBJECT> の間に完全な形で含まれている必要があります。つまり、インクルードする側の .asp ファイルでスクリプトの区切り記号を開き、インクルードされる側のファイルで区切り記号を閉じることはできません。スクリプトやスクリプト コマンドは、1 つの完結した単位を構成している必要があります。たとえば、次のスクリプトは正しく動作しません。

<!-- This script will fail -->
<%
  For i = 1 To n
    statements in main file
    <!--  #include file="header1.inc" -->
  Next
%>

ただし、次のスクリプトは正しく動作します。

<%
  For i = 1 to n
    statements in main file
%>
<!--  #include file="header1.inc"   -->
<% Next %>

   ASP スクリプトがインクルードするファイルに、インクルードしているスクリプトで使用されない関数および変数が多数含まれている場合は、使用しない構造体によってリソースが必要以上に占有されてしまうため、パフォーマンスに悪影響を与え、最終的には Web アプリケーションの拡張性を低下させる可能性があります。そこで通常は、不必要な情報が含まれている 1 つまたは 2 つの大きなインクルード ファイルをインクルードするのではなく、インクルード ファイルを複数の小さなファイルに分割し、サーバー側スクリプトで必要とするファイルのみをインクルードすることをお勧めします。

場合によっては、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> タグ セットを使用します。

表示: