#exec ディレクティブは、アプリケーションまたはシェル コマンドを実行し、その出力 (標準出力または ISAPI の WriteClient データ) をクライアント ブラウザに送信します。ディレクティブは、HTML のコメント デリミタで囲む必要があります。
このディレクティブは、STM ページでのみ使用できます。ASP ページでは使用できません。複数 CGI スクリプトまたは ISAPI アプリケーションの出力を Web ページに含める ASP スクリプト メソッドはありません。
<!-- #exec CommandType = CommandDescription -->
CommandType
コマンドの種類を指定します。コマンドの種類は、次のいずれか 1 つを指定できます。
コマンドの種類 | 意味 |
CGI | CGI スクリプト、ASP アプリケーション、ISAPI アプリケーションなどのアプリケーションを実行します。CommandDescription パラメータには、アプリケーションの完全な仮想パスの後に、疑問符 (?) とアプリケーションに渡すパラメータが入った文字列を指定します。複数のパラメータがある場合は、プラス記号 (+) で区切ります。ISAPI アプリケーションの実行は SSI ドキュメントの処理の一部でしかないため、ISAPI アプリケーションには次の制限があります。
URL の送信、または ServerSupportFunction コールバック機能によるリダイレクトを試みる ISAPI 拡張子を実行すると、メッセージは HTML ストリームに置かれますが、送信/リダイレクトは実行されません。 HSE_STATUS_PENDING を返すアプリケーションの実行において、SSI インタプリタ (Ssinc.dll) は、ServerSupportFunction が呼び出されてセッションが終了しない限り、いつまでも待機します。 ServerSupportFunction については、ISAPI リファレンスの MSDN Library を参照してください。 |
CMD | シェル コマンドを実行します。CommandDescription パラメータには、シェル プログラムの完全な物理パスの後に、スペースで区切られたコマンドライン パラメータが入った文字列を指定します。フル パスを指定しなかった場合、Web サーバーはシステム パスを検索します。
このディレクティブは、Web サイトをセキュリティ上の危険にさらすため、既定では無効になっています。このディレクティブを有効にするには、DWORD レジストリ値 SSIEnableCmdDirective を HKEY_LOCAL_MACHINE\System\CurrentControlSet\Services\W3SVC\Parameters キーに追加し、値を 1 に設定します。#exec ディレクティブを使用する STM ファイルを含む Web フォルダへの匿名アクセスを無効にします。 レジストリの使い方については、「レジストリ」を参照してください。 |
重要
このディレクティブが入ったファイルには、SSI インタプリタにマップされるファイル名拡張子を使う必要があります。拡張子が異なると、Web サーバーはディレクティブを処理しません。既定では、ファイル名拡張子 .stm、.shtm、および .shtml が SSI インタプリタ (ssinc.dll) にマップされます。#echo ディレクティブを使用する STM ページは、それ自身または ASP ページから Response.Redirect を使用して実行する必要があります。STM ページを ASP ページから Server.Transfer、Server.Execute、または #include を使用して呼び出すと、STM ページが ssinc.dll ではなく asp.dll を通過するよう強制されるため、機能しません。
IIS スナップインをインストールしている場合、既定の拡張子マッピングを変更して新しいマッピングを追加できます。詳細については、「アプリケーションのマッピングを設定する」を参照してください。ファイル拡張子を複数の実行可能ファイルにマップすることはできないため、このディレクティブを ASP ファイルでは使用できません。ASP ファイルは、既に asp.dll にマップされていて、そのまま保持する必要があります。
この例では、CGI コマンドを使用して ASP ページを実行しているため、レジストリに値を追加する必要はありません。Server.Execute、Server.Transfer、または #include を使用して Test.asp を Exec.asp から実行するほうが効率的ですが、ここでは STM ファイル内の #exec ディレクティブを示すのみです。
--- Exec.asp ---
<FORM NAME="RunExec" METHOD="POST" ACTION="Exec.asp"> <INPUT TYPE="SUBMIT" VALUE="Run the #exec Directive" NAME="RunExec"> </FORM> <% If Len(Request.Form("RunExec")) Then Response.Redirect("Exec.stm") End If %>
--- Exec.stm ---
<H3>Inside Exec.stm</H3> <!-- #exec CGI="/testfolder/test.asp?test=Hello" --> <FORM NAME="Return" METHOD="POST" ACTION="Exec.asp"> <INPUT TYPE="SUBMIT" VALUE="Return to Previous Page" NAME="Return"> </FORM>
--- Test.asp ---
<% Response.Write "<BR>Inside Test.asp.<BR>" Response.Write "Test = " & Request.QueryString("Test") & ".<BR>" %>