● الوصف: فئة ترقية ASP عبر الإنترنت ● الإصدار: 1.0.0
●المؤلف: شياو يويهين (شياويوهين)
●MSN: xiaoyuehen(at)msn.com
● يرجى استبدال (at) بـ @ ● حقوق الطبع والنشر: نظرًا لأنها مشتركة، فإن حقوق الطبع والنشر لا تهم ولكن يجب أن تقتصر على النشر عبر الإنترنت ولا يمكن استخدامها في الوسائط التقليدية!
●سأكون أكثر امتنانًا إذا تمكنت من الالتزام بهذه التعليمات!
●إذا كان لديك تحسين أفضل للكود والتحسينات ذات الصلة، من فضلك تذكر أن تخبرني، شكرًا جزيلاً لك!
●الأفكار:
1. استعلم عن قائمة الإصدارات => 2. قارن اختلافات الإصدارات => 3. احصل على قائمة التحديث للإصدار الأعلى التالي، إذا لم يكن هناك إصدار أعلى، انتقل إلى الخطوة 5 => 4. التحديث => ارجع إلى الخطوة 3
5. الخروج من التحديث ● تعليمات أخرى: الترقية التزايدية.
●خارج الموضوع: استغرق الأمر حوالي 7 ساعات في المجمل، لقد كان الأمر مستعجلًا بعض الشيء ولم يتم تحسين الكود بشكل كافٍ أثناء الاختبار المحلي، استغرق الأمر ما يقرب من ثانية واحدة لتحديث نسختين وإجمالي 4 ملفات.
لم أفعل شيئًا مشابهًا من قبل، لذا لا يمكنني التحدث عن أي خوارزمية قام بها الأصدقاء، يرجى إبداء آرائكم.
●هذا الرمز مخصص للتواصل مع بعضكم البعض
●قبل البدء، يرجى قراءة التعليمات التالية بعناية.
●متطلبات جانب الخادم:
1. مدير الموقع، يمكنك الوصول إلى الإصدار ومعلومات الترقية ذات الصلة من خلال عنوان URL.
2. ملف معلومات الإصدار، مثل Version.asp
3. يجب أن يكون كل دليل إصدار ضمن الدليل المحدد بواسطة UrlUpdate (انظر الوصف أدناه)، على سبيل المثال: UrlUpdate هو http://Localhost/__Jxc/Update/ .
إذا كان الإصدار 1.0.8، فيجب أن يكون ملف الترقية لهذا الإصدار موجودًا على http://Localhost/__Jxc/Update/108/ .
4. المعلومات التي يتم إرجاعها بواسطة معلومات الإصدار عبارة عن قائمة، يمثل كل سطر معلومات الإصدار (لا يُسمح بأسطر فارغة)، والإصدار الأعلى في الأعلى ويكون التنسيق كما يلي:
1.1.0
1.0.8
1.0.0
5. تنسيق معلومات تحديث الملف لإصدار معين هو إزالة الرقم بعد الرقم + FileType (انظر الوصف أدناه)، ووضعه ضمن UrlUpdate، مثل: http://Localhost/__Jxc/Update/110.asp ، وشكل محتواه هو كما يلي:
3.htm|اختبار/اختبار/3.asp
4.htm|اختبار/اختبار/4.asp
5.htm|اختبار/5.asp
6.htm|اختبار/6.asp
افصل الملف المصدر عن الملف الوجهة باستخدام |. سيتم قراءة الملف المصدر من دليل الإصدار المقابل، كما هو موضح أعلاه، ويجب أن يكون العنوان المقابل 3.htm
http://Localhost/__Jxc/Update/110/3.htm
إذا UpdateLocalPath = "/"، فإن وجهة التحديث المقابلة لـ Test/Test/3.asp هي /Test/Test/3.asp. أثناء عملية التحديث، سيقوم البرنامج تلقائيًا بإنشاء دليل غير موجود.
والكتابة فوق الملف الهدف
●متطلبات العميل:
IIS 5.0 أو أعلى
دعم FSO (لإنشاء الملفات)
دعم Adodb.Stream (لتحويل الترميز)
دعم Microsoft.XMLHTTP (لاسترجاع المعلومات عن بعد)
●السمات:
معلومات احصل على آخر المعلومات أثناء عملية الترقية ●وصف المعلمة:
UrlVersion ●مطلوب ● عنوان URL الكامل لمعلومات الإصدار، بدءًا من http://
UrlUpdate ●مطلوب ● ترقية عنوان URL، الذي يبدأ بـ http:// وينتهي بـ /
UpdateLocalPath ● مطلوب ● دليل التحديث المحلي، الذي يبدأ بـ / وينتهي بـ / الذي يبدأ بـ / مخصص لتحديث الموقع الحالي ● القيمة الافتراضية ● /.
UrlHistory ●مطلوب ● اسم الملف لملف محفوظات البرنامج الذي تم إنشاؤه
LocalVersion ● مطلوب ● معلومات الإصدار الحالي ● القيمة الافتراضية ● 1.0.0
نوع الملف ● مطلوب ● لاحقة معلومات الإصدار ● القيمة الافتراضية .asp
●وصف الطريقة:
ترقية doUpdate
بعد تعيين المعلمات ذات الصلة، يمكنك بدء المستوى الطويل بهذه الطريقة. تعليمات أخرى: يجب أن يتكون رقم الإصدار من أرقام 0-9 و.، ولا يمكن أن يكون الرقم الأول أقل من 1. طول كل إصدار. يجب أن يكون الرقم هو نفسه، على سبيل المثال، 1.0 .0 و1.2.2 أو 1.2.04 و1.2.78.
●مثال:
رمز البرنامج
<!--#include file="../__Inc/Cls_OnlineUpdate.asp"-->
<%
تحديث خافت
تعيين objUpdate = New Cls_oUpdate
مع objUpdate
.UrlVersion = " http://Localhost/__Jxc/Update/Version.asp "
.UrlUpdate = " http://Localhost/__Jxc/Update/ "
.UpdateLocalPath = "/"
.الإصدار المحلي = "1.0.0"
تحديث
استجابة.كتابة(.معلومات)
نهاية مع
تعيين objUpdate = لا شيء
%>
ملفات الصف:
رمز البرنامج
<%
ريم ######################################################################################### ######################################################################################
Rem ## بيان فئة الترقية عبر الإنترنت
فئة Cls_oUpdate
ريم ######################################################################################### ##############
Rem ## الوصف: فئة ترقية ASP عبر الإنترنت
ريم ## الإصدار: 1.0.0
ريم ## المؤلف: شياو يويهين
ريم ## MSN: xiaoyuehen(at)msn.com
Rem ## يرجى استبدال (at) بـ @
Rem ## حقوق الطبع والنشر: نظرًا لأنه مشترك، فلا توجد حقوق طبع ونشر ولكن يجب أن يقتصر على النشر عبر الإنترنت ولا يمكن استخدامه في الوسائط التقليدية!
Rem ## إذا كان بإمكانك الالتزام بهذه التعليمات، سأكون ممتنًا أكثر!
Rem ## إذا كان لديك تحسين أفضل للكود والتحسينات ذات الصلة، فيرجى تذكر أن تخبرني، شكرًا جزيلاً لك!
ريم ######################################################################################### ##############
الإصدار المحلي العام، الإصدار الأخير، نوع الملف
UrlVersion العام، UrlUpdate، UpdateLocalPath، معلومات
تاريخ URL العام
sstrVersionList الخاصة، sarrVersionList، sintLocalVersion، sstrLocalVersion
خاص sstrLogContent، sstrHistoryContent، sstrUrlUpdate، sstrUrlLocal
ريم ######################################################################################### ##############
فئة فرعية خاصة_Initialize()
Rem ## عنوان URL الكامل لمعلومات الإصدار، بدءًا من http://
Rem ## مثال: http://localhost/software/Version.htm
URLVersion = ""
Rem ## ترقية عنوان URL، الذي يبدأ بـ http:// وينتهي بـ /
Rem ## مثال: http://localhost/software/
تحديث URL = ""
Rem ## دليل التحديث المحلي، الذي يبدأ بـ / وينتهي بـ /. البدء بـ / مخصص لتحديث الموقع الحالي.
Rem ## سيتحقق البرنامج من وجود الدليل، وإذا لم يكن موجودًا، فسيتم إنشاؤه تلقائيًا.
أوبديتلوكالباث = "/"
Rem ## تم إنشاء ملف محفوظات البرنامج
UrlHistory = "history.htm"
Rem ## آخر رسالة سريعة
معلومات = ""
ريم ## الإصدار الحالي
الإصدار المحلي = "1.0.0"
ريم ## أحدث إصدار
الإصدار الأخير = "1.0.0"
Rem ## اسم اللاحقة لكل ملف معلومات الإصدار
نوع الملف = ".asp"
نهاية الفرعية
ريم ######################################################################################### ##############
ريم ######################################################################################### ##############
فئة فرعية خاصة_Terminate()
نهاية الفرعية
ريم ######################################################################################### ##############
Rem ## تنفيذ إجراء الترقية
ريم ######################################################################################### ##############
الوظيفة العامة doUpdate()
تحديث = خطأ
UrlVersion = Trim(UrlVersion)
UrlUpdate = تقليم(UrlUpdate)
Rem ## ترقية الكشف عن عنوان URL
إذا (Left(UrlVersion, 7) <> "http://") أو (Left(UrlUpdate, 7) <> "http://") ثم
معلومات = "عنوان URL للكشف عن الإصدار فارغ، أو عنوان URL للترقية فارغ أو يحتوي على تنسيق خاطئ (#1)"
وظيفة الخروج
نهاية إذا
إذا كان Right(UrlUpdate, 1) <> "/" إذن
sstrUrlUpdate = UrlUpdate & "/"
آخر
sstrUrlUpdate = UrlUpdate
نهاية إذا
إذا كان Right(UpdateLocalPath, 1) <> "/" إذن
sstrUrlLocal = UpdateLocalPath & "/"
آخر
sstrUrlLocal = UpdateLocalPath
نهاية إذا
Rem ## معلومات الإصدار الحالي (الرقم)
sstrLocalVersion = LocalVersion
sintLocalVersion = استبدال (sstrLocalVersion، "."، "")
sintLocalVersion = toNum(sintLocalVersion, 0)
Rem ## الكشف عن الإصدار (تهيئة معلومات الإصدار والمقارنة)
إذا كان IsLastVersion ثم اخرج من الوظيفة
Rem ## ابدأ الترقية
تحديث = NowUpdate()
LastVersion = sstrLocalVersion
وظيفة النهاية
ريم ######################################################################################### ##############
http://bizhi.downcodes.com/
Rem ## تحقق مما إذا كان هو الإصدار الأحدث
ريم ######################################################################################### ##############
الوظيفة الخاصة IsLastVersion()
Rem ## تهيئة معلومات الإصدار (تهيئة مجموعة sarrVersionList)
إذا كان iniVersionList ثم
Rem ## إذا نجحت، قارن الإصدارات
خافت ط
IsLastVersion = صحيح
لأني = 0 إلى UBound(sarrVersionList)
إذا كان sarrVersionList(i)> sintLocalVersion ثم
Rem ## إذا كان هناك الإصدار الأحدث، فاخرج من الحلقة
IsLastVersion = خطأ
معلومات = "بالفعل أحدث إصدار!"
الخروج ل
نهاية إذا
التالي
آخر
Rem ## وإلا فسيتم إرجاع رسالة خطأ
IsLastVersion = صحيح
معلومات = "حدث خطأ أثناء الحصول على معلومات الإصدار!(#2)"
نهاية إذا
وظيفة النهاية
ريم ######################################################################################### ##############
Rem ## تحقق مما إذا كان هو الإصدار الأحدث
ريم ######################################################################################### ##############
وظيفة خاصة iniVersionList()
iniVersionList = خطأ
خافت strVersion
strVersion = getVersionList()
Rem ## إذا كانت القيمة المرجعة فارغة، فستفشل التهيئة.
إذا strVersion = "" إذن
معلومات = "خطأ......"
وظيفة الخروج
نهاية إذا
sstrVersionList = استبدال (strVersion، " "، "")
sarrVersionList = سبليت (sstrVersionList، vbCrLf)
iniVersionList = True
وظيفة النهاية
ريم ######################################################################################### ##############
Rem ## تحقق مما إذا كان هو الإصدار الأحدث
ريم ######################################################################################### ##############
وظيفة خاصة getVersionList ()
getVersionList = GetContent(UrlVersion)
وظيفة النهاية
ريم ######################################################################################### ##############
Rem ## ابدأ التحديث
ريم ######################################################################################### ##############
وظيفة خاصة NowUpdate()
خافت ط
بالنسبة إلى i = UBound(sarrVersionList) إلى 0 الخطوة -1
استدعاء doUpdateVersion(sarrVersionList(i))
التالي
معلومات = "اكتملت الترقية! <a href=""" & sstrUrlLocal & UrlHistory & """>عرض</a>"
وظيفة النهاية
ريم ######################################################################################### ##############
http://qqface.downcodes.com/
Rem ## محتوى النسخة المحدثة
ريم ######################################################################################### ##############
الوظيفة الخاصة doUpdateVersion(strVer)
doUpdateVersion = خطأ
خافت intVer
intVer = toNum(Replace(strVer, ".", ""), 0)
Rem ## إذا كان الإصدار المحدث أصغر من الإصدار الحالي، فاخرج من التحديث
إذا كان intVer <= sintLocalVersion ثم
وظيفة الخروج
نهاية إذا
خافت strFileListContent، arrFileList، strUrlUpdate
strUrlUpdate = sstrUrlUpdate & intVer & FileType
strFileListContent = GetContent(strUrlUpdate)
إذا strFileListContent = "" إذن
وظيفة الخروج
نهاية إذا
Rem ## تحديث رقم الإصدار الحالي
sintLocalVersion = intVer
sstrLocalVersion = strVer
خافت أنا، arrTmp
Rem ## احصل على قائمة ملفات التحديث
arrFileList = سبليت (strFileListContent، vbCrLf)
Rem ## سجل التحديث
سسترلوجكونتينت = ""
sstrLogContent = sstrLogContent & strVer & ": " & vbCrLf
Rem ## ابدأ التحديث
لأني = 0 إلى UBound(arrFileList)
Rem ## تنسيق التحديث: رقم الإصدار/file.htm|ملف الوجهة
arrTmp = سبليت(arrFileList(i), "|")
sstrLogContent = sstrLogContent & vbTab & arrTmp(1)
استدعاء doUpdateFile(intVer & "/" & arrTmp(0), arrTmp(1))
التالي
Rem ## الكتابة إلى ملف السجل
sstrLogContent = sstrLogContent & Now() & vbCrLf
Response.Write("<pre>" & sstrLogContent & "</pre>")
اتصل بـ sDoCreateFile(Server.MapPath(sstrUrlLocal & "Log" & intVer & ".htm")، _
"<pre>" & sstrLogContent & "</pre>")
اتصل بـ sDoAppendFile(Server.MapPath(sstrUrlLocal & UrlHistory)، "<pre>" & _
strVer & "________" & Now() & "</pre>" & vbCrLf)
وظيفة النهاية
ريم ######################################################################################### ##############
Rem ## ملف التحديث
ريم ######################################################################################### ##############
وظيفة خاصة doUpdateFile (strSourceFile، strTargetFile)
المحتوى الخافت
strContent = GetContent(sstrUrlUpdate & strSourceFile)
Rem ## قم بالتحديث والكتابة في السجل
إذا كان sDoCreateFile(Server.MapPath(sstrUrlLocal & strTargetFile)، strContent) ثم
sstrLogContent = sstrLogContent و"النجاح" وvbCrLf
آخر
sstrLogContent = sstrLogContent & "فشل" & vbCrLf
نهاية إذا
وظيفة النهاية
ريم ######################################################################################### ##############
Rem ## احصل على المحتوى عن بعد
ريم ######################################################################################### ##############
الوظيفة الخاصة GetContent(strUrl)
الحصول على المحتوى = ""
خافت oXhttp، strContent
تعيين oXhttp = Server.CreateObject("Microsoft.XMLHTTP")
"عند حدوث خطأ في الاستئناف التالي."
مع أوكستتب
.افتح "GET"، strUrl، False، ""، ""
.يرسل
إذا .readystate <> 4 ثم اخرج من الوظيفة
strContent = .Responsebody
strContent = sBytesToBstr(strContent)
نهاية مع
اضبط oXhttp = لا شيء
إذا Err.Number <> 0 ثم
الاستجابة.الكتابة (خطأ.الوصف)
خطأ.واضح
وظيفة الخروج
نهاية إذا
GetContent = strContent
وظيفة النهاية
ريم ######################################################################################### ##############
ريم ######################################################################################### ##############
Rem ## ترميز التحويل الثنائي => string
وظيفة خاصة sBytesToBstr(vIn)
com.dimobjStream
تعيين objStream = Server.CreateObject("adodb.stream")
objStream.Type = 1
objStream.Mode = 3
objStream.Open
objStream.Write vIn
objStream.Position = 0
objStream.Type = 2
objStream.Charset = "GB2312"
sBytesToBstr = objStream.ReadText
objStream.Close
تعيين objStream = لا شيء
وظيفة النهاية
ريم ######################################################################################### ##############
ريم ######################################################################################### ##############
Rem ## ترميز التحويل الثنائي => string
وظيفة خاصة sDoCreateFile (strFileName، ByRef strContent)
sDoCreateFile = خطأ
مسار خافت
strPath = Left(strFileName, InstrRev(strFileName, "", -1, 1))
Rem ## التحقق من صحة المسار واسم الملف
إذا لم يكن (CreateDir(strPath)) ثم اخرج من الوظيفة
"إذا لم يكن (CheckFileName (strFileName)) ثم اخرج من الوظيفة
"الاستجابة. الكتابة (strFileName)
Const ForReading = 1، ForWriting = 2، ForAppending = 8
خافت fso، f
تعيين fso = CreateObject("Scripting.FileSystemObject")
تعيين f = fso.OpenTextFile (strFileName، ForWriting، True)
f.اكتب محتوى strContent
و. إغلاق
تعيين fso = لا شيء
تعيين و = لا شيء
sDoCreateFile = True
وظيفة النهاية
ريم ######################################################################################### ##############
ريم ######################################################################################### ##############
Rem ## ترميز التحويل الثنائي => string
وظيفة خاصة sDoAppendFile (strFileName، ByRef strContent)
sDoAppendFile = خطأ
مسار خافت
strPath = Left(strFileName, InstrRev(strFileName, "", -1, 1))
Rem ## التحقق من صحة المسار واسم الملف
إذا لم يكن (CreateDir(strPath)) ثم اخرج من الوظيفة
"إذا لم يكن (CheckFileName (strFileName)) ثم اخرج من الوظيفة
"الاستجابة. الكتابة (strFileName)
Const ForReading = 1، ForWriting = 2، ForAppending = 8
خافت fso، f
تعيين fso = CreateObject("Scripting.FileSystemObject")
تعيين f = fso.OpenTextFile (strFileName، ForAppending، True)
f.اكتب محتوى strContent
و. إغلاق
تعيين fso = لا شيء
تعيين و = لا شيء
sDoAppendFile = True
وظيفة النهاية
ريم ######################################################################################### ##############
Rem ## برنامج لإنشاء دليل إذا كان هناك مستويات متعددة من الأدلة، فقم بإنشائها واحدًا تلو الآخر.
ريم ######################################################################################### ##############
وظيفة خاصة CreateDir (ByVal strLocalPath)
Dim i, strPath, objFolder, tmpPath, tmptPath
خافت arrPathList، intLevel
"عند حدوث خطأ في الاستئناف التالي."
strPath = استبدال (strLocalPath، ""، "/")
تعيين objFolder = server.CreateObject("Scripting.FileSystemObject")
arrPathList = سبليت (strPath، "/")
intLevel = UBound(arrPathList)
لأني = 0 إلى intLevel
إذا كنت = 0 ثم
tmptPath = arrPathList(0) & "/"
آخر
tmptPath = tmptPath & arrPathList(I) & "/"
نهاية إذا
tmpPath = اليسار (tmptPath، لين (tmptPath) - 1)
إذا لم يكن objFolder.FolderExists(tmpPath) ثم objFolder.CreateFolder tmpPath
التالي
تعيين objFolder = لا شيء
إذا Err.Number <> 0 ثم
CreateDir = خطأ
خطأ.واضح
آخر
CreateDir = صحيح
نهاية إذا
وظيفة النهاية
ريم ######################################################################################### ##############
Rem ## تحويل عدد صحيح طويل
ريم ######################################################################################### ##############
وظيفة خاصة لعدد (أرقام، افتراضي)
إذا كان IsNumeric(s) وs <> "" إذن
toNum = CLng(s)
آخر
toNum = default
نهاية إذا
وظيفة النهاية
ريم ######################################################################################### ##############
نهاية الفصل
ريم ######################################################################################### ###############################################################################
%>