Question

Dans Classic ASP, Server.MapPath () ne fonctionne pas toujours correctement dans l'événement Application_OnStart de global.asa . J'ai une page ASP à & Quot; \ testfolder \ test.asp & Quot; dans une racine virtuelle, j'ai un fichier XSLT à & Quot \ xsl \ transform.xsl & "; . Ma racine virtuelle se trouve dans & "; C: \ inetpub \ wwwroot \ testapp \ &"; .

J'utilise MapPath dans la page ASP pour obtenir le chemin complet du fichier XSLT. L'appel est:

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

Parfois, MapPath renvoie & "; c: \ inetpub \ wwwroot \ testapp \ xsl \ transform.xsl &"; comme prévu, d'autres fois, il renvoie incorrectement < !> "; c: \ inetpub \ wwwroot \ testapp \ dossier de test \ xsl \ transform.xsl &"; . Le chemin incorrect cause évidemment de graves problèmes.

Était-ce utile?

La solution

Je réponds à ma propre question ici:

Ce problème se produit car, lorsqu'il est appelé dans Application_OnStart , MapPath inclut de manière incorrecte le contexte de la page qui a provoqué le démarrage de l'application. Si la première page ASP à exécuter lorsque l'application n'est pas encore démarrée ne se trouve pas à la racine de la racine virtuelle, alors MapPath devient confus et ajoute le chemin d'accès à la page ASP appelée au chemin renvoyé. .

Ainsi, par exemple, si la page qui a démarré l'application était dans & "c: \ inetpub \ wwwroot \ testapp \ folder1 \ folder2 \ test.asp &"; , alors MapPath ajouterait incorrectement " \ folder1 \ folder2 " au milieu du chemin et renverrait " c: \ inetpub \ wwwroot \ testapp \ folder1 \ folder2 \ xsl \ transform.xsl & ";

Si votre site Web ne contient que des fichiers dans le dossier racine ou n'utilise pas MapPath dans global.asa , vous ne remarquerez jamais cette petite anomalie. Je suppose que de nombreux sites ASP Classic échouent parfois au démarrage, mais leurs propriétaires effectuent un rapide iisreset, ne sachant pas ce qui ne va pas.

Il en résulte que vous ne pouvez pas utiliser MapPath de manière fiable dans global.asa si votre site Web contient des fichiers ASP ailleurs que dans le dossier racine. .

S'il s'agit d'un site Web unique, la solution la plus simple consiste à coder en dur les chemins que vous utilisez dans global.asa .

Si vous vendez un produit basé sur ASP Classic à d’autres personnes, le codage en dur des chemins n’est pas une option. Vous devez soit déplacer toute utilisation de MapPath hors du démarrage de l'application, soit résoudre le problème en écrivant des chemins d'accès dans vos fichiers ASP dans le cadre du programme d'installation.

Autres conseils

alternativement utiliser sXslPath = Server.MapPath (& "; \ xsl \ transform.xsl &";))

qui mappera ensuite le chemin depuis le répertoire racine

naturellement, si vous développez sur un système d'exploitation qui n'est pas un serveur, root sera le site Web par défaut. N'oubliez pas de changer de déploiement ...

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top