●内容:ASPオンラインアップグレード講習 ●バージョン:1.0.0
●著者:シャオユエヘン(xiaoyuehen)
●MSN: xiaoyuehen(at)msn.com
●(at)を@に置き換えてください。●著作権: 共有されているため、著作権は関係ありません。ただし、オンラインでの配布に限定され、従来のメディアでは使用できません。
●守っていただけるとさらに嬉しいです!
●より良いコードの最適化とそれに関連する改善があれば、忘れずに教えてください。ありがとうございました。
●アイデア:
1. バージョン リストをクエリ => 2. バージョンの違いを比較 => 3. 1 つ上のバージョンの更新リストを取得します。上位バージョンがない場合は、ステップ 5 に進みます => 4. 更新 => ステップ 3 に戻ります
5. アップデートを終了します。 ●その他の指示: 増分アップグレード。
●余談:ちょっと急ぎすぎてコードの洗練が不十分だったので、2つのバージョンと計4つのファイルを更新するのに1秒近くかかりました。
私はこれまでに同様のことをしたことがないので、アルゴリズムについて話すことはできません。経験のある方、ぜひ意見を聞かせてください。
●このコードは相互通信を目的としています●
●始める前に、以下の注意事項をよくお読みください。
●サーバー側の要件:
1. サイト管理者は、URL アドレスを通じてバージョンおよび関連するアップグレード情報にアクセスできます。
2. バージョン情報ファイル (Version.asp など)
3. 各バージョンのディレクトリは、UrlUpdate で指定されたディレクトリの下にある必要があります (以下の説明を参照)。たとえば、UrlUpdate はhttp://Localhost/__Jc/Update/です。
バージョンが 1.0.8 の場合、このバージョンのアップグレード ファイルはhttp://Localhost/__XXS/Update/108/にある必要があります。
4. バージョン情報によって返される情報はリストであり、各行がバージョン情報を表し (空白行は許可されません)、上位のバージョンが先頭になります。形式は次のとおりです。
1.1.0
1.0.8
1.0.0
5. 特定のバージョンのファイル更新情報の形式は、番号+ FileType (以下の説明を参照) の後の番号を削除し、次のように UrlUpdate の下に配置します。そのコンテンツの形式は次のとおりです。
3.htm|テスト/テスト/3.asp
4.htm|テスト/テスト/4.asp
5.htm|テスト/5.asp
6.htm|テスト/6.asp
ソース ファイルと宛先ファイルは | で区切ります。ソース ファイルは、上に示すように、対応するバージョンのディレクトリから読み取られます。3.htm の対応するアドレスは次のようになります。
http://Localhost/__Jc/Update/110/3.htm
UpdateLocalPath = "/" の場合、Test/Test/3.asp の対応する更新先は /Test/Test/3.asp になります。更新プロセス中に、プログラムは存在しないディレクトリを自動的に作成します。
そして対象ファイルを上書きします
●クライアント要件:
IIS 5.0以降
FSO サポート (ファイル生成用)
Adodb.Stream サポート (エンコード変換用)
Microsoft.XMLHTTP サポート (情報のリモート取得用)
●属性:
Info アップグレードプロセス中の最新情報を取得します。 ●パラメータの説明:
UrlVersion ●必須● http:// で始まるバージョン情報の完全な URL
URLUpdate ●必須● http:// で始まり / で終わるアップグレード URL
UpdateLocalPath ●必須● / で始まり / で終わるローカル更新ディレクトリです。 ●デフォルト値● / で始まります。
UrlHistory ●必須● 生成されるソフトウェア履歴ファイルのファイル名
LocalVersion ●必須● 現在のバージョン情報 ●デフォルト値● 1.0.0
FileType ●必須● バージョン情報のサフィックス ●デフォルト値● .asp
●方法の説明:
doUpdate アップグレード
関連するパラメータを設定した後、この方法で長いレベルを開始できます。 ●その他の指示: バージョン番号は数字 0 ~ 9 と . で構成する必要があり、最初の桁は 1 未満にすることはできません。 各バージョンの長さ。たとえば、1.0 .0 と 1.2.2、または 1.2.04 と 1.2.78 は同じである必要があります。
●例:
プログラムコード
<!--#include file="../__Inc/Cls_OnlineUpdate.asp"-->
<%
薄暗いオブジェクト更新
objUpdate = 新しい Cls_oUpdate を設定します。
objUpdate を使用する
.UrlVersion = " http://Localhost/__XXS/Update/Version.asp "
.UrlUpdate = " http://Localhost/__XXS/Update/ "
.UpdateLocalPath = "/"
.LocalVersion = "1.0.0"
.doUpdate
応答.書き込み(.情報)
で終わる
objUpdate = なしを設定します
%>
クラスファイル:
プログラムコード
<%
レム ############################################# ## ##################################
Rem ## オンライン アップグレード クラス ステートメント
クラスCls_oUpdate
レム ############################################# ## ##############################
Rem ## 説明: ASP オンライン アップグレード クラス
レム ## バージョン: 1.0.0
レム## 著者:シャオ・ユエヘン
レム ## MSN: xiaoyuehen(at)msn.com
Rem ## (at) を @ に置き換えてください
Rem ## 著作権: 共有されているため、著作権はありません。ただし、オンラインでの配布に限定され、従来のメディアでは使用できません。
Rem ## この指示を守っていただければ、さらに感謝いたします。
Rem ## コードの最適化とそれに関連する改善点があれば、忘れずに教えてください。ありがとうございました。
レム ############################################# ## ##############################
パブリック LocalVersion、LastVersion、FileType
パブリック URLVersion、UrlUpdate、UpdateLocalPath、情報
パブリック URL履歴
プライベート sstrVersionList、sarrVersionList、sintLocalVersion、sstrLocalVersion
プライベート sstrLogContent、sstrHistoryContent、sstrUrlUpdate、sstrUrlLocal
レム ############################################# ## ##############################
プライベートサブクラス_Initialize()
Rem ## http:// で始まるバージョン情報の完全な URL
Rem ## 例: http://localhost/software/Version.htm
URLバージョン = ""
Rem ## アップグレード URL (http:// で始まり / で終わる)
Rem ## 例: http://localhost/software/
URL更新 = ""
Rem ## ローカル更新ディレクトリ。/ で始まり、/ で始まり、他のディレクトリへの書き込みを禁止します。
Rem ## プログラムはディレクトリが存在するかどうかを確認し、存在しない場合は自動的に作成されます。
UpdateLocalPath = "/"
Rem ## 生成されたソフトウェア履歴ファイル
URLHistory = "history.htm"
Rem ## 最後のプロンプトメッセージ
情報 = ""
レム ## 現在のバージョン
LocalVersion = "1.0.0"
レム ## 最新バージョン
LastVersion = "1.0.0"
Rem ## 各バージョン情報ファイルのサフィックス名
ファイルタイプ = ".asp"
エンドサブ
レム ############################################# ## ##############################
レム ############################################# ## ##############################
プライベートサブクラス_Terminate()
エンドサブ
レム ############################################# ## ##############################
Rem ## アップグレード アクションを実行する
レム ############################################# ## ##############################
パブリック関数 doUpdate()
doUpdate = False
URLVersion = トリム(URLVersion)
URLUpdate = トリム(URLUpdate)
Rem ## アップグレード URL 検出
If (Left(UrlVersion, 7) <> "http://") または (Left(UrlUpdate, 7) <> "http://") then
Info = 「バージョン検出 URL が空です。アップグレード URL が空であるか、形式が間違っています (#1)」
終了機能
終了の場合
正しい場合(UrlUpdate, 1) <> "/" then
sstrUrlUpdate = URLUpdate & "/"
それ以外
sstrUrlUpdate = URLアップデート
終了の場合
正しい場合 (UpdateLocalPath, 1) <> "/" then
sstrUrlLocal = UpdateLocalPath & "/"
それ以外
sstrUrlLocal = UpdateLocalPath
終了の場合
Rem ## 現在のバージョン情報(数値)
sstrLocalVersion = LocalVersion
sintLocalVersion = Replace(sstrLocalVersion, ".", "")
sintLocalVersion = toNum(sintLocalVersion, 0)
Rem ## バージョン検出(バージョン情報の初期化と比較)
If IsLastVersion then Exit 関数
レム ## アップグレードを開始してください
doUpdate = NowUpdate()
LastVersion = sstrLocalVersion
終了機能
レム ############################################# ## ##############################
http://bizhi.downcodes.com/
Rem ## 最新バージョンかどうかを確認してください
レム ############################################# ## ##############################
プライベート関数 IsLastVersion()
Rem ## バージョン情報の初期化(sarrVersionList配列の初期化)
if iniVersionList then
Rem ## 成功した場合は、バージョンを比較します
ディム・アイ
IsLastVersion = True
i = 0 から UBound(sarrVersionList) まで
sarrVersionList(i) > sintLocalVersion の場合
Rem ## 最新バージョンがある場合は、ループを終了します
IsLastVersion = False
Info = 「すでに最新バージョンです!」
出口
終了の場合
次
それ以外
Rem ## それ以外の場合はエラーメッセージを返します
IsLastVersion = True
Info = "バージョン情報の取得中にエラーが発生しました!(#2)"
終了の場合
終了機能
レム ############################################# ## ##############################
Rem ## 最新バージョンかどうかを確認してください
レム ############################################# ## ##############################
プライベート関数 iniVersionList()
iniVersionList = False
ディム strVersion
strVersion = getVersionList()
Rem ## 戻り値が空の場合、初期化は失敗します。
strVersion = "" の場合
情報 = 「エラー....」
終了機能
終了の場合
sstrVersionList = Replace(strVersion, " ", "")
sarrVersionList = Split(sstrVersionList, vbCrLf)
iniVersionList = True
終了機能
レム ############################################# ## ##############################
Rem ## 最新バージョンかどうかを確認してください
レム ############################################# ## ##############################
プライベート関数 getVersionList()
getVersionList = GetContent(URLVersion)
終了機能
レム ############################################# ## ##############################
Rem ## アップデートを開始します
レム ############################################# ## ##############################
プライベート関数 NowUpdate()
ディム・アイ
i = UBound(sarrVersionList) から 0 ステップ -1 の場合
doUpdateVersion(sarrVersionList(i)) を呼び出す
次
Info = "アップグレードが完了しました。<a href=""" & sstrUrlLocal & UrlHistory & """>表示</a>"
終了機能
レム ############################################# ## ##############################
http://qqface.downcodes.com/
Rem ## 更新されたバージョンの内容
レム ############################################# ## ##############################
プライベート関数 doUpdateVersion(strVer)
doUpdateVersion = False
ディム整数
intVer = toNum(Replace(strVer, ".", ""), 0)
Rem ## 更新されたバージョンが現在のバージョンより小さい場合は、更新を終了してください
intVer <= sintLocalVersion の場合
終了機能
終了の場合
Dim strFileListContent、arrFileList、strUrlUpdate
strUrlUpdate = sstrUrlUpdate & intVer & FileType
strFileListContent = GetContent(strUrlUpdate)
strFileListContent = "" の場合
終了機能
終了の場合
Rem ## 現在のバージョン番号を更新してください
sintLocalVersion = intVer
sstrLocalVersion = strVer
薄暗くて、arrTmp
Rem ## アップデートファイルリストの取得
arrFileList = Split(strFileListContent, vbCrLf)
Rem ## 更新ログ
sstrLogContent = ""
sstrLogContent = sstrLogContent & strVer & ":" & vbCrLf
Rem ## アップデートを開始します
i = 0 の場合、UBound(arrFileList)
Rem ## 更新形式: バージョン番号/ファイル.htm|宛先ファイル
arrTmp = Split(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)
Dim strContent
strContent = GetContent(sstrUrlUpdate & strSourceFile)
Rem ## 更新してログに書き込みます
If sDoCreateFile(Server.MapPath(sstrUrlLocal & strTargetFile), strContent) then
sstrLogContent = sstrLogContent & "成功" & vbCrLf
それ以外
sstrLogContent = sstrLogContent & "失敗" & vbCrLf
終了の場合
終了機能
レム ############################################# ## ##############################
Rem ## コンテンツをリモートで取得する
レム ############################################# ## ##############################
プライベート関数 GetContent(strUrl)
GetContent = ""
Dim oXhttp、strContent
Set oXhttp = Server.CreateObject("Microsoft.XMLHTTP")
'エラー時は次へ再開
oXhttp を使用
.Open "GET"、strUrl、False、""、""
。送信
If .readystate <> 4 then 関数を終了
strContent = .Responsebody
strContent = sBytesToBstr(strContent)
で終わる
oXhttp = なしを設定します
Err.Number <> 0 の場合、次に
応答.書き込み(エラー説明)
エラークリア
終了機能
終了の場合
GetContent = strContent
終了機能
レム ############################################# ## ##############################
レム ############################################# ## ##############################
Rem ## エンコード変換バイナリ => 文字列
プライベート関数 sBytesToBstr(vIn)
dimobjStream
set 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 ## エンコード変換バイナリ => 文字列
プライベート関数 sDoCreateFile(strFileName, ByRef strContent)
sDoCreateFile = False
ディムストラパス
strPath = Left(strFileName, InstrRev(strFileName, "", -1, 1))
Rem ## パスとファイル名の有効性を確認してください
If Not(CreateDir(strPath)) then Exit 関数
'そうでない場合(CheckFileName(strFileName)) then 関数を終了
'response.Write(strFileName)
Const ForReading = 1、ForWriting = 2、ForAppending = 8
薄暗い fso、f
Set fso = CreateObject("Scripting.FileSystemObject")
Set f = fso.OpenTextFile(strFileName, ForWriting, True)
f.strContentの書き込み
f.閉じる
fso = 何も設定しない
f = 何も設定しない
sDoCreateFile = True
終了機能
レム ############################################# ## ##############################
レム ############################################# ## ##############################
Rem ## エンコード変換バイナリ => 文字列
プライベート関数 sDoAppendFile(strFileName, ByRef strContent)
sDoAppendFile = False
ディムストラパス
strPath = Left(strFileName, InstrRev(strFileName, "", -1, 1))
Rem ## パスとファイル名の有効性を確認してください
If Not(CreateDir(strPath)) then Exit 関数
'そうでない場合(CheckFileName(strFileName)) then 関数を終了
'response.Write(strFileName)
Const ForReading = 1、ForWriting = 2、ForAppending = 8
薄暗い fso、f
Set fso = CreateObject("Scripting.FileSystemObject")
Set f = fso.OpenTextFile(strFileName, ForAppending, True)
f.strContentの書き込み
f.閉じる
fso = 何も設定しない
f = 何も設定しない
sDoAppendFile = True
終了機能
レム ############################################# ## ##############################
Rem ## ディレクトリを作成するプログラムです。ディレクトリが複数ある場合は、1 つずつ作成します。
レム ############################################# ## ##############################
プライベート関数 CreateDir(ByVal strLocalPath)
Dim i、strPath、objFolder、tmpPath、tmptPath
Dim arrPathList、intLevel
'エラー時は次へ再開
strPath = Replace(strLocalPath, "", "/")
Set objFolder = server.CreateObject("Scripting.FileSystemObject")
arrPathList = Split(strPath, "/")
intLevel = UBound(arrPathList)
I = 0 から intLevel まで
I = 0 の場合
tmptPath = arrPathList(0) & "/"
それ以外
tmptPath = tmptPath & arrPathList(I) & "/"
終了の場合
tmpPath = Left(tmptPath, Len(tmptPath) - 1)
objFolder.FolderExists(tmpPath) でない場合は、objFolder.CreateFolder tmpPath
次
objFolder = なしを設定します
Err.Number <> 0 の場合、次に
CreateDir = False
エラークリア
それ以外
CreateDir = True
終了の場合
終了機能
レム ############################################# ## ##############################
Rem ## 長整数変換
レム ############################################# ## ##############################
プライベート関数 toNum(s、デフォルト)
IsNumeric(s) かつ s <> "" の場合
toNum = CLng(s)
それ以外
toNum = デフォルト
終了の場合
終了機能
レム ############################################# ## ##############################
終了クラス
レム ############################################# ## ##################################
%>