●설명: ASP 온라인 업그레이드 클래스 ●버전: 1.0.0
●작가: Xiao Yuehen(xiaoyuehen)
●MSN: xiaoyuehen(at)msn.com
●(at)을 @●Copyright로 바꿔주세요: 공유되므로 저작권은 중요하지 않습니다. 단, 온라인 배포에 국한되어야 하며 기존 미디어에서는 사용할 수 없습니다!
●이 지침을 지켜주시면 더욱 감사하겠습니다!
●더 나은 코드 최적화 및 관련 개선사항이 있으면 꼭 알려주세요. 정말 감사합니다!
●아이디어:
1. 버전 목록 조회 => 2. 버전 차이 비교 => 3. 다음 상위 버전의 업데이트 목록 가져오기, 상위 버전이 없으면 5단계로 이동 => 4. 업데이트 => 3단계로 돌아가기
5. 업데이트 종료 ●기타 지침: 증분 업그레이드.
●주제 외: 총 7시간 정도 걸렸습니다. 조금 성급하고 코드가 충분히 다듬어지지 않았습니다. 로컬 테스트 중에 두 가지 버전과 총 4개의 파일을 업데이트하는 데 거의 1초가 걸렸습니다.
비슷한 일을 해본 적이 없어서 어떤 알고리즘에 대해서도 이야기할 수 없습니다. 해본 친구들, 의견을 주세요.
●이 코드는 서로 통신하기 위한 코드입니다.●
●시작하기 전에 다음 지침을 주의 깊게 읽어 보십시오.
●서버측 요구사항:
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 ●필수● http://로 시작하는 버전 정보의 전체 URL입니다.
UrlUpdate ●필수● http://로 시작하고 /로 끝나는 업그레이드 URL
UpdateLocalPath ●필수● /로 시작하고 /로 끝나는 로컬 업데이트 디렉터리입니다. /로 시작하면 현재 사이트에 대한 쓰기를 방지합니다. ●기본값● /
UrlHistory ●필수● 생성된 소프트웨어 기록 파일의 파일 이름
LocalVersion ●필수● 현재 버전 정보 ●기본값● 1.0.0
파일 유형 ●필수● 버전 정보 접미사 ●기본값● .asp
●방법 설명:
doUpdate 업그레이드
관련 매개변수를 설정한 후 이 방법으로 긴 레벨을 시작할 수 있습니다. ● 기타 지침: 버전 번호는 숫자 0-9 및 .로 구성되어야 하며 첫 번째 숫자는 1보다 작을 수 없습니다. 각 버전의 길이는 다음과 같습니다. 숫자는 동일해야 합니다(예: 1.0 .0과 1.2.2 또는 1.2.04와 1.2.78).
●예:
프로그램 코드
<!--#include 파일="../__Inc/Cls_OnlineUpdate.asp"-->
<%
희미한 객체 업데이트
objUpdate = New Cls_oUpdate 설정
objUpdate 사용
.UrlVersion = " http://Localhost/__Jxc/Update/Version.asp "
.UrlUpdate = " http://Localhost/__Jxc/Update/ "
.UpdateLocalPath = "/"
.LocalVersion = "1.0.0"
.do업데이트
응답.쓰기(.Info)
끝
objUpdate = 없음 설정
%>
클래스 파일:
프로그램 코드
<%
렘 ########################################## ## ###############################
Rem ## 온라인 업그레이드 클래스 명세서
클래스 Cls_oUpdate
렘 ########################################## ## ##############
Rem ## 설명: ASP 온라인 업그레이드 클래스
렘 ## 버전: 1.0.0
렘 ## 저자: Xiao Yuehen
렘 ## MSN: xiaoyuehen(at)msn.com
Rem ## (at)을 @로 바꿔주세요.
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 ## http://로 시작하고 /로 끝나는 업그레이드 URL
Rem ## 예: http://localhost/software/
UrlUpdate = ""
Rem ## /로 시작하고 /로 끝나는 로컬 업데이트 디렉터리. /로 시작하는 것은 현재 사이트를 업데이트하는 것을 방지합니다.
Rem ## 프로그램은 디렉토리가 존재하는지 확인합니다. 존재하지 않으면 자동으로 생성됩니다.
UpdateLocalPath = "/"
Rem ## 생성된 소프트웨어 기록 파일
UrlHistory = "history.htm"
Rem ## 마지막 프롬프트 메시지
정보 = ""
Rem ## 현재 버전
로컬버전 = "1.0.0"
Rem ## 최신 버전
마지막 버전 = "1.0.0"
Rem ## 각 버전 정보 파일의 접미사 이름
파일 유형 = ".asp"
서브 끝
렘 ########################################## ## ##############
렘 ########################################## ## ##############
비공개 하위 클래스_Terminate()
서브 끝
렘 ########################################## ## ##############
Rem ## 업그레이드 작업 수행
렘 ########################################## ## ##############
공개 함수 doUpdate()
doUpdate = 거짓
UrlVersion = 트림(UrlVersion)
UrlUpdate = 트림(UrlUpdate)
Rem ## 업그레이드 URL 감지
If (Left(UrlVersion, 7) <> "http://") 또는 (Left(UrlUpdate, 7) <> "http://") 그러면
Info = "버전 감지 URL이 비어 있습니다. 업그레이드 URL이 비어 있거나 형식이 잘못되었습니다(#1)."
종료 기능
종료 조건
If Right(UrlUpdate, 1) <> "/" 그런 다음
sstrUrlUpdate = UrlUpdate & "/"
또 다른
sstrUrlUpdate = UrlUpdate
종료 조건
If Right(UpdateLocalPath, 1) <> "/" 그러면
sstrUrlLocal = UpdateLocalPath & "/"
또 다른
sstrUrlLocal = UpdateLocalPath
종료 조건
Rem ## 현재 버전 정보(번호)
sstrLocalVersion = 로컬 버전
sintLocalVersion = 바꾸기(sstrLocalVersion, ".", "")
sintLocalVersion = toNum(sintLocalVersion, 0)
Rem ## 버전 감지 (버전 정보 초기화 및 비교)
IsLastVersion인 경우 함수 종료
Rem ## 업그레이드 시작
doUpdate = NowUpdate()
LastVersion = sstrLocalVersion
기능 종료
렘 ########################################## ## ##############
http://bizhi.downcodes.com/
Rem ## 최신버전인지 확인하세요
렘 ########################################## ## ##############
개인 함수 IsLastVersion()
Rem ## 버전 정보 초기화(sarrVersionList 배열 초기화)
만약 iniVersionList라면
Rem ## 성공하면 버전 비교
나는 어둡다
IsLastVersion = 참
i = 0에서 UBound(sarrVersionList)까지
sarrVersionList(i) > sintLocalVersion이면
Rem ## 최신 버전이 있으면 루프를 종료합니다.
IsLastVersion = 거짓
Info = "이미 최신 버전입니다!"
종료 대상
종료 조건
다음
또 다른
Rem ## 그렇지 않으면 오류 메시지를 반환합니다.
IsLastVersion = 참
Info = "버전 정보를 가져오는 중 오류가 발생했습니다!(#2)"
종료 조건
기능 종료
렘 ########################################## ## ##############
Rem ## 최신버전인지 확인하세요
렘 ########################################## ## ##############
개인 함수 iniVersionList()
iniVersionList = 거짓
희미한 strVersion
strVersion = getVersionList()
Rem ## 반환값이 비어 있으면 초기화에 실패합니다.
strVersion = ""인 경우 다음
정보 = "오류......"
종료 기능
종료 조건
sstrVersionList = 바꾸기(strVersion, " ", "")
sarrVersionList = 분할(sstrVersionList, vbCrLf)
iniVersionList = 참
기능 종료
렘 ########################################## ## ##############
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 = 거짓
희미한 내부 버전
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 = sstrLogContent & strVer & ":" & vbCrLf
Rem ## 업데이트 시작
i = 0에서 UBound(arrFileList)까지
Rem ## 업데이트 형식: 버전 번호/file.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)
희미한 strContent
strContent = GetContent(sstrUrlUpdate & strSourceFile)
Rem ## 업데이트 및 로그에 쓰기
sDoCreateFile(Server.MapPath(sstrUrlLocal & strTargetFile), strContent) 그렇다면
sstrLogContent = sstrLogContent & "성공" & vbCrLf
또 다른
sstrLogContent = sstrLogContent & "실패" & vbCrLf
종료 조건
기능 종료
렘 ########################################## ## ##############
Rem ## 원격으로 콘텐츠 가져오기
렘 ########################################## ## ##############
비공개 함수 GetContent(strUrl)
GetContent = ""
Dim oXhttp, strContent
oXhttp = Server.CreateObject("Microsoft.XMLHTTP") 설정
'오류 발생 시 다음 재개
oXhttp를 사용하면
.Open "GET", strUrl, False, "", ""
.보내다
.readystate <> 4이면 함수 종료
strContent = .Responsebody
strContent = sBytesToBstr(strContent)
끝
oXhttp = 없음으로 설정
Err.Number <> 0이면
응답.쓰기(Err.설명)
Err.Clear
종료 기능
종료 조건
GetContent = strContent
기능 종료
렘 ########################################## ## ##############
렘 ########################################## ## ##############
Rem ## 인코딩 변환 바이너리 => 문자열
개인 함수 sBytesToBstr(vIn)
dimobj스트림
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 = 거짓
희미한 strPath
strPath = 왼쪽(strFileName, InstrRev(strFileName, "", -1, 1))
Rem ## 경로 및 파일 이름의 유효성을 확인하십시오.
If Not(CreateDir(strPath)) Then 함수 종료
'If Not(CheckFileName(strFileName)) Then 함수 종료
'응답.쓰기(str파일이름)
Const ForReading = 1, ForWriting = 2, ForAppending = 8
희미한 fso, f
fso = CreateObject("Scripting.FileSystemObject") 설정
f = fso.OpenTextFile(strFileName, ForWriting, True) 설정
f.strContent 쓰기
f.닫기
fso = 아무것도 설정하지 않음
f = 없음으로 설정
sDoCreateFile = 참
기능 종료
렘 ########################################## ## ##############
렘 ########################################## ## ##############
Rem ## 인코딩 변환 바이너리 => 문자열
개인 함수 sDoAppendFile(strFileName, ByRef strContent)
sDoAppendFile = 거짓
희미한 strPath
strPath = 왼쪽(strFileName, InstrRev(strFileName, "", -1, 1))
Rem ## 경로 및 파일 이름의 유효성을 확인하십시오.
If Not(CreateDir(strPath)) Then 함수 종료
'If Not(CheckFileName(strFileName)) Then 함수 종료
'응답.쓰기(str파일이름)
Const ForReading = 1, ForWriting = 2, ForAppending = 8
희미한 fso, f
fso = CreateObject("Scripting.FileSystemObject") 설정
f = fso.OpenTextFile(strFileName, ForAppending, True) 설정
f.strContent 쓰기
f.닫기
fso = 아무것도 설정하지 않음
f = 없음으로 설정
sDoAppendFile = 참
기능 종료
렘 ########################################## ## ##############
Rem ## 디렉토리를 생성하는 프로그램입니다. 디렉토리가 여러 레벨인 경우 하나씩 생성합니다.
렘 ########################################## ## ##############
개인 함수 CreateDir(ByVal strLocalPath)
Dim i, strPath, objFolder, tmpPath, tmptPath
희미한 arrPathList, intLevel
'오류 발생 시 다음 재개
strPath = 바꾸기(strLocalPath, "", "/")
objFolder = server.CreateObject("Scripting.FileSystemObject") 설정
arrPathList = 분할(strPath, "/")
intLevel = UBound(arrPathList)
I = 0의 경우 intLevel로
만약 I = 0이면
tmptPath = arrPathList(0) & "/"
또 다른
tmptPath = tmptPath & arrPathList(I) & "/"
종료 조건
tmpPath = 왼쪽(tmptPath, Len(tmptPath) - 1)
objFolder.FolderExists(tmpPath)가 아닌 경우 objFolder.CreateFolder tmpPath
다음
objFolder = 없음 설정
Err.Number <> 0이면
CreateDir = 거짓
Err.Clear
또 다른
CreateDir = 참
종료 조건
기능 종료
렘 ########################################## ## ##############
Rem ## 긴 정수 변환
렘 ########################################## ## ##############
개인 함수 toNum(s, 기본값)
IsNumeric(s) 및 s <> ""인 경우
toNum = CLng(들)
또 다른
toNum = 기본값
종료 조건
기능 종료
렘 ########################################## ## ##############
수업 종료
렘 ########################################## ## ################################
%>