質問

クラシック ASP では、 Server.MapPath() 常に適切に動作するとは限りません アプリケーション_開始時 内のイベント グローバル.asa. 。私はASPページを持っています 「\テストフォルダー est.asp」 仮想ルート内に XSLT ファイルがあります。 「\xsl ransform.xsl」. 。私の仮想ルートは次の場所にあります 「c:\inetpub\wwwroot estapp\」.

私が使う マップパス ASP ページ内で XSLT ファイルへの完全なパスを取得します。電話は次のとおりです。

sXslPath = Server.MapPath("xsl\transform.xsl")

時々 MapPath が返される 「c:\inetpub\wwwroot estapp\xsl ransform.xsl」 期待どおり、または誤って返される場合もあります "c:\inetpub\wwwroot estapp\テストフォルダー\xsl ransform.xsl". 。パスが間違っていると、明らかに重大な問題が発生します。

役に立ちましたか?

解決

ここで私自身の質問に答えています。

この問題は、呼び出されたときに発生します。 アプリケーション_開始時, マップパス アプリケーションの起動の原因となったページのコンテキストが誤って含まれています。アプリケーションがまだ開始されていないときに実行される最初の ASP ページが仮想ルートのルートにない場合、 マップパス 混乱して、呼び出された ASP ページへのパスを、返されるパスに追加します。

たとえば、アプリを開始したページが 「c:\inetpub\wwwroot estapp\folder1\folder2 est.asp」 その場合、MapPath は誤って追加します 「\フォルダー1\フォルダー2」 道の真ん中に入って戻ります 「c:\inetpub\wwwroot estapp\folder1\folder2\xsl ransform.xsl」

Web サイトのルート フォルダーにファイルしかない場合、またはファイルを使用しない場合 マップパスグローバル.asa そうすれば、この小さな奇妙なことに決して気付かないでしょう。このせいで時々適切に起動できない ASP クラシック サイトがたくさんあるのではないかと思いますが、その所有者は何が問題になったのかまったく知らずに、簡単に iisreset を実行するだけです。

この結果、確実に使用できなくなります。 マップパスグローバル.asa Web サイトのルート フォルダー以外の場所に ASP ファイルがある場合。

1 回限りの Web サイトの場合、最も簡単な解決策は、使用するパスをハードコーディングすることです。 グローバル.asa.

ASP Classic に基づいて製品を他の人に販売する場合、パスをハードコーディングすることはできません。すべての使用法を移動する必要があります マップパス アプリケーションの起動を停止するか、インストーラーの一部として ASP ファイルにパスを書き込むことで問題に対処します。

他のヒント

または、sxslpath = server.mappath( " xsl transform.xsl")を使用します。

これにより、ルート ディレクトリからのパスがマッピングされます。

当然のことながら、サーバーではない OS の iis で開発している場合、root がデフォルトの Web サイトになるため、展開時に忘れずに変更する必要があります。

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top