سؤال

في ASP الكلاسيكي، Server.MapPath() لا يعمل دائمًا بشكل صحيح في Application_OnStart الحدث داخل global.asa.لدي صفحة ASP في " estfolder est.asp" داخل جذر افتراضي، لدي ملف XSLT في "\xsl ransform.xsl".يقع الجذر الافتراضي الخاص بي في "c:\inetpub\wwwroot estapp\".

أنا أستعمل MapPath ضمن صفحة ASP للحصول على المسار الكامل لملف XSLT.المكالمة هي:

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

في بعض الأحيان يعود MapPath "c:\inetpub\wwwroot estapp\xsl ransform.xsl" كما هو متوقع، وفي أحيان أخرى يتم إرجاعه بشكل غير صحيح "ج:\inetpub\wwwroot estapp\مجلد الاختبار\xsl ransform.xsl".من الواضح أن المسار غير الصحيح يسبب مشاكل خطيرة.

هل كانت مفيدة؟

المحلول

وأنا أجيب على سؤالي هنا:

تحدث هذه المشكلة لأنه عند الاتصال Application_OnStart, MapPath يتضمن بشكل غير صحيح سياق الصفحة التي تسببت في بدء تشغيل التطبيق.إذا كانت صفحة ASP الأولى التي سيتم تشغيلها عندما لم يتم تشغيل التطبيق بعد ليست في جذر الجذر الظاهري MapPath يرتبك ويضيف المسار إلى صفحة ASP المسماة إلى المسار الذي يُرجعه.

على سبيل المثال، إذا كانت الصفحة التي بدأت تشغيل التطبيق موجودة "c:\inetpub\wwwroot estapp\folder1\folder2 est.asp" ثم سيضيف MapPath بشكل غير صحيح "\مجلد1\مجلد2" في منتصف الطريق والعودة "c:\inetpub\wwwroot estapp\folder1\folder2\xsl ransform.xsl"

إذا كان موقع الويب الخاص بك يحتوي فقط على ملفات في المجلد الجذر أو لا يستخدم MapPath في global.asa فإنك لن تلاحظ أبدًا هذه الغرابة الصغيرة.أظن أن هناك الكثير من مواقع ASP Classic التي تفشل في بدء التشغيل بشكل صحيح في بعض الأحيان بسبب هذا، لكن أصحابها يقومون فقط بإعادة تعيين سريعة، دون معرفة الخطأ الذي حدث.

والنتيجة هي أنه لا يمكنك استخدامها بشكل موثوق MapPath في global.asa إذا كان لديك موقع ويب يحتوي على ملفات ASP في أي مكان آخر غير المجلد الجذر فقط.

إذا كان موقع الويب لمرة واحدة، فإن الحل الأسهل هو كتابة التعليمات البرمجية لأي مسارات تستخدمها global.asa.

إذا كنت تبيع منتجًا لأشخاص آخرين استنادًا إلى ASP Classic، فإن البرمجة الصعبة للمسارات ليست خيارًا.يجب عليك إما نقل كل استخدام MapPath عند بدء تشغيل التطبيق أو تعامل مع المشكلة عن طريق كتابة المسارات في ملفات ASP الخاصة بك كجزء من برنامج التثبيت.

نصائح أخرى

بدلاً من ذلك ، استخدم sxslpath = server.mappath (" xsl transform.xsl")

والذي سيقوم بعد ذلك بتعيين المسار من الدليل الجذر

بطبيعة الحال، إذا كنت تقوم بالتطوير على iis في نظام تشغيل ليس خادمًا، فسيكون الجذر هو موقع الويب الافتراضي، وسيتعين عليك أن تتذكر التغيير عند النشر...

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top