Search Results for '프로그래밍/Asp'


198 posts related to '프로그래밍/Asp'

  1. 2011/10/10 DextUpLoad 를 이용한 WaterMark와 Thumbnail
  2. 2011/10/10 배열을 이용한 InStr로 특정 문자 검색
  3. 2011/10/10 XML 데이터 파싱하기
  4. 2011/10/10 asp utf-8 한글
  5. 2011/09/13 ASP 해킹 방지 보안 방법
  6. 2011/09/13 ASP UTF-8 파일다운로드 한글깨짐 현상 해결방안 2
  7. 2011/09/13 ASPFTP 업로드 방식
  8. 2011/03/06 [함수] - [ ASP ] utf-8에서 urldecode 하기
  9. 2011/01/27 캐시(Cache) 제거 / 기타 정보
  10. 2010/11/06 Windows Script Encoder
  11. 2010/10/12 [ASP] 구글 지메일 smtp를 이용한 메일 발송
  12. 2010/09/29 ASP 암호를 역변환 하기...
  13. 2010/09/02 체크된 값만 받기 - 쇼핑몰, 관리자등에 활용
  14. 2010/09/02 include와 server.execute의 차이점
  15. 2010/03/22 ASP용 로그 기록 클래스 2
  16. 2010/03/22 SQL 쉽게 쉽게 코딩하기 - 날쿼리 -
  17. 2010/03/22 썸네일 생성 dll (codeproject에서 다운받은놈)
  18. 2010/03/01 다중검색 쿼리 만들기
  19. 2010/03/01 ASP 소스 보기 1
  20. 2009/10/13 JS 파일 인코드 및 디코드 asp
  21. 2009/08/25 ASP 에서 Socket 통신 코드 예제 2
  22. 2009/08/07 파일복사및 리네임
  23. 2009/08/07 asp 전체메일보내기
  24. 2009/08/07 ASP + MS-SQL 사용중인 DB 용량보기
  25. 2009/08/07 비주얼 베이직으로 간단하게 만드는 ASP용 COM+
  26. 2009/08/07 [본문스크랩] DLL 등록 쉽게 하기
  27. 2009/08/07 프레임에서 새로고침(F5)를 하더라도 첫 페이지로 이동하지 않습니다.
  28. 2009/08/01 이클립스에서 ASP 개발하기
  29. 2009/07/16 아티보드 특징 - 소개- ASP 무료 게시판 솔루션 1
  30. 2009/07/16 아티보드 2.0 2009년 6월 8일자 버전입니다.
<%@ Language=VBScript %>
<%
Dim UpPath, fPath(1), fSize(1), tmp
Dim fWaterMark, fThumbnail, SourceFileName

Set QueryForm = Server.CreateObject("DEXT.FileUpload")
QueryForm.DefaultPath = "C:\Temp"

' 원본 업로드
UpPath = QueryForm("file").Save
response.write "Save as Source Image:"& UpPath


Set objImage = Server.CreateObject("DEXT.ImageProc")

if objImage.SetSourceFile(UpPath) = True then
' FileNameWithoutExt 속성은 업로드한 파일의 이름을 리턴한다.(확장자 제외)
tmp = "/DEXTUploadProSamples/Image/WaterMark/watermark.bmp"
SourceFileName = QueryForm("file").FileNameWithoutExt

fPath(0) = "C:\Temp\"& SourceFileName &"(WaterMark).jpg"
fPath(1) = "C:\Temp\"& SourceFileName &"(Thumbnail).jpg"

' 워터마크 처리
fWaterMark = objImage.SaveAsWatermarkImage(tmp,fPath(0),-10,-10,false)
response.write "Save as Watermark Image: "& fWaterMark
end if

if objImage.SetSourceFile(fWaterMark) = True then
' 워터마킹 처리 된 이미지로 썸네일 처리 한다.
fSize(0) = objImage.ImageWidth / 2
fSize(1) = objImage.ImageHeight / 2
fThumbnail = objImage.SaveasThumbnail(fPath(1),fSize(0),fSize(1),false)
response.write "Save as Thumbnail: "& fThumbnail
end if

Set objImage = Nothing
Set QueryForm = Nothing
%>
2011/10/10 14:52 2011/10/10 14:52
아주 오래된 사이트가 있습니다.
광고가 하도 많이 올라와서 필터링이 필요한대 마땅히 방화벽이나 프로그램 개선을 할 수 있는 방법이 없었습니다.
그래서 대략 이런 루틴으로 만들어서 응급처치를 해드렸습니다.
'*******************************************************************
'## Duraboys Plugins DataSniffer in injection
'*******************************************************************
InjFilter = "슬롯머신『』영천경마정보 『』릴게임『』경마『』섹파『』섹스『』카지노"
InjFilter = InjFilter &"『』대출『』파친코『』고스톱『』경륜『』용궁『』바카라"
Function f_injection(query_string)
f_injection =false
InjFilter_arr = split(InjFilter, "『』")
InjFilter_cnt = Ubound(InjFilter_arr)
for j=0 to InjFilter_cnt
if InStr(1,query_string,InjFilter_arr(j), 1) > 0 then
f_injection = true
'response.end
exit for
end if
next
End Function
'*******************************************************************
2011/10/10 14:51 2011/10/10 14:51

<%
Response.Expires = -1
Response.Expiresabsolute = Now() - 1
Response.AddHeader "pragma","no-cache"
Response.AddHeader "chche-control", "private"
Response.CacheControl = "no-cache"
%>

<%
targetURL = "http://xml경로"

Set xmlHttp = Server.CreateObject("MSXML2.ServerXMLHTTP")
xmlHttp.Open "GET", targetURL, False
xmlHttp.Send

Set xmlDOM = server.CreateObject("MSXML2.DOMDOCUMENT.4.0")
xmlDOM.async = False
xmlDOM.LoadXML xmlHttp.responseText

Set xmlHttp = Nothing

Set rootNode = xmlDOM.selectNodes("---최상위엘리먼트명---")
Set itemNode = rootNode(0).childNodes

DIM arr_MovieData()

For i = 0 To itemNode.length-1

Set ChildNode = itemNode(i).childNodes
ChildNodeCNT = ChildNode.length-1

REDIM arr_MovieData(itemNode.length, ChildNode.length)

For j = 0 To ChildNode.length-1

arr_MovieData(i, j) = ChildNode(j).childNodes(0).Text
Response.Write(arr_MovieData(i, j) & " ")
'insert job <================================== 루프돌면서 이부분에서 처리해준다.
Next
Set ChildNode = Nothing
Response.Write("<br/>")
Next

Set itemNode = Nothing
Set rootNode = Nothing

Set xmlDOM = Nothing
%>

2011/10/10 14:50 2011/10/10 14:50
<% @CODEPAGE="65001" language="vbscript" %>
<% Option Explicit %>
<% session.CodePage = "65001" %>
<% Response.CharSet = "utf-8" %>
<meta http-equiv="content-type" content="text/html; charset=UTF-8">
2011/10/10 14:48 2011/10/10 14:48
'////////////////////////////////////////////////////////////////////
'//가. 명령어 삽입(Command Injection) 가능성
'////////////////////////////////////////////////////////////////////
Dim title, str
title = "What's Up!!! <what happen> Oh my god!!!! & goodness"
str = ""
//변환을 수행할 함수
Sub ReplaceStr(content, byref str)
content = replace(content, "'", """)
content = replace(content, "&", "&")
content = replace(content, "<", "<")
content = replace(content, ">", ">")

str = content
End Sub

ReplaceStr title, str
response.write str

%>

'////////////////////////////////////////////////////////////////////
'//나. 크로스 사이트 스크립팅 (XSS) 가능성
'////////////////////////////////////////////////////////////////////
/include/config.inc.asp
<%
atag = "p,br" 'XSS 허용할 태그 리스트
UploadedPath = "/Uploaded_Files/" '업로드 기본 경로
fileext = "jpg,gif,png,pcx" '허용할 확장자 리스트
%>


/include/secure.inc.asp
<%
'공격 위험성이 존재하는 문자들을 필터링
'문자열 입력값을 검증
'숫자형은 데이터 타입을 별도로 체크하도록 한다.
Function sqlFilter(search)
Dim strSearch(5), strReplace(5), cnt, data

'SQL Injection 특수문자 필터링
'필수 필터링 문자 리스트
strSearch(0)="'"
strSearch(1)=""""
strSearch(2)="\"
strSearch(3)=null
strSearch(4)="#"
strSearch(5)="--"
strSearch(6)=";"

'변환될 필터 문자
strReplace(0)="''"
strReplace(1)=""""""
strReplace(2)="\\"
strReplace(3)="\"&null
strReplace(4)="\#"
strReplace(5)="\--"
strReplace(6)="\;"

data = search
For cnt = 0 to 6 '필터링 인덱스를 배열 크기와 맞춰준다.
data = replace(data, LCASE(strSearch(cnt)), strReplace(cnt))
Next

sqlFilter = data
End Function

'XSS 출력 필터 함수
'XSS 필터 함수
'$str - 필터링할 출력값
'$avatag - 허용할 태그 리스트 예) $avatag = "p,br"
Function clearXSS(strString, avatag)
'XSS 필터링
strString = replace(strString, "<", "<")
strString = replace(strString, "\0", "")

'허용할 태그 변환
avatag = replace(avatag, " ", "") '공백 제거
If (avatag <> "") Then
taglist = split(avatag, ",")

for each p in taglist
strString = replace(strString, "<"&p&" ", "<"&p&" ", 1, -1, 1)
strString = replace(strString, "<"&p&">", "<"&p&">", 1, -1, 1)
strString = replace(strString, "</"&p&" ", "</"&p&" ", 1, -1, 1)
next
End If

clearXSS = strString
End Function

'확장자 검사
'$filename: 파일명
'$avaext: 허용할 확장자 예) $avaext = "jpg,gif,pdf"
'리턴값: true-"ok", false-"error"
Function Check_Ext(filename,avaext)
Dim bad_file, FileStartName, FileEndName

If instr(filename, "\0") Then
Response.Write "허용하지 않는 입력값"
Response.End
End If

'업로드 금지 확장자 체크
bad_file = "asp,html,htm,asa,hta"

filename = Replace(filename, " ", "")
filename = Replace(filename, "%", "")

FileStartName = Left(filename,InstrRev(filename,".")-1)
FileEndName = Mid(filename, InstrRev(filename, ".")+1)

bad_file = split(bad_file, ",")

for each p in bad_file
if instr(FileEndName, p)>0 then
Check_Ext = "error"
Exit Function
end if
next

'허용할 확장자 체크
if avaext <> "" Then
ok_file = split(avaext, ",")

for each p in ok_file
if instr(FileEndName, p)>0 then
Check_Ext = "ok"
Exit Function
End If
next
End If

Check_Ext = "error"
End Function

'다운로드 경로 체크 함수
'$dn_dir - 다운로드 디렉토리 경로(path)
'$fname - 다운로드 파일명
'리턴 - true:파운로드 파일 경로, false: "error"
Function Check_Path(dn_dir, fname)
'디렉토리 구분자를 하나로 통일
dn_dir = Replace(dn_dir, "/", "\")
fname = Replace(fname, "/", "\")

strFile = Server.MapPath(dn_dir) & "\" & fname '서버 절대경로

strFname = Mid(fname,InstrRev(fname,"\")+1) '파일 이름 추출, ..\ 등의 하위 경로 탐색은 제거 됨
Response.Write strFname

strFPath = Server.MapPath(dn_dir) & "\" & strFname '웹서버의 파일 다운로드 절대 경로

If strFPath = strFile Then
Check_Path = strFile '정상일 경우 파일 경로 리턴
Else
Check_Path = "error"
End If
End Function

'IP 체크 함수
Function Check_IP(IP_Addr)
If Request.Servervariables("REMOTE_ADDR") = IP_Addr Then
Check_IP = "TRUE"
Else
Check_IP = "FALSE"
End If
End Function
%>



/head.asp
<%
'페이지에서 에러가 발생하여도 페이지 오류를 외부로 출력하지 않기위해 사용
On Error Resume Next
'On Error GoTo 0도 가능하나 2003에서는 실행되지 않음
if err.number <> 0 then
'Response.Write err.description & "<BR>" & err.source & "<BR>"
err.clear
End if
%>


/content.asp
<!--#include virtual="/include/connection.inc.asp"--> <% 'DB연결 헤더 %>
<!--#include virtual="/include/secure.inc.asp"--> <% '보안관련라이브러리 %>
<!--#include virtual="/include/config.inc.asp"--> <% '전역변수리스트 %>
<!--#include virtual="/head.asp"--> <% '초기 설정 페이지(에러 메세지 미출력) %>
<%
Dim strSQL
Dim intSeq, strName, strEmail, strSubject, strContent, intCount, dtmReg_Date, intExist
Dim blnTag, strUserIP
Dim atag

'입력값이 숫자형인 경우 IsNumeric 함수를 사용한다.
If IsNumeric(seq) Then
intSeq = Request.QueryString("seq")
Else
Response.Write "허용하지 않는 입력값입니다."
Reponse.End
End If

'문자(열)인 경우 sqlfilter 사용
'intSeq = sqlFilter(Request.QueryString("seq")) 'SQL Injection 필터링

'읽은 횟수 검색
strSQL = "SELECT count(*) FROM board WHERE intSeq='" & intSeq & "'"

objRs.Open strSQL, objDBConn

intExist = objRs(0)
objRs.Close

If intExist <> 1 Then
Response.Write "해당글이 없습니다."
Else
'읽은 횟수 증가
strSQL = "UPDATE board SET intCount=intCount+1 WHERE intSeq='" & intSeq & "'"
objRs.Open strSQL, objDBConn

'게시물 SELECTZ
strSQL = "SELECT strName,strEmail,strSubject,strContent,intCount,strUserIP,blnTag,dtmReg_Date FROM board WHERE intSeq='" & intSeq & "'"
objRs.Open strSQL, objDBConn

strName = objRs(0)
strEmail = objRs(1)
strSubject = objRs(2)
strContent = objRs(3)
intCount = objRs(4)
strUserIP = objRs(5)
blnTag = objRs(6)
dtmReg_Date = objRs(7)

objRs.Close
Set objRs = Nothing

objDBConn.Close
Set objDBConn = Nothing

'게시물 출력값에 XSS 필터링
'사용자가 입력하는 출력되는 값은 strName, strEmail, strSubject, strContent으로 이 부분은 XSS 공격이 가능한 부분들이다.
'일반적으로 본문만 선택적으로 HTML 태그 사용을 허용하며 나머지 부분들은 사용할 수 없도록 하는것이 바람직하다.
strName = clearXSS(strName, atag)
strEmail = clearXSS(strEmail, atag)
strSubject = clearXSS(strSubject, atag)
strContent = clearXSS(strContent, atag)

'줄넘김 처리
strContent = replace(strContent, vbLf, vbLf & "<br>")
%>
<html>

<head>
<meta http-equiv="Content-Type" content="text/html; charset=ks_c_5601-1987">
<title>내용보기</title>
</head>

<body>
<div align=center>
<table border=1>
<tr>
<td>이름</td>
<td><%=strName%></td>
<td>등록일</td>
<td><%=dtmReg_Date%></td>
</tr>
<tr>
<td>이메일</td>
<td><%=strEmail%></td>
<td>조회</td>
<td><%=intCount%></td>
</tr>
<tr>
<td>제목</td>
<td colspan=3><%=strSubject%></td>
</tr>
<tr>
<td>내용</td>
<td colspan=3><%=strContent%></td>
</tr>
<tr>
<td colspan=4>
<a href="list.asp">목록으로</a> <a href="edit.asp?seq=<%=intSeq%>">수정하기</a> <a href="delete.asp?seq=<%=intSeq%>">삭제하기</a>
</td>
</tr>
</table>

</div>
</body>
</html>
<%
End If
%>



'////////////////////////////////////////////////////////////////////
'//다. SQL 구문 삽입 가능성
'////////////////////////////////////////////////////////////////////
SQL Injection은 쿼리문의 잘못 해석함에서 발생하는 문제이다. 이를 해결하기 위해서는 쿼리문을 생성시에 입력된 값에 대한 유효성 검사를 수행하면 된다. ‘, “ 문자를 \’, \”로 변경해 주거나 아예 공백으로 처리하는 방법이다.

삭제해야 할 프로시저
xp_cmdshell
xp_stratmail
xp_sendmail
xp_grantlogin
xp_makewebtask


'////////////////////////////////////////////////////////////////////
'//사. 다운로드 취약성
'////////////////////////////////////////////////////////////////////
<!--#include virtual="/include/connection.inc.asp"--> <% 'DB연결 헤더 %>
<!--#include virtual="/include/secure.inc.asp"--> <% '보안관련라이브러리 %>
<!--#include virtual="/include/config.inc.asp"--> <% '전역변수리스트 %>
<!--#include virtual="/head.asp"--> <% '초기 설정 페이지(에러 메세지 미출력) %>
<%
Dim dn_dir, fname, val_ok
Dim UploadedPath

dn_dir = Request("dir")
fname = Request("fname") '파일 이름

' IE 5.01에서는 이 방식을 사용할때 메모리 관련 문제가 발생할 수 있다.
strUA = Request.ServerVariables("HTTP_USER_AGENT")
If Instr(strUA, "MSIE") Then
intVersion = CDbl(mid(strUA, Instr(strUA, "MSIE")+5, 3))

If intVersion < 5.01 Then
Response.Write "error"
End If
End If

if fname = "" Then
Response.Write "<script language=javascript>"
Response.Write "alert(""파일명을 입력해 주세요"");"
Response.Write "history.back();"
Response.Write "</script>"
End If

dn_dir = UploadedPath & dn_dir
val_ok = Check_Path(dn_dir, fname)

If val_ok <> "error" Then '사용자가 다운 받는 파일과 웹서버의 파일 다운로드 경로가 맞는지 비교
Set objStream = Server.CreateObject("ADODB.Stream") 'Stream 이용

Response.ContentType = "application/unknown" 'ContentType 선언
Response.AddHeader "Content-Disposition","attachment; filename=" & fname

objStream.Open
objStream.Type = 1
objStream.LoadFromFile val_ok

download = objStream.Read
Response.BinaryWrite download
End If

Set objstream = nothing '객체 초기화
%>
2011/09/13 20:49 2011/09/13 20:49
strFileRealName = Server.URLPathEncode(strFileRealName)
2011/09/13 20:46 2011/09/13 20:46

출처 : http://webarty.com



Local_Folder = "e:\itnews_Web\itstvadm\broadcast\etimesn\"
File_Name = FilePrefix & "etimes_"&gubun&"_"&edit_date&".txt"
Local_File = Local_Folder & File_Name

Set objFTP = Server.CreateObject("NIBLACK.ASPFTP")
objFTP.sServerName = "ip address"
objFTP.sUserID = "id"
objFTP.sPassword = "passl"

If objFTP.bConnect Then
objFTP.lTransferType = 2
Remote_File = "/itstv/" & File_Name
If objFTP.bPutFile(Local_File, Remote_File) Then
file_put = "OK"
Else
file_put = "ERROR"
msg = "자료는 저장되었으나 미디어서버측으로 파일 전송에 오류가 발생하였습니다."
End If
End If
Set objFTP = Nothing

2011/09/13 20:46 2011/09/13 20:46
[함수] [asp] utf-8에서 urldecode 하기

지금까지 개발 환경이 euc-kr이 대세라 urldecode 함수를 찾아 봐도 전부 euc-kr 기반이다.
utf-8에 해당하는 게 없는지 뒤졌더니 중국 사이트가 있더라.
주석이 한자로 적혀 있는 특이한 경험 ㅋㅋ

출처 : http://www.cftea.com/c/2009/10/OOXX97QIONHANAF9.asp

Function UrlDecode_GBToUtf8(ByVal str)
    Dim B,ub    ''中文字的Unicode码(2字节)
    Dim UtfB    ''Utf-8单个字节
    Dim UtfB1, UtfB2, UtfB3 ''Utf-8码的三个字节
    Dim i, n, s
    n=0
    ub=0
    For i = 1 To Len(str)
        B=Mid(str, i, 1)
        Select Case B
            Case "+"
                s=s & " "
            Case "%"
                ub=Mid(str, i + 1, 2)
                UtfB = CInt("&H" & ub)
                If UtfB<128 Then
                    i=i+2
                    s=s & ChrW(UtfB)
                Else
                    UtfB1=(UtfB And &H0F) * &H1000    ''取第1个Utf-8字节的二进制后4位
                    UtfB2=(CInt("&H" & Mid(str, i + 4, 2)) And &H3F) * &H40        ''取第2个Utf-8字节的二进制后6位
                    UtfB3=CInt("&H" & Mid(str, i + 7, 2)) And &H3F        ''取第3个Utf-8字节的二进制后6位
                    s=s & ChrW(UtfB1 Or UtfB2 Or UtfB3)
                    i=i+8
                End If
            Case Else    ''Ascii码
                s=s & B
        End Select
    Next
    UrlDecode_GBToUtf8 = s
End Function

2011/03/06 10:11 2011/03/06 10:11
[ASP] 캐시(Cache) 제거 http://upper.tistory.com/40
Response.Expires = 0
Response.ExpiresAbsolute = now() - 1
Response.AddHeader "pragma","no-cache"
Response.AddHeader "cache-control","private"
Response.CacheControl = "no-cache"

IIS 해당 웹서비스 등록정보 -> HTTP헤더 메뉴 상단 ->
[컨텐츠만료지정]체크 -> [즉시만료] 선택

성능 및 스타일 향상에 도움이 되는 28가지 ASP 팁  http://www.microsoft.com/korea/technet/IIS/Tips/asptips17_29.mspx

CursorType 및 상수  http://www.nextstep.co.kr/?page=82

ASP/검색API - UTF-8 인코딩 및 이미지 깨짐 문제 

http://www.saystone.com/tc/entry/ASP%B0%CB%BB%F6API-UTF-8-%C0%CE%C4%DA%B5%F9-%B9%D7-%C0%CC%B9%CC%C1%F6-%B1%FA%C1%FC-%B9%AE%C1%A6

2011/01/27 01:13 2011/01/27 01:13

간략한 설명

Script Encoder는 사용하기 쉬운 명령줄 도구입니다. Script Encoder를 사용하면
스크립트 디자이너가 자신의 최종 스크립트를 인코딩할 수 있어서 웹 호스트나 웹 클라이언트가 원본을 보거나 수정할 수 없게 됩니다. 그러나 이렇게
인코딩하면 사용자의 코드를 쉽게 볼 수만 없을 뿐, 전문 해커들이 사용자가 어떻게 스크립트를 작성했는지 보는 것을 막지는 못합니다.

개요


Script Encoder는 사용하기 쉬운
명령줄 도구입니다. Script Encoder를 사용하면 스크립트 디자이너가 자신의 최종 스크립트를 인코딩할 수 있어서 웹 호스트나 웹
클라이언트가 원본을 보거나 수정할 수 없게 됩니다. 그러나 이렇게 인코딩하면 사용자의 코드를 쉽게 볼 수만 없을 뿐, 전문 해커들이 사용자가
어떻게 스크립트를 작성했는지 보는 것을 막지는 못합니다.
2010/11/06 06:04 2010/11/06 06:04

구글 지메일 (Gmail)의 smtp 서버를 이용하면 외부에서도 공짜로 메일 발송 서버를 구축할 수 있습니다.
CDO(Collaboration Data Objects)를 이용한 asp 구현 소스를 어디서 참고해서 지메일 smtp에 적용해보았습니다.

지메일의 smtp 서버는 smtp.gmail.com, 포트는 465 입니다.
테스트해보니 잘되네요. 다른 언어로 구현하더라도 어려울 건 없겠죠? ^-^

<%
Function GoogleSendMail(strTo, strFrom, strSubject, strBody)
On Error Resume Next

Set iMsg = CreateObject("CDO.Message")
Set iConf = CreateObject("CDO.Configuration")
Set Flds = iConf.Fields

schema = "http://schemas.microsoft.com/cdo/configuration/"
Flds.Item(schema & "sendusing") = 2
Flds.Item(schema & "smtpaccountname") = "홍길동 <홍길동@gmail.com>"
Flds.Item(schema & "sendemailaddress") = "홍길동 <홍길동@gmail.com>"
Flds.Item(schema & "smtpuserreplyemailaddress") = "홍길동 <홍길동@gmail.com>"
Flds.Item(schema & "smtpserver") = "smtp.gmail.com"
Flds.Item(schema & "smtpserverport") = 465
Flds.Item(schema & "smtpauthenticate") = 1
Flds.Item(schema & "sendusername") = "홍길동@gmail.com"
Flds.Item(schema & "sendpassword") = "메일암호"
Flds.Item(schema & "smtpusessl") = 1
Flds.Update

Set Flds = Nothing
Set iMsg =  Server.CreateObject("CDO.Message")
With iMsg
  .Configuration = iConf
  .To       = strTo                 ' 받는넘
  .From     = strFrom            ' 보내는넘
  .Subject  = strSubject         ' 제목     
  .HTMLBody = strBody        ' 내용
  SendEmailGmail = .Send
End With

set iMsg = nothing
set iConf = nothing
set Flds = nothing

If Err.number <> 0 Then
  GoogleSendMail = Err.Description
Else
  GoogleSendMail = 0
End If

End Function
%>

<%
  ' 사용예
  Ret = GoogleSendMail("받은사람 이메일", "홍길동 <홍길동@gmail.com>", "제목이구", "내용이얌") 
%>

2010/10/12 22:47 2010/10/12 22:47

ASP 암호화 하기

function form_submit() {

  var letters = 'ghijklabvwxyzABCDEFef)_+|<>?:mnQRSTU~!@#$%^VWXYZ`1234567opGHIJKLu./;'+"'"+'[]MNOP890-='+'\\'+'&*("{},cdqrst'+"\n";
  var split = letters.split("");
  var num = '';
  var encrypted = '';
 
<%
  if f_jumin = 1 then
%>

  encrypted = '';
  var it = document.ps_user.jumin2.value;
  var c = '';
  var b = '0';
  var chars = it.split("");
  while(b<it.length)
  {c = '0';while(c<letters.length)
  {if(split[c] == chars[b])
  {if(c == "0") { c = ""; }
  if(eval(c+10) >= letters.length){
  num = eval(10-(letters.length-c));
  encrypted += split[num];}
  else{num = eval(c+10);encrypted += split[num];}
  }
  c++;}
  b++;}

  document.ps_user.jumin2.value = encrypted;encrypted = ''; 

<%
  end if
%>

  encrypted = '';
  var c1 = '';
  var it1 = document.ps_user.pin.value;
  var b1 = '0';
  var chars1 = it1.split("");
  while(b1<it1.length){c1 = '0';
  while(c1<letters.length){if(split[c1] == chars1[b1]){if(c1 == "0") { c1 = ""; }if(eval(c1+10) >= letters.length){num = eval(10-(letters.length-c1));
  encrypted += split[num];}else{num = eval(c1+10);encrypted += split[num];}}c1++;}b1++;}document.ps_user.pin.value = encrypted;encrypted = '';

  document.ps_user.submit();
}

-------------------------------------------------------------------------------------------------------------------------

  var encrypted = '';
  var it = document.ps.pin.value;
  var b = '0';var chars = it.split("");
  while(b<it.length) {
       c = '0';
       while(c<letters.length)
          {if(split[c] == chars[b])
     {if(c == "0") { c = ""; }
     if(eval(c+10) >= letters.length)
      {num = eval(10-(letters.length-c));
      encrypted += split[num];}else{num = eval(c+10);
      encrypted += split[num];}
      }
      c++;
      }
      b++;
      }document.ps.pin.value = encrypted;encrypted = '';
---------------------------------------------------------------------------------------------------------------------

역변환

<script>
function decode_letters(it){

    var letters = 'ghijklabvwxyzABCDEFef)_+|<>?:mnQRSTU~!@#$%^VWXYZ`1234567opGHIJKLu./;'+"'"+'[]MNOP890-='+'\\'+'&*("{},cdqrst'+"\n";

    var split = letters.split("");
    var num = '';
    var c = '';

    var decrypted = '';

    var b = '0';
    var chars = it.split("");
    while(b<it.length){
        c = '0';
        while(c<letters.length){
            if(split[c] == chars[b]){
                if(c == "0") { c = ""; }
                if(eval(c-10) < 0){
                    num = eval(letters.length+(c-10));
                    decrypted += split[num];
                }else{
                    num = eval(c-10);
                    decrypted += split[num];
                }
            }
            c++;
        }
        b++;
    }
 alert(decrypted);
    return decrypted;

}
</script>

2010/09/29 01:48 2010/09/29 01:48
체크박스의 경우 배열로 받을수 있습니다.

체크한 카운트 = request("checkbox").count

For i = 1 to 체크한 카운트
   받기변수 = request("checkbox")(i)
Next

체크박스 뿐만아니라 모두 가능합니다. type=hidden도 type=text도 가능합니다.
다른방법으로 split 함수를 이용하여도 가능하나 받는값중 콤마가 있다면 다른 값이 들어오겠지요.

주의할것은 체크박스는 체크한것만 값을 받습니다.
type=hidden, type=text 는 체크가 없으니 모두 받겠지요.

체크박스 값에 아이디등 키값을 넣어주면 간단하겠지요.
<input name="checkbox" type="checkbox" value="<%=키값%>">

그런데 값이 많다 이럴때는 어찌할까요

<input name="checkbox" type="checkbox" value="<%=순번%>">
<input name="id_<%=순번%>" type="hiddne" value="<%=ID%>">
<input name="name_<%=순번%>" type="hiddne" value="<%=NAME%>">

이렇게 루프돌려 만들며 받을 때는 아래와 같이 해줍니다.

체크한 카운트 = request("checkbox").count

For i = 1 to 체크한 카운트
   순번 = request("checkbox")(i)
   ID = request("id_" & 순번)
   NAME = request("name_" & 순번)
Next

request("name_" & 순번)과 같이 받을수 있답니다. 모르셨지요??

다른방법
<input name="checkbox" type="checkbox" value="<%=순번%>">
<input name="id" type="hiddne" value="<%=ID%>">
<input name="name" type="hiddne" value="<%=NAME%>">

체크한 카운트 = request("checkbox").count

For i = 1 to 체크한 카운트
   순번 = request("checkbox")(i)
   ID = request("id")(순번)
   NAME = request("name")(순번)
Next

참고로 Javascript 에서는 0번부터 시작하나 ASP로 받을때는 1번부터 시작합니다.
2010/09/02 18:01 2010/09/02 18:01

간단히 말씀 드려보지요.
server.execute와 include는 차이점이 아니라 전혀 다른 얘기입니다.
결과는 같은 결과를 낼수는 있지만 개념이 완전히 다른것이라 차이점이라 말하기 힘듭니다.

include
ASP문서에서 가장먼저 처리하는것이 include 입니다.
프로그램적 처리 이전에 include 된다는 말입니다.
include 하여 하나의 문서를 완성한뒤 프로그램이 실행된다고 생각하면 쉽겠지요.
include 개념을 이해하지 못하는 분들도 꽤 많습니다.

server.execute
해당문서에 권한을 넘겨주어 실행하는 것이라고 볼수 있습니다. 다시 권한을 넘겨 받겠지요.
다시 말하면 해당문서가 독자적으로 실행하여 결과만 넘겨준다고 얘기할수 있습니다.
독자적 실행이기 때문에 실행되는 문서에서 넘어오는 값을 다 받아서 처리해야 합니다.
또한 필요한 모듈등 include 해줘야겠지요.

뭘쓰는게 효율적이냐의 정답은 없습니다. 다른 개념이기 때문이지요.

피해야 할것이 있다면
If 조건 Then
- include
Else
- include
End If

이런형태는 피해야 합니다. 이유는 실행 이전 include 된다는 점입니다.
간혹 관리를 쉽게하겠다고 페이지명을 받아 조건에 맞는 페이지를 include 시키는 분도 있습니다.
전체사이트를 include 하였다고 볼수 있겠지요. 무식한놈이라고 욕먹기 딱이겠지요.

위에 조건에 따른 include의 대체방법으로 server.execute를 쓸수는 있습니다.
server.execute는 조건에 따라 실행을해도 하나만 실행되는 점이 장점이 될수 있겠습니다.
허나 위에서 얘기했듯 독립적실행이기 때문에 실행되는 문서에서 값을 다시 받아주는것과 필요모듈 include
해주는것 잊지 말아야겠지요.

2010/09/02 18:01 2010/09/02 18:01
ASP용 로그 기록 클래스

많은 개발자들이 개발을 하면서 중간 중간 소스에 Response.Write 변수 를 추가 합니다.

이유는 디버깅 용이죠! ^^

하지만, 개발 완료 후 삭제도 해야 하고 혹여나 깜빡하고서 누락하는 경우가 있는데요.

누락한 것 중 지저분 해지기만 하고 문제가 되진 않지만 어떤 사람들은 dB 커넥션 문자열을 찍어서

노출이 되는 경우도 있기도 합니다. ㅎㅎㅎ

공개 소스 중에는 Log4J라는 모듈이 있습니다만, 이건 JSP, Ruby, .Net 용으로만 있고 ASP용은 없지요.

그래서 아쉬운 대로 만들어 봤습니다.

제가 생각했을 때 이 클래스를 사용하므로서 얻을 수 있는 이득을 나열해 보죠.


1. 운영 중에도 에러나 기타 정보를 기록하여 디버깅 및 유지보수에 용의합니다.
2. 실수로 중요 정보가 외부에 노출되는 것을 방지합니다. (예: Response.Write에 의해)
3. 확장 함수를 이용하여 받아들인 파라미터 등을 기록하는 것이 가능합니다.
4. 로그 레벨을 이용 하여 기록 기준을 정의 할 수 있으므로 성능이 나빠지는 것에 대응 할 수 있습니다.
5. 파일에 기록이 되므로 언제든 역 추적이 가능합니다. ( 1번과 비슷 한 내용이네요 ^^ )

다음은 사용 예입니다.

<!--#include virtual="ClsLogger.asp"//-->
<%On Error Resume Next%>
<%
'// Logger
Dim oLog : Set oLog = New ClsLogger

'// Request Log
TraceRequestParameter oLog

'//      FATAL : 치명적 에러
oLog.Fetal "치명적 에러!!! 관리자 빨리 보삼. : " & Err.Description

'//      ERROR : 수행 가능한 정도의 에러
oLog.Error "또 에러냐!!! : " & Err.Description

'//      WARN : 문제를 일으킬 가능성의 정보
oLog.Warn "이건 귀찮아서 처릴 안했단 말이오!!! : "

'//      INFO : 정보를 나타낼 때 사용
oLog.Info "게시판 목록 시작"

'//      DEBUG : 상세 정보를 나타낼 때 사용
oLog.Debug "지금은 개발 중..."

If ( Err.Number = 0 ) Then
   oLog.Debug "완료"
Else
   oLog.Error Err.Description
End If


'------------------------------------------------------------------------------------
'// Request 객체의 파라미터 값을 로그에 기록한다.
'// 이 함수는 ClsLogger에 포함 시킬지 말지 고민중 ... ㅠㅠ
'------------------------------------------------------------------------------------
Sub TraceRequestParameter(ByRef pLog)

   On Error Resume Next

   Dim pContentType : pContentType = LTrim(Request.ServerVariables("CONTENT_TYPE"))

   If ( InStr(pContentType, "multipart/form-data") > 0 ) Then
      Exit Sub
   End If

   If ( Not IsObject(pLog) ) Then
      Exit Sub
   End If

   Dim z
   Dim pKeyName
   pLog.Debug "============= FORM PARAMETER ============="
   For z = 1 To Request.Form.Count
      pKeyName = Request.Form.Key(z)
      pLog.Debug "Dim " & pKeyName & " : " & pKeyName & " = RequestForm(""" &
pKeyName & """)"
   Next

   For z = 1 To Request.Form.Count
      pLog.Debug Request.Form.Key(z) & " : " & Request.Form(z)
   Next

   pLog.Debug "========== QUERYSTRING PARAMETER ========="
   For z = 1 To Request.QueryString.Count
      pKeyName = Request.QueryString.Key(z)
      pLog.Debug "Dim " & pKeyName & " : " & pKeyName & " = RequestQuery(""" &
pKeyName & """)"
   Next

   For z = 1 To Request.QueryString.Count
      pLog.Debug Request.QueryString.Key(z) & " : " & Request.QueryString(z)
   Next  
   pLog.Debug "=========================================="

   Err.Clear

   On Error GoTo 0

End Sub
%>

저의 경우 주로 .Error와 .Debug를 사용합니다.

일단 속는 셈 치고 한번 사용해보셔요. ^^

많은 분들이 자기가 원하던 거라고 하시더군요. 다행 다행.

아 그리고 로그뷰어는 "mtail" 이라는 프로그램을 이용합니다. 네이년에서 mtail로 검색을 하시면 쉽게 구 할 수 있어요.

간단하게 소개하면
   기록되는 로그를 실시간으로 모니터링 할 수 있고,
   필터링도 가능합니다. 이 필터링을 이용하면 Error만 볼수도 있고 Debug만 볼수도 있습니다.

유용한 프로그램이에요 ^^
 
그럼 사용해보시고 부족한 부분은 리플 달아주세요~
2010/03/22 03:45 2010/03/22 03:45
날쿼리 방식의 SQL 좀 쉽게 짜기위해 만들어본 DataBase Class 입니다.

태요사이트에서 몇개 클래스 긁어다가 만들때 좀 썼습니다.

간략하게 예를 들면
sql = "select seq,name from tb_board where seq = 1" 를 클래스를 써서 표현하자면..

db.initSQL("select")
db.setTable("tb_board")
db.setColumn("seq")
db.setColumn("name")
db.setWhere "seq", 1, "number"
뭐 이런식으로 씁니다.

살짝만 생각하면, 어지간한 쿼리는 아주 간단하고 깔끔하게 처리할 수 있어요



쿼리.sql 에 테이블이 하나 빠져서 방금 다시 올렸어요
2010/03/22 03:41 2010/03/22 03:41
asp 용 썸넬 생성 dll 입니다.

나누미플러스나, KMS썸넬등은 2003 서버에서 뻗어버리는 경우가 많아서..
코드프로젝트에 올려진 소스에서 쓰잘데기 없는부분 빼버리고,
썸넬만 만드는 부분 함수로 만들어놨습니다. (sub 함수로 전환시켜서 쓰는게 더 편할듯 하네요)

참고로.. 덱스트든 abc든 일단 업로드 끝나고, 저장한 원본 파일명 던져주면 됩니다.

DLL 은 가장 최근꺼구요..
원 개발자가 만든 소스나 메서드 종류 보시려면.. 다운 받아서 살펴보심 되요.. (물론 C++ 소스일껍니다)
2010/03/22 03:39 2010/03/22 03:39
일단 8개의 컬럼에서 검색한다고 하고 검색이 있다는 가정하에..


Dim search(7), kk(7), j, i
  search(0) = "uid"
  search(1) = "customer"
  search(2) = "prodname"
  search(3) = "spec"
  search(4) = "price"
  search(5) = "make"
  search(6) = "info"
  search(7) = "regdate"

   For i = 0 To 7
           If request(search(i)) = "" Then '검색이 있는 컬럼만 체크
        kk(i) = "no"
           Else
        kk(i) = "yes"
          End If
   Next

   j = 0
   For i = 0 To 7
        If kk(i) = "yes" Then
        j = j+1
                 If j = 1 Then
                    search_sql = " where "&search(i)&" like '%"&request(search(i))&"%'"
                 Else
                    search_sql = search_sql & " and "&search(i)&" like '%"&request(search(i))&"%'"
                 End If
        End If
   Next              
2010/03/01 02:24 2010/03/01 02:24

정해준 경로의 소스를 출력하는 함수를 간단하게 만들어보았습니다.

당연한 말이겠지만 같은 사이트 내의 소스만 출력이 됩니다.


<%
function show_source(url)
    Set oFSO = Server.CreateObject("Scripting.FileSystemObject")
 
    strFilepath = Server.Mappath(url)
    Set oFile = oFSO.OpenTextFile(strFilepath, 1)
 
    strText = oFile.ReadAll

    Set oFile = nothing
    Set oFSO = nothing

    strText = Replace(strText, "&", "&amp;")
    strText = Replace(strText, "<", "&lt;")
    strText = Replace(strText, " ", "&nbsp;")
    strText = Replace(strText, vbTab, "&nbsp;&nbsp;&nbsp;&nbsp;")
    strText = Replace(strText, vbCrLf, "<br>")
 
    show_source = strText
end function
%>

<code>
<%=show_source("show_source.asp")%>
</code>

Replace 부분에서 매번 strText 변수에 재할당하지 않고 한줄로 한번에 변환하는 것이 실행 효율이 조금 더 낫지만, 저렇게 Replace 항목이 많은 경우에는 여러줄로 나누어 보기 좋게 해주는 것이 수정을 편하게 하여 유지보수 생산성이 높아집니다.


<code> 태그는 코드를 화면에 출력할때 사용하는 <xmp> 태그와 유사한 동작을 합니다.

함수내에서 화면 출력에 필요한 작업을 이미 대부분 해놓은 상태이므로 코드 출력용 태그는 사실상 불필요합니다. 위의 경우는 단순히 보기 좋으라고 <code> 태그를 붙여놓은 것이므로 제거하셔도 무방합니다.


참고로 <code> 태그 위치에 <xmp> 태그를 대신 사용하면 사소한 문제가 하나 생기니 주의하시길 바랍니다.


============================================================================================================================

늦어지만 저도 답변달아 봅니다.

아래와 같이 보여지게 만들어 줍니다.


<%

Sub viewCode(codefile)
response.write "<p style=""background-color=#eeeeee;"">"
set fso = server.createobject("scripting.filesystemobject")
set f = fso.opentextfile(server.mappath(codefile),1)
allViewCode = viewHTML(f.readall)
set f = nothing
response.write codingcolor(allviewcode,"brown")
response.write "</p>"
End Sub

'Coding부분을  찾아서  Coloring함수로...
function  CodingColor(strTemp,strFontColor)
          Dim  firstPos
          Dim  lastPos
          Dim  leftString
          Dim  midString
          Dim  rightString
          Dim  xmidString

          firstPos  =1
          lastPos  =  1
          do  until  lastPos  >=  len(strTemp)
                    firstPos  =  instr(lastPos,  strTemp,  "&lt;%")
                    if  firstPos  <=  0  then
                              exit  do
                    end  if
                    lastPos  =  instr(firstPos,  strTemp,  "%&gt;")
                    if  lastPos  <=  0  then
                              lastPos  =  len(strTemp)
                    end  if
                    lastPos  =  lastPos  +  len("%&gt;")  -  1
                    leftString  =  left(strTemp,firstPos-1)
                    midString  =  mid(strTemp,firstPos,lastPos-firstPos+1)
                    rightString  =  mid(strTemp,lastPos+1,len(strTemp)-lastPos)
                    xmidString  =  coloring(midString)
'                    strTemp  =  leftString  &  xmidString  &  rightString
'                    lastPos  =  firstPos  +  len(xmidString)-1
                    strTemp  =  leftString  &  "<span  style=color:"  &  strFontColor  &  ";>"  &  xmidString  &  "</span>"  &  rightString
                    lastPos  =  firstPos  +  len("<span  style=color:"  &  strFontColor  &  ";>"  &  xmidString  &  "</span>")-1
          loop

          CodingColor  =  strTemp
end  function

function  coloring(strViewCode)
          Dim  Reservedwords
          Dim  aryReservedword
          Dim  i
          Dim  strFunction
          Dim  aryFunction

          Reservedwords="And|Call|Case|Const|Dim|Do|Each|Else|ElseIf|Empty|End|Eqv|Erase|Error|Exit|Explicit|False|For|Function|If|Imp|In|Is|Loop|Mod|Next|Not|Nothing|Null|On|Option|Or|Private|Public|Randomize|ReDim|Resume|Select|Set|Step|Sub|Then|To|True|Until|Wend|While|Xor"
          aryReservedword=split(Reservedwords,"|")
          for  i  =  0  to  ubound(aryReservedword)
                    strViewCode  =  wordReplace(strViewCode,aryReservedword(i),"blue")
          next
         
          strFunction="Anchor|Array|Asc|Atn|CBool|CByte|CCur|CDate|CDbl|Chr|CInt|CLng|Cos|CreateObject|CSng|CStr|Date|DateAdd|DateDiff|DatePart|DateSerial|DateValue|Day|Dictionary|Document|Element|Err|Exp|FileSystemObject|Filter|Fix|Int|Form|FormatCurrency|FormatDateTime|FormatNumber|FormatPercent|GetObject|Hex|History|Hour|InputBox|InStr|InstrRev|IsArray|IsDate|IsEmpty|IsNull|IsNumeric|IsObject|Join|LBound|LCase|Left|Len|Link|LoadPicture|Location|Log|LTrim|RTrim|Trim|Mid|Minute|Month|MonthName|MsgBox|Navigator|Now|Oct|Replace|Right|Rnd|Round|ScriptEngine|ScriptEngineBuildVersion|ScriptEngineMajorVersion|ScriptEngineMinorVersion|Second|Sgn|Sin|Space|Split|Sqr|StrComp|String|StrReverse|Tan|Time|TextStream|TimeSerial|TimeValue|TypeName|UBound|UCase|VarType|Weekday|WeekDayName|Window|Year"
          aryFunction=split(strFunction,"|")
          for  i  =  0  to  ubound(aryFunction)
                    strViewCode  =  wordReplace(strViewCode,aryFunction(i),"red")
          next
          strviewcode  =  blockcomment(strviewcode,"""""magenta")
          strviewcode  =  linecomment(strviewcode,"'""green")
          coloring  =  linecomment(strviewcode,"Rem""green")
end  function

'HTML  보기에서  단어에  색상입히기
Function  wordReplace(strSearchWithin,strSearchFor,fontcolor)
          Dim  lngStartingPosition
          Dim  lngFoundPosition
          Dim  strReplaced
          Dim  ascBlank
        lngStartingPosition=1
        lngFoundPosition=InStr(lngStartingPosition,strSearchWithin,strSearchFor,1)
        do  while  lngFoundPosition  >  0
                    ascBlank=asc(Mid(strSearchWithin,lngFoundPosition-1,1))
                    if  (ascBlank>=48  and  ascBlank<=57)  or  (ascBlank>=65  and  ascBlank<=90)  or  (ascBlank>=97  and  ascBlank<=122)  then
                                        strReplaced=strReplaced  &  Mid(strSearchWithin,lngStartingPosition,lngFoundPosition-lngStartingPosition)  &  mid(strSearchWithin,lngFoundPosition,len(strSearchFor))
                    else
                              ascBlank=asc(Mid(strSearchWithin,lngFoundPosition+len(strSearchFor),1))
                              if  (ascBlank>=48  and  ascBlank<=57)  or  (ascBlank>=65  and  ascBlank<=90)  or  (ascBlank>=97  and  ascBlank<=122)  then
                                        strReplaced=strReplaced  &  Mid(strSearchWithin,lngStartingPosition,lngFoundPosition-lngStartingPosition)  &  mid(strSearchWithin,lngFoundPosition,len(strSearchFor))
                              else
                                        'found
                                        strReplaced=strReplaced  &  Mid(strSearchWithin,lngStartingPosition,lngFoundPosition-lngStartingPosition)  &  "<font  color="  &  fontcolor  &  ">"  &  mid(strSearchWithin,lngFoundPosition,len(strSearchFor))  &  "</font>"
                              end  if
                    end  if
                lngStartingPosition=lngFoundPosition+len(strSearchFor)
                lngFoundPosition=InStr(lngStartingPosition,strSearchWithin,strSearchFor,1)
        Loop 
        wordReplace=strReplaced  &  Mid(strSearchWithin,lngStartingPosition)  'catch  the  last  one
End  Function

'HTML  보기
function  viewHTML(strHTML)
          viewHTML    =  replace(replace(replace(replace(replace(replace(strHTML,"&","&amp;"),"<","&lt;"),">","&gt;"),"  ","&nbsp;  "),"          ","&nbsp;  &nbsp;  &nbsp;  &nbsp;  &nbsp;  "),vbcrlf,"<br>"  &  vbcrlf)
end  function

'줄단위  주석문  처리
function  linecomment(strTemp,  strCommentChar,  strFontColor)
          Dim  firstPos
          Dim  lastPos
          Dim  leftString
          Dim  midString
          Dim  rightString
          Dim  xmidString

          firstPos  =1
          lastPos  =  1
          do  until  lastPos  >=  len(strTemp)
                    firstPos  =  instr(lastPos,  strTemp,  strCommentChar)
                    if  firstPos  <=  0  then
                              exit  do
                    end  if
                    lastPos  =  instr(firstPos,  strTemp,  "<br>"  &  vbcrlf)  +  5
                    if  lastPos  <=  0  then
                              lastPos  =  len(strTemp)
                    end  if
                    'Single  Quotation  &  "Rem"  String  Exception  ("'",  "Rem")
                    If  not(mid(strTemp,  firstPos-1,  1)=""""  And  mid(strTemp,firstPos  +  Len(strCommentChar),1)="""")    Then
                              leftString  =  left(strTemp,firstPos-1)
                              midString  =  mid(strTemp,firstPos,lastPos-firstPos+1)
                              rightString  =  mid(strTemp,lastPos+1,len(strTemp)-lastPos)
                              xmidString  =  extractColor(midString)
                              strTemp  =  leftString  &  "<font  color="  &  strFontColor  &  ">"  &  xmidString  &  "</font>"  &  rightString
                              lastPos  =  instr(firstPos,  strTemp,  "<br>"  &  vbcrlf)  +  6
                    Else
                              lastPos  =  lastPos  +  1
                    End  If
          loop

          linecomment  =  strTemp
end  function

'블럭단위  주석문  처리
function  blockcomment(strTemp,  strCommentChar,  strFontColor)
          Dim  firstPos
          Dim  lastPos
          Dim  leftString
          Dim  midString
          Dim  rightString
          Dim  xmidString

          firstPos  =1
          lastPos  =  1
          do  until  lastPos  >=  len(strTemp)
                    firstPos  =  instr(lastPos,  strTemp,  strCommentChar)
                    if  firstPos  <=  0  then
                              exit  do
                    end  if
                    lastPos  =  instr(firstPos+len(strCommentChar),  strTemp,  strCommentChar)
                    if  lastPos  <=  0  then
                              lastPos  =  len(strTemp)
                    end  if
                    lastPos  =  lastPos  +  len(strCommentChar)-1
                    leftString  =  left(strTemp,firstPos-1)
                    midString  =  mid(strTemp,firstPos,lastPos-firstPos+1)
                    rightString  =  mid(strTemp,lastPos+1,len(strTemp)-lastPos)
                    xmidString  =  extractColor(midString)
                    strTemp  =  leftString  &  "<font  color="  &  strFontColor  &  ">"  &  xmidString  &  "</font>"  &  rightString
                    lastPos  =  firstPos  +  len("<font  color="  &  strFontColor  &  ">"  &  xmidString  &  "</font>")
          loop

          blockcomment  =  strTemp
end  function

function  extractColor(strColor)
          dim  exfirstPos
          dim  exlastPos
          Dim  xleftString
          Dim  xmidString
          Dim  xrightString

          extractColor  =  strColor
'          exit  function

          exfirstPos  =1
          exlastPos  =  1
          do  until  exlastPos  >=  len(strColor)
                    exfirstPos  =  instr(exlastPos,  strColor,  "<font  color=")
                    if  exfirstPos  <=  0  then
                              exit  do
                    end  if
                    exlastPos  =  instr(exfirstPos  +  11,  strColor,  ">")
                    if  exlastPos  <=  0  then
                              exit  do
                    end  if
                    xleftString  =  left(strColor,exfirstPos-1)
                    xmidString  =  mid(strColor,exfirstPos,exlastPos-exfirstPos+1)
                    xrightString  =  mid(strColor,exlastPos+1,len(strColor)-exlastPos)
                    strColor  =  xleftString  &  xrightString
                    exlastPos  =  exfirstPos-1
                    exfirstPos  =  exlastPos
          loop
          extractColor  =  replace(strColor,"</font>","")
end  function
%>

2010/03/01 02:22 2010/03/01 02:22

2.인코딩 방법은 다음 ms의 url을 참조하십시오.
http://msdn.microsoft.com/library/en-us/script56/html/d8f019c3-5249-4947-a8a2-247e75e3e468.asp
인코더 다운로드
http://www.microsoft.com/downloads/details.aspx?FamilyId=E7877F67-C447-4873-B1B0-21F0626A6329&displaylang=en


3.디코딩 역시 툴을 이용하였습니다.
http://www.virtualconspiracy.com/scrdec.html
예)
C:\>scrdec18.exe newclubt_webp_v1.js decode.html




Window Script Encode




준비물

사용법 : screnc [/?] [/s] [/f] [/xl] [/l ScriptLanguage] [/e DefaultExtension] <source> <destination>

/s - 아무런 메세지를 표시하지 않습니다.
/f  - 결과파일이 존재할경우 없어쓰기를 합니다.
/xl - 다음 확장자를 제외하고 Encode 합니다.


예제 :
screnc /f test.html                
[ test.html 파일을 Encode 하여서 덮어씌웁니다. ]

screnc *.asp c:\myDir          
[ 현재폴더의 모든 ASP 파일을 Encode 해서 c:\myDir 폴더로 복사합니다. ]

screnc -e asp *.* c:\myDir
[ 현재폴더의 확장자가 ASP 인 파일을 Encode 해서 c:\myDir 폴더로 복사합니다. ]

screnc -e asp -xl *.inc *.* c:\myDir
[ 현재폴더의 확장자가 inc 인 파일만 Encode 해서 c:\myDir 폴더로 복사합니다. ]
 


Window Script Decode




준비물

사용법 : Usage: scrdec18 <infile> <outfile> [-cp codepage] [-urldec|-htmldec]   [-verbose] [-dumb]

-cp    :  일본어, 중국어(Simplified, Traditional) , 한국어(완성, 조합) 로 인코딩된경우 해당 언어설정을 하여야 합니다.
           932 - 일본어
           936 - 중국어 (Simplified)
           950 - 중국어 (Traditional)
           949 - 한국어 (완성)
          1361 - 한국어 (조합)

-urldec    : %xx 형식으로 변경을 합니다.
-htmldec : &amp;형식으로 변경을 합니다.
-verbose : 상세한 설명을 표시합니다.


예제 :
scrdec18 test.asp test_decode.asp
[ test.asp 파일을 test_decode.asp 파일로 Decode 합니다. ]
[출처] JS 파일 인코드 및 디코드|작성자 꼬마곰푸

2009/10/13 14:20 2009/10/13 14:20
Asp 에서는 Socket 통신을 할려면 별도의 구성요소(컴포넌트)가 필요 합니다.

여타 웹 스크립트 언어 자체에서 모든 기능을 제공하는 대신 Asp 는 Server.CreateObject 라는 구조를 통해서 무한한 가능성을 열어주는 대신에,.. 직접 만들어야 하다는 단점.,.. 각설하고...

http://tech.dimac.net/ 에서,. Socket 통신이 가능한 간단한 컴포넌트를 배포하고 있습니다. 다운로드 할려면 이메일 쓰고 등록해야 하더군요. 뭐 간단하지만,.. 그래서 SkyDrive 에..



물론 소스코드는 Microsoft 에서 배포하는 것을 참조하였으므로,. readme.txt 에서도 ftp://ftp.microsoft.com/bussys/winsock/winsock2/ 에서도 가능하겠고요. ^^

- 닷넷이라면,.. System.Net 네임스페이스 에서 가능 -

예제 입니다. 간단 합니다.
아래 예제는 후이즈 서버에서 도메인 정보를 받아오는 것입니다.

<%

Set Socket = Server.CreateObject("Socket.TCP")

Socket.host = "whois.internic.net:43"
Socket.timeout = 2000
Socket.Open()
Socket.sendLine( "wssplex.net"&VbCrLf )
Socket.WaitForDisconnect()

Response.write Socket.buffer

Socket.close()
Set Socket = Nothing

%>

소켓을 통해서 보내지는 데이터는 해당 프로토콜 형식에 맞게 전달되어야 겠고, 받아온 데이터 역시 해당 소켓 서버에서 평문이 아닌 특정 형식이라면 추가적인 데이터 조작이 필요할 것이고요...^^

사용은,. 해당 dll 을 regsvr32 를 통해서 레지스트리 클래스 항목에 등록을 하고,. 혹시 웹에서 객체 생성시 권한 오류가 발생 한다면 웹사이트 익명 계정에 적절한 권한을 설정해 주면 됩니다.


해당 컴포넌트를 들여다 보면,. 구현된 Public 메소드와 속성은 위와 같습니다.

출처 : http://www.wssplex.net/TipnTech.aspx?Seq=486
2009/08/25 14:07 2009/08/25 14:07
<%
With Dbcon
.CommandTimeout = 0
End With
Server.ScriptTimeOut = 3600*10*10
'Set fs = Server.CreateObject("Scripting.FileSystemObject")
'Set folders = fs.GetFolder("d:폴더명uploadfilesbank")
'Set folder_files = folders.Files

'For Each f in folder_files
's = s & f.name
' s = s &   "<BR>"
'Set objFile = fs.OpenTextFile("d:폴더명uploadfilesbank"&f.name,1)
'Do While objFile.AtEndOfStream <> True
'   Response.write objFile.readLine & "<br>"
'loop
' 이런 방법도 같은 결과를 출력한다.(ReadAll 사용)
'content = objFile.readall
'str = replace(content,chr(13)&chr(10),"<br>")
'str = replace(str,"'","''")
'Response.write str


'strSQL="update bbs_data set bbs_content='"& str &"' , bbs_html='' where  bbs_htmlfile='"&f.name&"' and bbs_code='14' and bbs_html ='1'"
'strSQL="insert into  filefile (test_data) values ('"&str&"')
'response.write strSQL
'DBCon.Execute(strSQL)
'Set objFile=Nothing


'Next
'response.write "파일갯수 : " & folders.Files.count & "<BR>"


'folder Creating...
'Function CreateFolder(NewFolder As String)
'Dim fso, f, templen, Temp, tempDel
'Set fso = CreateObject("Scripting.FileSystemObject")
'Set f = fso.CreateFolder(NewFolder)
'CreateFolder = f.Path
'End Function


'============================================================================================================

If true Then
 strSQL="select top 1 * From E_BBS_CONT where  APPEND_FILE_NM2 is not null and use_yn='Y' "
 'strSQL=strSQL&" APPEND_FILE_NM2 is not null or "
 'strSQL=strSQL&" APPEND_FILE_NM3 is not null ) "
 response.write strSQL
'APPEND_FILE_NM1
'APPEND_FILE_REG_NM1
'APPEND_FILE_NM2
'APPEND_FILE_REG_NM2
'APPEND_FILE_NM3
'APPEND_FILE_REG_NM3
'APPEND_FILE_NM4
'APPEND_FILE_REG_NM4


 Set rs = DBCon.Execute(strSQL)
 If Not rs.eof Then
  i=1
  Set fso = CreateObject("Scripting.FileSystemObject")
 
   
    bbs_cd  =rs("bbs_cd")
    data_no  =rs("data_no")
    newf=bbs_cd & "0" & data_no
    'APPEND_FILE_NM1=rs("APPEND_FILE_NM1")   
    'APPEND_FILE_REG_NM1=rs("APPEND_FILE_REG_NM1")
    APPEND_FILE_NM2=rs("APPEND_FILE_NM2")
    APPEND_FILE_REG_NM2=rs("APPEND_FILE_REG_NM2")
    'APPEND_FILE_NM3=rs("APPEND_FILE_NM3")
    'APPEND_FILE_REG_NM3=rs("APPEND_FILE_REG_NM3")
    'APPEND_FILE_NM4=rs("APPEND_FILE_NM4")
    'APPEND_FILE_REG_NM4=rs("APPEND_FILE_REG_NM4")   
   
    '== 새로운 파일명 함수사용=============================
    'new_bbs_htmlfile1=fn_Change(APPEND_FILE_NM1,newf,"01")
    new_bbs_htmlfile2=fn_Change(APPEND_FILE_NM2,newf,"02")
    'new_bbs_htmlfile1=fn_Change(APPEND_FILE_NM3,newf,"03")
    '== 새로운 파일명 함수사용=============================
   
    'response.write APPEND_FILE_NM1 & " ///// 총 ===" & i &"건<br>"
   
     if fso.FileExists("d:폴더명uploadfiles"&APPEND_FILE_NM2) Then
    
     Else
      response.write APPEND_FILE_NM2 & " ///// 총 ===" & i &"건<br>"
     End if
    'Call CopyFile("기본파일경로및파일명", "복사할경로및파일명")
    Call CopyFile("d:폴더명uploadfiles"&APPEND_FILE_NM2, "d:폴더명intr_file"&new_bbs_htmlfile2)
   
    '== 기존 파일명을 새로운 파일명으로 변경함 ==================
    strSQL="update E_BBS_CONT set use_yn='N' where bbs_cd='" & bbs_cd & "' and data_no='" & data_no & "'"
    'response.write strSQL
    DBCon.Execute(strSQL)

    strSQL="update E_BBS_CONT set APPEND_FILE_REG_NM2='"&new_bbs_htmlfile2&"' where bbs_cd='" & bbs_cd & "' and data_no='" & data_no & "'"
    'response.write strSQL
    DBCon.Execute(strSQL)
   
    i=i+1   
  Set fso=Nothing
 End If
End If

Function fn_Change(wefile,new1,idx)
 arrFname="": lenFname="": endFname=""

 arrFname=Split(wefile,".")     '== 파일명분리
 lenFname=ubound(arrFname)   '== 파일길이
 endFname=arrFname(lenFname)  '== 확장자
 fn_Change=new1 & idx & "." &endFname
End Function

'file Copying...
Sub CopyFile(source, destination)
Dim fso, f
Set fso = CreateObject("Scripting.FileSystemObject")
Set f = fso.GetFile(source)
f.Copy destination
End Sub

%>
<SCRIPT LANGUAGE="JavaScript">
<!--
location.reload();
//-->
</SCRIPT>
<%
'====== 복사할 원본 파일 , 복사될 파일.. ====
'Call CopyFile("d:폴더명ebs_workebs_db.asp", "d:폴더명ebs_workebs_db111.asp")
'============================================================================================================
'folder Deleting...
'Sub DeleteFolder(filespec)
'Dim fso
'Set fso = CreateObject("Scripting.FileSystemObject")
'fso.DeleteFolder (filespec)
'End Sub

'아래 코드는 For Each...Next 문을 사용해서 Folders 컬렉션을 가져오는 방법과 컬렉션을 반  '.복하는 방법을 설명합니다.
'Sub ShowFolderList(folderspec)
'Dim fs, f, f1, fc, s, i
'Set fs = CreateObject("Scripting.FileSystemObject")
'Set f = fs.GetFolder(folderspec)
'Set fc = f.SubFolders
'For Each f1 In fc
's = s & f1.Name
's = s & vbCrLf
'Next
'MsgBox s
'End Sub


'숨겨진 파일 특성과 시스템 파일 특성이 설정된 것을 포함하여, 지정된 파일에 포함된


'. 모든 File 개체로 구성되는 Files 컬렉션을 반환합니다
'Sub ShowFileList(folderspec)
'Dim fs, f, f1, fc, s
'Set fs = CreateObject("Scripting.FileSystemObject")
'Set f = fs.GetFolder(folderspec)
'Set fc = f.Files
'For Each f1 In fc
's = s & f1.Name
's = s & vbCrLf
'Next
'MsgBox s
'End Sub



'아래 코드는 Folder 개체를 얻는 방법과 이 개체의 속성 중 하나를 반환하는 방법을


'.설명합니다.
'Sub ShowFolderInfo(folderspec)
'Dim fs, f, s
'Set fs = CreateObject("Scripting.FileSystemObject")
'Set f = fs.GetFolder(folderspec)
's = f.DateCreated
'MsgBox s
'End Sub


'.상기와 같이 모듈파일에 정의해 놓고, 골라서 적용하세요.

'.Example.


'저장할 폴더검색 및 Creat


'tmpFolder = "저장할 폴더 경로"   '. D:Data2004-10-19"
'If Dir(tmpFolder, vbDirectory) = "" Then  '. 폴더가 존재하지 않는다면
'CreateFolder tmpFolder                            '.폴더를 맹글어라.
'End If


'파일에 Data 기록


'LogDataFile = "저장할 파일 경로"   '. D:Data2004-10-192004-10-19.dat"


'LogData = "아침 식사는 했수?"   '.저장할 Data


'FileNumber = FreeFile
'Open LogDataFile For Append As FileNumber
'Print #1, LogData
'Close #1


'.Copy 를 한다.


'SourceFile = "복사할 파일 경로"     '. D:Data2004-10-192004-10-19.dat"


'tmpCopyFile = "복사될 파일 경로"   '. D:BackUp2004-10-192004-10-19.dat"


'CopyFile SourceFile, tmpCopyFile       '.복사 실행


'.지워버릴 폴더검색 및 Creat


'tmpFolder = "저장할 폴더 경로"   '. D:Data2004-10-19"


'DeleteFolder(tmpFolder)                  '.가차 없이 지워버려라.


%>

2009/08/07 21:50 2009/08/07 21:50

<%@LANGUAGE="VBSCRIPT" CODEPAGE="949"%>
<!--#include file="opendb.asp" -->
<%
Server.ScriptTimeout = 10000
Response.Buffer = False


send_type = request("s_member")
send_name = request("send_name")
send_subject = request("mail_subject")
send_content = request("mail_content")



if request("page") = "" then
page = 1
else
page = request("page")
end if



'''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''' 전체 메일 보내기 일때'''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
'sql = "select email from userdbml where gjg =1 and email !='' order by number desc"
sql = "select email from userdbml where id='bj0806'"
Set rs = Server.CreateObject("ADODB.Recordset")


rs.pagesize = 500
rs.open sql,Db,3


if Rs.eof or Rs.bof then
%>
<script language="javascript">
<!--
alert('전체메일을 모두 발송 하였습니다.nn메일링 페이지로 이동 합니다');
location.href='mailling.asp';
//-->
</script>
<%
Else
totalpage = rs.pagecount
R_count = rs.recordcount - rs.pagesize * page
R_count1 = rs.recordcount - R_count
rs.AbsolutePage = page


i = 1


Do until rs.eof or rs.bof
'Do until rs.eof or i > rs.pagesize '이메일 갯수만큼 돌면서 메일 보내기
Set M = Server.CreateObject("CDONTS.NewMail")
M.To = rs("email")
M.From = send_name
M.Subject = send_subject
M.BodyFormat = 0
M.MailFormat = 0
M.Body = send_content
M.Send
Set M = Nothing


rs.movenext
i= i +1
Loop
%>
<html>
<head>
<script language="javascript">
<!--
function L_mail()
{
alert("<%=R_count1%>통 발송 하였습니다.nn<%=page%>페이지/전체<%=totalpage%>페이지");
document.emailing.submit();
}
//-->
</script>
</head>
<body onLoad="L_mail();">
<form name="emailing" action="maillingOk.asp" method="post">
<input type="hidden" name="page" value="<%=cint(page)+1%>">
<input type="hidden" name="s_member" value="<%=send_type%>">
<input type="hidden" name="send_name" value="<%=send_name%>">
<input type="hidden" name="mail_subject" value="<%=send_subject%>">
<textarea name="mail_content" rows="20" cols="75"><%=send_content%></textarea>
</form>
</body>
</html>
<%
end If
rs.close
Set rs = Nothing
%>

2009/08/07 21:46 2009/08/07 21:46

ASP + MS-SQL 사용중인 DB 용량보기

'사용중인 DB 용량 Free/Used/Total
Function getDBSize()   
     Dim strSql, sizeRs, freeSize

     strSql = "sp_spaceused" '내장프로시져명
     set sizeRs = conn.execute(strSql)
    freeSize =  replace(sizeRs(1),"MB","") - replace(sizeRs(2),"MB","")
     getDBSize = "<span style='color:red;'> Free : " & freeSize & " MB</span> / "&_

     "<span style='color:green;'>Used : " & sizeRs(2) & "</span> / " &_

     "<span style='color:#ff6600;'>Total : " & sizeRs(1) & "</span>"
     SizeRs.close


     Set SizeRs = nothing


End Function

'사용법

Response.write getDBSize()

2009/08/07 21:46 2009/08/07 21:46

ASP용 COM+를 제작하기 위해서 VB를 많이 사용합니다.  ASP의 기본 스크립트가 VBScript이기 때문에 문법적으로도 가까운 편이고, VB로 COM+를 작성하는 것 자체가 쉬워서 생산성 향상에 도움이 되기 때문에 많이 애용되고 있습니다.
 
여기서는 VB를 사용하여 COM+를 제작하는 방법을 간단하게 설명합니다. 이 부분을 이해하시려면 ASP와 VB의 기본 문법등은 알고 계셔야 합니다. (아래 예에서는 VB 6을 사용합니다.)
 
1. 먼저 VB를 실행하고 ActiveX DLL 을 선택하여 프로젝트를 생성합니다.



 
2. 프로젝트 / Project1 속성 메뉴를 클릭하여 프로젝트 속성창을 엽니다.
 
3. 아래와 같이 프로젝트 이름 부분을 입력합니다. (자신이 원하는 것 아무거나 입력하셔도 되지만, 예제 설명을 위해 적당히 지정을 하겠습니다.



 
4. 위 입력창을 닫고, 화면 우측의 프로젝트 속성창에서 클래스 모듈의 이름을 변경합니다.



 
5. 프로젝트 / 참조 메뉴를 선택하여 다음 요소를 체크합니다.
Microsoft ActiveX Data Objects 2.8 Library : DB 접근을 위한 모듈입니다. 사용하시는 시스템에 다른 버전이 있을 경우 해당 버전을 선택하시면 됩니다.
Microsoft Active Server Pages Object Library / Microsoft Active Server Pages ObjectContext Object Library : ASP 객체 접근을 위한 모듈입니다.
COM+ Services Type Library : COM+ 자료형을 선언해둔 모듈입니다.



 
6. 화면 중앙의 코드부로 와서 다음 코드를 입력합니다.
Option Explicit
 
Private objContext As ObjectContext
Private objRequest As Request
Private objResponse As Response
 
Public Function Show()
    ' IIS 객체
    Set objContext = GetObjectContext()
    Set objRequest = objContext("Request")
    Set objResponse = objContext("Response")
   
    objResponse.write objRequest("id")
End Function



7. 파일 / 프로젝트 저장 메뉴를 선택하여 현재 프로젝트를 적당한 폴더에 저장합니다.
 
8. 파일 / Board.dll 만들기 메뉴를 선택하고 확인을 눌려 Board.dll 을 생성합니다.
 
9. VB를 닫고, 관리 도구의 구성 요소 서비스를 실행합니다.
 
10. 구성 요소 서비스 창에서 내 컴퓨터의 COM+ 응용 프로그램에 마우스 우클릭을 하고 새로 만들기 / 응용 프로그램을 선택합니다.



 
11. 다음을 누르고 빈 응용 프로그램을 선택한 다음, 응용 프로그램 이름을 적당히 입력하고, 활성화 유형을 라이브러리 응용 프로그램으로 선택합니다.



 
12. 마법사를 닫고 COM+ 응용 프로그램을 보면 방금 입력한 응용 프로그램이 있습니다. 이 응용 프로그램 하위의 구성 요소에서  마우스 우클릭을 하고 새로 만들기 / 구성 요소를 선택합니다.
 
13. 구성 요소 설치 마법사에서 새 구성 요소 버튼을 클릭하고 위에서 만든 Board.dll 을 찾아 선택합니다. 그리고 다음 / 마침을 눌러 마법사를 닫습니다.
 
14. ASP 페이지를 하나 만들어 다음을 입력합니다.
 dim obj
 
 Set obj = Server.CreateObject("Board.List")
 
 obj.Show


 set obj = Nothing



15. ?id=abcd 를 붙여서 위 ASP 페이지를 엽니다. (예를 들자면 http://localhost/test/test.asp?id=abcd 정도가 됩니다.)  COM+ 를 만들때 입력했던 VB 코드에서 id 로 넘어온 값을 출력하도록 하였기 때문에, 위의 모든 과정이 정상이라면 화면에 abcd 가 찍혀야 합니다.
 


--------------------------------------------------------------------------------



IIS에서 작성된 COM+를 사용하게 되면 해당 dll 파일에 Lock이 걸려 수정, 삭제가 안됩니다. COM+ 작업을 할때 수시로 dll 을 수정하게 되는데 이런 경우 Lock이 걸려 있다면 작업 진행이 안되겠죠.
 
현재 돌아가고 있는 웹서버일 경우, 등록된 COM+의 Lock을 해제 하기 위해서는 구성 요소 서비스에서 해당 COM+를 사용 안함으로 선택하였다가 IIS의 해당 dll 사용이 타임아웃 되면 그때 새로운 dll을 올리시고 다시 사용 한다고 바꿔주시면 됩니다.
 
현재 돌아가지 않는 작업 전용 서버일 경우는 IIS를 리셋하는 것이 빨라서 편합니다. 윈도우의 실행 입력창에 iisreset /restart 를 입력하시면 5~20초 정도에 IIS가 재시작됩니다.

2009/08/07 21:41 2009/08/07 21:41

DLL 등록 쉽게 하기

[개요]
탐색기에서 Component를 쉽게 레지스트리에 등록하는 팁입니다. 탐색기 파일연결에 한번 등록해 놓으면, 나중에 dll 파일 선택후 등록및삭제을 쉽게 할수 있습니다.
자료출처: devpia.com 게시판



[방법]
먼저, 탐색기에서 도구 -> 폴더옵션 하면 "폴더옵션" 창이 나타납니다. 여기서 파일형식
을 선택하면, 각종 파일에 대한 프로그램 연결등을 할 수 있죠...

무조건 "새로 만들기" 버튼을 누릅니다.

그러면 "새 확장명 만들기" 창이 나오는데, "파일 확장명(F):" 란에 DLL 이라고 적어두
고 "고급(V) >>" 버튼을 누릅니다.

접힌 창이 펼처지면서 시간이 조금 걸립니다. 네~ "응용 프로그램 확장" 이라고 뜨는 군
요...

"확인" 버튼을 누릅니다.

다시, "폴더 옵션" 창으로 돌아오면, 맨 위에 "DLL 응용프로그램 확장" 이라고 생겼습니
다.

그리고는, "고급" 버튼을 눌러줍니다.

이제는, "파일 형식 편집" 창이 생기는데, "응용 프로그램 확장" 이라는 스트링은 건드
리지 말고, "명령(A):" 란을 봅니다. 그러면 시스템에 따라서 아무것도 없을 수도 있
고, 뭔가 있을 수도 있습니다.

오른쪽에 "새로 만들기(N)..." 버튼을 누릅니다. 새로이 창이 하나 더 뜨는데, "새 명
령" 이라는 창입니다. 여기에서 "작업(A):" 에는 "Register" 라고 해 주시고, 그 밑에
는 "Regsvr32.Exe %1" 라고 입력한 후 "확인" 버튼을 누릅니다.

그러면, "파일 형식 편집" 창으로 돌아오는데, 명령에 Register 가 추가되었군요...

한 번 더 "새로 만들기"를 합니다.

이번에는 Unregister / regsvr32.exe /u %1 라고 입력합니다.

모두 다 "확인" 을 하고 닫은 후 탐색기에서 *.DLL에서 오른 클릭하면 팝업 메뉴의 맨
윗 부분에 Register / Unregister 메뉴가 나오는것을 볼 수 있습니다.

OCX 도 똑 같이 작업을 하시면 됩니다.

그러면 매번 콤포넌트를 시스템에 등록하느라 시작 -> 실행 -> rewgsvr32 ~~~ 하지 않아
도 됩니다.

그런데, 이게 훨씬 편리한 이유는 탐색기에서 여러개의 파일을 선택하고서는 실행하면
한꺼번에 등록이 된다는 점 입니다.
2009/08/07 21:39 2009/08/07 21:39

아래의 코드를 프레임셋으로 나눈 페이지에 넣으면 새로고침(F5)를 하더라도 첫 페이지로 이동하지 않습니다.



Dim LastModified


LastModified = getGmt(DateAdd("h", -9, ShowFileAccessInfo(Server.MapPath("/test/test.asp"))))
Response.AddHeader "Last-Modified", "" &LastModified& ""
Response.AddHeader "ETag", "" &LastModified& ""


'===================================================================
'        func        : getGmt(sDate)
'        param        : sDate - 파일수정시간
'        memo        : 시간을 받아 GMT 포맷으로 리턴
'===================================================================
function getGmt(sDate)
       dim weekT(6), monT(11)
       weekT(0) = "Sun"
       weekT(1) = "Mon"
       weekT(2) = "The"
       weekT(3) = "Wed"
       weekT(4) = "Thu"
       weekT(5) = "Fri"
       weekT(6) = "Sat"


       monT(0) = "Jan"
       monT(1) = "Feb"
       monT(2) = "Mar"
       monT(3) = "Apr"
       monT(4) = "May"
       monT(5) = "Jun"
       monT(6) = "Jul"
       monT(7) = "Aug"
       monT(8) = "Sep"
       monT(9) = "Oct"
       monT(10) = "Nov"
       monT(11) = "Dec"


       getGmt = weekT(DatePart("w", sDate)-1) & " " &_
                        day(sDate)& " " &_
                        monT(DatePart("m", sDate)-1)& " " &_
                        year(sDate)& " " &_
                        mid(sDate, InstrRev(sDate, " ")) & " GMT"
end function


'===================================================================
'        func        : ShowFileAccessInfo(filespec)
'        param        : filespec - 파일
'        memo        : 파일의 마지막 수정 시간을 리턴
'===================================================================
function ShowFileAccessInfo(filespec)
       Dim fso, f


       Set fso = CreateObject("Scripting.FileSystemObject")
       Set f = fso.GetFile(filespec)
       ShowFileAccessInfo = f.DateLastModified
end function

2009/08/07 21:38 2009/08/07 21:38

한때 웹을 주름잡았던 ASP는 점점 퇴행길을 가고 하지만, 아직도 ASP개발은 곳곳에서 많이 이루어지고 있다.
ASP는 나름대로 프레임워크도 있고, IDE툴을 이클립스를 사용하며 SVN으로 형상관리도 할 수 있다.
ASP 프레임워크는 기회가 있을때 공개를 하기로 하고, 이클립스에서 ASP를 개발하는데 필요한 셋팅에 대해서 알아보자.


이클립스는 CVS를 기본 지원하며 SVN과도 궁합이 잘 맞아 형상관리가 쉽게 된다.

또 outline에 Class나 Function, Sub들이 나타나기 때문에 한눈에 소스 전체를 파악하기도 좋다.

특히나 FTP를 많이 사용할 경우 Aptana의  FTP Synchronize기능을 이용하여 별도의 FTP 없이 이클립스에서 자동으로 업로드/다운로드를 할수 있다.

단순하게 텍스트 에디트를 사용한다면 한번쯤 이클립스 사용을 도전해 보는것도 좋다.

사용자 삽입 이미지

1. 이클립스 다운로드

WTP all-in-one 버전을 받는것이 좋다. 물론 그 전에 Java를 사용하든 안하든 반드시 설치 해야 한다.

Java는 http://java.sun.com 에서 다운받을 수 있고, 이클립스 WTP all-in-one은 http://eclipse.org/downloads 에서 다운 받을 수 있다.
이 상태로도 프로젝트를 생성해서 ASP개발 할 수 있지만 구문강조 및 SVN지원을 위해서 몇가지 플러그인을 더 설치해야 한다.



2. SVN 플러그인 설치
이클립스는 기본적으로 CVS를 지원해 주지만, SVN을 사용하려면 SVN 플러그인을 설치해야 한다.
플러그인은 URL Update 기능을 이용하여 설치할 수 있다.
이클립스를 실행한 후,
Help > Software Updates > Fine and install > Search for new features to install > Next > New Remote Site 로 이동한 다음,

Name에 Subversive를 입력하고, URL에  http://www.polarion.org/projects/subversive/download/update-site 를 입력 한다.



3. Aptana 플러그인 설치

요즘 Ajax 때문에 Javascript를 많이 사용하게 되는데, 버전별 호환성이라던지 Javascript Framework를 사용할 때 자동완성 기능을 제공 해 주는 플러그인이다.
설치법은 SVN 플러그인과 같다.

Name은 Aptana, URL은 http://update.aptana.com/install/ 를 입력한다.



4. EcliipseColorer 설치

ASP 구문강조를 위해서 필요한 플러그인이다.

ASP 구문에 구문강조를 해 주고, Outline에 Class, Function, Sub 리스트를 보여 주는 역할을 한다.

Name은 EclipseColorer, URL은 http://colorer.sf.net/eclipsecolorer/ 를 입력한다.

2009/08/01 10:23 2009/08/01 10:23
출처 :  HTTP://WEBARTY.COM
홈 > 아티보드 > 아티보드 소개 > $2
아티보드 솔루션은 두터운 사용자 층을 지니고 있으며, 관공서 및 대기업에도 아티보드 솔루션은 사용되고 있습니다. 여러 사용자들이 사용함에 따라 그 만큼 사용자들의 요구는 끊임이 없습니다. 아티보드에서는 세밀한 기능까지 구현이 되어 있지만 관리자 모듈은 쉽고 간단합니다. 관리자가 보다 손쉽게 관리할 수 있으며, 다양한 기능의 구현이 이뤄지는 아티보드 솔루션을 체험하실 수 있습니다.
 
아티보드를 이용해서 회원제 운영 여부를 결정 하거나, 최근 게시글, 통합검색, 설문조사 삽입, 팝업창 등의 구현이 매우 쉽습니다. 설문조사 및 팝업창의 경우 기간을 두어 자동으로 실행이 되거나 중지할 수 있도록 설정이 가능합니다. 최근 게시글의 이미지를 출력하는 경우 썸네일 컴포넌트를 연동해서 서버에 과부하가 생기지 않도록 작은 이미지를 출력하는 세심한 기능까지 고려합니다. 회원관리, 로그인, 게시판, 쪽지 기능의 경우 스킨 형태로 구성되어 있기 때문에 디자인의 변경이 가능합니다.
 
아티보드의 가장 큰 매력이라고 볼 수 있는 부분으로써 데이타 처리가 매우 빠릅니다. 자체적으로 개발된 페이징 기법을 이용하기 때문에 타 게시판에 비해 50% 이상 빠르게 실행이 됩니다. 저장 프로시져를 90% 이상 사용했기 때문에 보안 부분이 강력하며, 일반적으로 DB를 액세스 하는 속도보다 월등히 우월합니다. 많은 기능을 구현하게 되면 서버의 과부화 및 속도가 느려지는 부분이 있는 현실에 아티보드는 이 모든 부분을 극복한 솔루션입니다.
 
다양한 스킨지원으로 원하는 레이아웃과 디자인 선택이 가능하며, 제공되는 모든 스킨은 매우 쉽게 수정이 가능합니다. 다양한 기능을 추가적으로 구현할 수 있도록 설계가 되어 있어, 아티보드로 이용할 수 있는 기능은 무한적 입니다.
 
아티보드에서 기본적으로 제공되는 회원관리 및 게시판 외에 부가적으로 사용할 수 있는 별도 로그인, 설문조사, 팝업창, 쪽지, 회원프로필 등의 기능을 별도로 제공합니다.
 
버그수정, 기능추가로 꾸준한 업데이트가 이뤄 지며, 개발자와 사용자들간의 끊임없는 유대관계를 형성하여 사용자의 의견에 더욱 귀를 기울이고 있습니다. 웹아티에서는 사용자의 작은 의견이라도 소홀이 생각하지 않으며, 지속적으로 좋은 솔루션을 제공하도록 노력합니다.
2009/07/16 16:39 2009/07/16 16:39

안녕하세요! 웹아티 회원님.
언제나 저희 웹아티 서비스를 이용해 주셔서 감사합니다.


앞서 공개된 아티보드 에디터 업데이트 버전이 윈도우즈 XP에서 올바르게 동작되지 않았던 버그를 수정했습니다.
수많은 테스트를 해 보진 않았지만, 여러 회원님들이 불편을 겪고 계시기 때문에 긴급히 패치를 합니다.
패치 후 오류가 발생하면 다시 알려 주시기 바랍니다.

아티보드를 2009년 5월 22일자 버전까지 패치를 하셔서 사용하시거나, 5월 22일자 버전을 신규로 설치하신 분들은 패치 버전을 다운 받으셔서 패치를 하시고 처음 설치 하는 분들은 전체 버전을 다운 받아 메뉴얼을 참고하셔서 설치하시기 바랍니다.


아티보드 전체 버전 : ArtyboardV20_20090608_Full.zip
아티보드 패치 버전 : ArtyboardV20_20090608_Patch.zip


[패치방법]


1. ArtyboardV20_20090608_Patch.zip 파일을 다운받아 압축을 해제합니다.
2. 서버와 동일한 경로로 압축이 해제된 파일을 서버에 덮어 씌웁니다.
3. 패치프로그램을 실행합니다. (홈페이지경로/아티보드경로/patch20090608.asp)
4. DB 정보를 입력 후 패치를 마칩니다.


업데이트 안내는 여기를 클릭하셔서 확인하시기 바랍니다.

좋은 하루 되시기 바랍니다.

[다운로드]
 
2009/07/16 16:37 2009/07/16 16:37