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


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

  1. 2008/02/21 global.asa를 이용한 사이트 접속 카운터 예제
  2. 2008/02/21 파일(file) 읽기 쓰기를 활용한 접속 카운터 예제입니다.
  3. 2008/02/21 드라이브,디렉토리관리 및 파일관리
  4. 2008/02/21 Html의 테그를 제거해주는 함수
  5. 2008/02/21 퀵정렬 예제
  6. 2008/02/21 Select Box 에 테이블의 field 값을 뿌려주는 예제
  7. 2008/02/21 게시판이나 기타폼에서 textarea의 엔터값 치완하여 저장하고 불러오기
  8. 2008/02/21 ASP 성능향상을 위한 팁
  9. 2008/02/21 DB를 이용한 랜덤배너 달기
  10. 2008/02/21 DateDiff 함수를 이용한 경과시간 체크예제
  11. 2008/02/21 CDONTS를 사용한 이메일 발송예제
  12. 2008/02/21 선택된 칼라테이블의 색상으로 텍스트의 색상을 바꾸기
  13. 2008/02/21 ASP에서 트랜잭션(Transaction) 처리
  14. 2008/02/21 활용도 높은 ASP 달력 예제입니다.
  15. 2008/02/21 한글,영문,숫자가 섞인 문자열에서 항상 일정한 길이로 자르기
  16. 2008/02/21 문자열의 길이를 알아내기
  17. 2008/02/21 자바스크립트로 ASP 변수값 넘기기
  18. 2008/02/21 난수를 이용한 쿠폰번호 생성
  19. 2008/02/21 사이트 링크의 유효성 검사
  20. 2008/02/21 런타임 에러값
  21. 2008/02/21 랜덤링크 배열 이용
  22. 2008/02/21 랜덤링크
  23. 2008/02/21 문자열 거꾸로 뒤집기
  24. 2008/02/21 멕어드레스 알아내는 함수
  25. 2008/02/21 ASP에서 Eval 함수 쓰기
  26. 2008/02/21 난수를 이용한 쿠폰번호(알파벳+숫자) 생성
  27. 2008/02/21 입력값이 들어왔을때 난수구하기!!
  28. 2008/02/21 간단한 파일 쓰기
  29. 2008/02/21 간단한 파일(file) 읽기 (라인단위 읽기)
  30. 2008/02/21 간단한 파일 읽기 (전체읽기)

global.asa를 이용한 카운터 예제입니다.
너무흔한 예제이지만 파일처리와 global.asa를 이해하는데 더 없이 좋은 예제인거 같아서 올려봅니다.
가급적 이해하기 쉬우시라고 많은 주석처리를 하였습니다.


예제를 실행시키기 위해서는 counter.txt라는 파일을 웹사이트 루트에 만들고, 초기값을 0을 주셔야 합니다.
어제올린 파일을 이용한 접속카운터 예제처럼 파일이 없을때 생성시키는 것도 가능하나 global.asa에는
가급적 부담을 적게하는게 원칙이라 파일생성 부분은 구현에서 배제하였습니다.


※혹시 모르시는분을 위한 총접속자 확인방법
첫번째방법 : global.asa에 저장된 총접속자수를 확인하기 위해서는 확인하고자 하시는 asp파일에
<%=Application("cnt")%> 부분을 삽입해 두거나 Application("cnt") 값을 특정
변수에 할당해서 그변수값을 출력해서 확인합니다.
두번째방법 : 웹사이트의 루트에 생성해둔 counter.txt파일을 직접 열어서 확인합니다.


<SCRIPT LANGUAGE=VBScript RUNAT=Server>


SUB Application_OnStart
'이곳에서는 서버가 시작되고 사용자가 처음 들어왔을때 딱 한번실행  


'서버 시작후 사용자가 처음 방문했을때 counter.txt 파일에서 값을 읽어서 Application("cnt")에 대입합니다.
Set objFSO  = CreateObject("Scripting.FileSystemObject")
FilePath = Server.MapPath(".") & "\counter.txt"
Set objFile = objFSO.OpenTextFile(FilePath, 1) 'Open Text File의 두번째 인수 1은 읽기전용입니다.
cnt = objFile.ReadLine '파일의 라인을 읽어서 값을 cnt 에 대입한다
Application("cnt")=cnt 'Application("cnt")에 cnt값을 대입합니다.Application("cnt")에는 총방문자수가 기록됩니다.
objFile.Close
Set objFile=nothing
Set objFSO = nothing

End Sub


Sub Application_OnEnd
'이곳은 모든 사용자의 세션이 (개별 세션이 아님, 사이트종료 시점) 끝나게될때 실행됩니다.


'세션이 끝날때 총방문자수(Application("cnt"))를 파일에 저장해 둡니다.
Set objFSO=Createobject("Scripting.FileSystemObject")
FilePath=Server.MapPath(".") & "\counter.txt"
Set objFile=objFSO.OpenTextFile(FilePath,2) 'Open Text File의 두번째 인수 2는 쓰기전용입니다.
objFile.WriteLine(Application("cnt"))
objFile.close
Set ObjFile=nothing
Set ObjFSO=nothing


End sub


Sub Session_OnStart
'여긴 매 사용자가 들어올때마다 실행됩니다.  


Session.TimeOut=30 '세션 지속시간을 30분으로설정, Default지속시간은 20분입니다.
Application.Lock   'Application("cnt")의 값을 수정하기 위해 다른사람의 접근을 막습니다.
Application("cnt")=Application("cnt")+1
Application.Unlock '변수수정이 끝나면 접근금지를 풉니다


Set objFSO=Createobject("Scripting.FileSystemObject")
FilePath=Server.MapPath(".") & "\counter.txt"
Set objFile=objFSO.OpenTextFile(FilePath,2) 'Open Text File의 두번째 인수 1은 읽기전용입니다.
objFile.WriteLine(application("cnt"))
objFile.close
set objFSO=nothing
set objFile=nothing


End Sub


Sub Session_OnEnd
'이곳에서는 세션이 종료시 실행됩니다. 세션 종료시점은 TimeOut(default 20분)동안 아무런 페이지도 접근하지않았을때, 세션의 'Abondon명령을 실행했을 때입니다.

End Sub


</SCRIPT>

2008/02/21 15:18 2008/02/21 15:18

간단하게 만들어본 카운터예제입니다. Session방식이 아니라서 페이지가 로딩될때마다 카운터가 막 올라갑니다.

다음번에는 global.asa에서 사이트에 접근하는 Session을 체크하는 방식으로 수정해서 올리겠습니다.

소스는 잘 실행됩니다.


<HTML>
<HEAD>
<TITLE>카운터예제</TITLE>
</HEAD>
<BODY>
<%


   Dim objFSO, objFile, FilePath
   Const ForReading = 1, ForWriting = 2, ForAppending = 8

   Const FileName = "\counter.txt"

   Filepath = Server.MapPath(Filename)

   '파일시스템 객체를 생성한다.  
   Set objFSO  = CreateObject("Scripting.FileSystemObject")
  
   '파일이 존재하면
   If objFSO.FileExists(Filepath) Then
   Set objFile = objFSO.OpenTextFile(FilePath, ForReading, False, TristateUseDefault)
                 cnt = objFile.ReadLine '파일의 라인을 읽어서 값을 cnt 에 대입한다
          objFile.Close
   End If

  
   Set objFile = objFSO.CreateTextFile(FilePath, true )
                 cnt = cnt + 1
   objFile.Write cnt
   objFile.Close

   Set objFSO = nothing


%>
<h2><%=cnt%></h2>
</BODY>
</HTML>

2008/02/21 15:17 2008/02/21 15:17

혹시 필요하신분 있으실까봐  퍼왔습니다. 출처는 ???




<%
Function ShowFreeSpace(drvPath)
   Dim fso, d, s
   Set fso = CreateObject("Scripting.FileSystemObject")
   Set d = fso.GetDrive(fso.GetDriveName(drvPath))
   s = "Drive " & UCase(drvPath) & " - "
   s = s & d.VolumeName   & "<BR>"
   s = s & "Free Space: " & FormatNumber(d.FreeSpace/1024, 0)
   s = s & " Kbytes"
   ShowFreeSpace = s
End Function


Function ShowAvailableSpace(drvPath)
   Dim fso, d, s
   Set fso = CreateObject("Scripting.FileSystemObject")
   Set d = fso.GetDrive(fso.GetDriveName(drvPath))
   s = "Drive " & UCase(drvPath) & " - "
   s = s & d.VolumeName   & "<BR>"
   s = s & "Available Space: " & FormatNumber(d.AvailableSpace/1024, 0)
   s = s & " Kbytes"
   ShowAvailableSpace = s
End Function


Function ShowDriveLetter(drvPath)
   Dim fso, d, s
   Set fso = CreateObject("Scripting.FileSystemObject")
   Set d = fso.GetDrive(fso.GetDriveName(drvPath))
   s = "Drive " & d.DriveLetter & ": - "
   s = s & d.VolumeName & "<BR>"
   s = s & "Free Space: " & FormatNumber(d.FreeSpace/1024, 0)
   s = s & " Kbytes"
   ShowDriveLetter = s
End Function


Function ShowDriveType(drvpath)
   Dim fso, d, t
   Set fso = CreateObject("Scripting.FileSystemObject")
   Set d = fso.GetDrive(drvpath)
   Select Case d.DriveType
      Case 0: t = "Unknown"
      Case 1: t = "Removable"
      Case 2: t = "Fixed"
      Case 3: t = "Network"
      Case 4: t = "CD-ROM"
      Case 5: t = "RAM Disk"
   End Select
   ShowDriveType = "Drive " & d.DriveLetter & ": - " & t
End Function


Function ShowFileSystemType(drvspec)
   Dim fso,d
   Set fso = CreateObject("Scripting.FileSystemObject")
   Set d = fso.GetDrive(drvspec)
   ShowFileSystemType = d.FileSystem
End Function


Function ShowFreeSpace(drvPath)
   Dim fso, d, s
   Set fso = CreateObject("Scripting.FileSystemObject")
   Set d = fso.GetDrive(fso.GetDriveName(drvPath))
   s = "Drive " & UCase(drvPath) & " - "
   s = s & d.VolumeName   & "<BR>"
   s = s & "Free Space: " & FormatNumber(d.FreeSpace/1024, 0)
   s = s & " Kbytes"
   ShowFreeSpace = s
End Function


Function ShowDriveInfo(drvpath)
   Dim fso, d, s, t
   Set fso = CreateObject("Scripting.FileSystemObject")
   Set d = fso.GetDrive(drvpath)
   Select Case d.DriveType
      Case 0: t = "Unknown"
      Case 1: t = "Removable"
      Case 2: t = "Fixed"
      Case 3: t = "Network"
      Case 4: t = "CD-ROM"
      Case 5: t = "RAM Disk"
   End Select
   s = "Drive " & d.DriveLetter & ": - " & t
   If d.IsReady Then
      s = s & "<BR>" & "Drive is Ready."
   Else
      s = s & "<BR>" & "Drive is not Ready."
   End If
   ShowDriveInfo = s
End Function


Function ShowFileAccessInfo(filespec)
   Dim fso, d, f, s
   Set fso = CreateObject("Scripting.FileSystemObject")
   Set f = fso.GetFile(filespec)
   s = UCase(f.Path) & "<BR>"
   s = s & "Created: " & f.DateCreated & "<BR>"
   s = s & "Last Accessed: " & f.DateLastAccessed & "<BR>"
   s = s & "Last Modified: " & f.DateLastModified  
   ShowFileAccessInfo = s
End Function


Function ShowFileAccessInfo(filespec)
   Dim fso, f, s
   Set fso = CreateObject("Scripting.FileSystemObject")
   Set f = fso.GetFile(filespec)
   s = f.Name & " on Drive " & UCase(f.Drive) & "<BR>"
   s = s & "Created: " & f.DateCreated & "<BR>"
   s = s & "Last Accessed: " & f.DateLastAccessed & "<BR>"
   s = s & "Last Modified: " & f.DateLastModified  
   ShowFileAccessInfo = s
End Function


Function ShowFolderList(folderspec)
   Dim fso, f, f1, s, sf
   Set fso = CreateObject("Scripting.FileSystemObject")
   Set f = fso.GetFolder(folderspec)
   Set sf = f.SubFolders
   For Each f1 in sf
      s = s & f1.name
      s = s & "<BR>"
   Next
   ShowFolderList = s
End Function


Function ShowFileAccessInfo(filespec)
   Dim fso, f, s
   Set fso = CreateObject("Scripting.FileSystemObject")
   Set f = fso.GetFile(filespec)
   s = UCase(f.Name) & " in " & UCase(f.ParentFolder) & "<BR>"
   s = s & "Created: " & f.DateCreated & "<BR>"
   s = s & "Last Accessed: " & f.DateLastAccessed & "<BR>"
   s = s & "Last Modified: " & f.DateLastModified  
   ShowFileAccessInfo = s
End Function


%>

2008/02/21 15:17 2008/02/21 15:17

출처는: http://www.Codeproject.com 입니다.

Html의 테그를 제거해주는 함수입니다.


<%
Function RemoveHTML( strText )
    Dim TAGLIST
    TAGLIST = ";!--;!DOCTYPE;A;ACRONYM;ADDRESS;APPLET;AREA;B;BASE;BASEFONT;" &_
              "BGSOUND;BIG;BLOCKQUOTE;BODY;BR;BUTTON;CAPTION;CENTER;CITE;CODE;" &_
              "COL;COLGROUP;COMMENT;DD;DEL;DFN;DIR;DIV;DL;DT;EM;EMBED;FIELDSET;" &_
              "FONT;FORM;FRAME;FRAMESET;HEAD;H1;H2;H3;H4;H5;H6;HR;HTML;I;IFRAME;IMG;" &_
              "INPUT;INS;ISINDEX;KBD;LABEL;LAYER;LAGEND;LI;LINK;LISTING;MAP;MARQUEE;" &_
              "MENU;META;NOBR;NOFRAMES;NOSCRIPT;OBJECT;OL;OPTION;P;PARAM;PLAINTEXT;" &_
              "PRE;Q;S;SAMP;SCRIPT;SELECT;SMALL;SPAN;STRIKE;STRONG;STYLE;SUB;SUP;" &_
              "TABLE;TBODY;TD;TEXTAREA;TFOOT;TH;THEAD;TITLE;TR;TT;U;UL;VAR;WBR;XMP;"

    Const BLOCKTAGLIST = ";APPLET;EMBED;FRAMESET;HEAD;NOFRAMES;NOSCRIPT;OBJECT;SCRIPT;STYLE;"
   
    Dim nPos1
    Dim nPos2
    Dim nPos3
    Dim strResult
    Dim strTagName
    Dim bRemove
    Dim bSearchForBlock
   
    nPos1 = InStr(strText, "<")
    Do While nPos1 > 0
        nPos2 = InStr(nPos1 + 1, strText, ">")
        If nPos2 > 0 Then
            strTagName = Mid(strText, nPos1 + 1, nPos2 - nPos1 - 1)
     strTagName = Replace(Replace(strTagName, vbCr, " "), vbLf, " ")

            nPos3 = InStr(strTagName, " ")
            If nPos3 > 0 Then
                strTagName = Left(strTagName, nPos3 - 1)
            End If
           
            If Left(strTagName, 1) = "/" Then
                strTagName = Mid(strTagName, 2)
                bSearchForBlock = False
            Else
                bSearchForBlock = True
            End If
           
            If InStr(1, TAGLIST, ";" & strTagName & ";", vbTextCompare) > 0 Then
                bRemove = True
                If bSearchForBlock Then
                    If InStr(1, BLOCKTAGLIST, ";" & strTagName & ";", vbTextCompare) > 0 Then
                        nPos2 = Len(strText)
                        nPos3 = InStr(nPos1 + 1, strText, "</" & strTagName, vbTextCompare)
                        If nPos3 > 0 Then
                            nPos3 = InStr(nPos3 + 1, strText, ">")
                        End If
                       
                        If nPos3 > 0 Then
                            nPos2 = nPos3
                        End If
                    End If
                End If
            Else
                bRemove = False
            End If
           
            If bRemove Then
                strResult = strResult & Left(strText, nPos1 - 1)
                strText = Mid(strText, nPos2 + 1)
            Else
                strResult = strResult & Left(strText, nPos1)
                strText = Mid(strText, nPos1 + 1)
            End If
        Else
            strResult = strResult & strText
            strText = ""
        End If
       
        nPos1 = InStr(strText, "<")
    Loop
    strResult = strResult & strText
   
    RemoveHTML = strResult
End Function

%>

2008/02/21 15:17 2008/02/21 15:17

퍼온예제입니다.  ASP에서 퀵정렬 예제이고 참고하실 부분 많은것 같아서 퍼왔습니다.


<%


Sub QuickSort(vec,loBound,hiBound)
  Dim pivot,loSwap,hiSwap,temp

  if hiBound - loBound = 1 then
    if vec(loBound) > vec(hiBound) then
      temp=vec(loBound)
      vec(loBound) = vec(hiBound)
      vec(hiBound) = temp
    End If
  End If

  pivot = vec(int((loBound + hiBound) / 2))
  vec(int((loBound + hiBound) / 2)) = vec(loBound)
  vec(loBound) = pivot
  loSwap = loBound + 1
  hiSwap = hiBound
 
  do
    while loSwap < hiSwap and vec(loSwap) <= pivot
      loSwap = loSwap + 1
    wend

    while vec(hiSwap) > pivot
      hiSwap = hiSwap - 1
    wend

    if loSwap < hiSwap then
      temp = vec(loSwap)
      vec(loSwap) = vec(hiSwap)
      vec(hiSwap) = temp
    End If
  loop while loSwap < hiSwap
 
  vec(loBound) = vec(hiSwap)
  vec(hiSwap) = pivot
 
  if loBound < (hiSwap - 1) then Call QuickSort(vec,loBound,hiSwap-1)
  if hiSwap + 1 < hibound then Call QuickSort(vec,hiSwap+1,hiBound)
End Sub


Dim x

x = Array("1","31","72","11","26","43","74","23","35","55","77")

Call QuickSort(x,1,10)

for i = 0 to Ubound(x,1)
 response.write x(i) &"&nbsp;&nbsp;"
next

%>

2008/02/21 15:16 2008/02/21 15:16

웹상의 콤보박스(Select box)에 테이블의 field 값을 뿌려주는 예제입니다.



<!--#include file="dbconnect/dbconnect.asp"-->
<OBJECT RUNAT=server PROGID=ADODB.Recordset id=rs></OBJECT>
<%


   Tblname = Request("Tblname")

   'Code 부분에는 부서코드가 Name에는 부서명이 적힌 테이블 코드 테이블
   Sql="select Code, Name from " & Tblname & " Order by Name ASC"
   rs.Open Sql,db,1,2,1


%>
<html>
<head>
<script language="javascript">
<!--
function changesubmit()
{
  var dCount;
  dCount=document.form.dept.selectedIndex
  alert( document.form.dept[dCount].value ); // 코드값
  document.form.action = "http://cafe.naver.com/webdeveloper"
  document.form.submit();
  }
//-->
</script>
</head>
<title>Combobox에 코드출력하기</title>
<body>
<form name="form" method="post">
<select name="dept" onchange="javascript:changesubmit();">
<option value="">---전체보기---</option>
<%
 do while not rs.eof       
%>
<!--Select 리스트에는 부서명이 value에는 부서코드를 보관하고 있슴-->
<option value="<%=rs("Code")%>"><%=rs("Name")%></option>
<%rs.movenext
loop%>
</select>
</form>
</body>
</html>

2008/02/21 15:16 2008/02/21 15:16

아주 간단한 팁입니다. 대부분 다 아실거라 생각되지만 혹시 모르시는 분이 한분이라도

계실까봐...  예제 짧게 만들어서 올립니다.


<%

    '//--------텍스트에어리어(TextArea) 값을 DB에 입력할때.......


    '줄바꿈과 캐리지리턴값( chr(13), chr(10) )을 <br>로 치완합니다

     memo = replace(request("memo"), chr(13)&chr(10), "<br>")



     sql = " insert into "& tblname
     sql = sql&"("
     sql = sql&" uid"
     sql = sql&",title"
     sql = sql&",memo"



%>


<%


    '//--------텍스트에어리어(TextArea) 값을 불러올때.......


    '<br>을 줄바꿈과 캐리지리턴값( chr(13), chr(10) )으로 치완합니다.

    '여기서 rs는 memo필드를 불러온 Recordset을 의미합니다.

    memo= Replace(rs("memo"),"<br>", chr(13)&chr(10))


%>

2008/02/21 15:16 2008/02/21 15:16

출처: Microsoft TechNet  (http://www.microsoft.com/korea/technet/IIS/Tips/asptips17_29.asp)


1.  자주 사용되는 데이터는 웹 서버에 캐시하라


가.  자주 변경되지 않는 것은 데이터베이스에서 직접 액세스하지 말고 캐쉬하라.

나.  캐쉬 대상 : 콤보 상자 목록, 참조 테이블, DHTML 스크랩, XML(Extensible Markup Language) 문자열, 메뉴 항목과 데이터 원본 이름(DSN), 인터넷 프로토콜(IP) 주소 및 웹 경로를 포함하는 사이트 구성 변수

다.  HTML 문서로 저장

라.  자주 사용되는 데이터는 메모리(Application변수나 Session 변수)에 캐쉬한다.

마.  데이터 및 HTML은 웹 서버 디스크에 캐시하십시오

(1)  메모리에 캐시할 데이터가 너무 많은 경우에는 데이터를 텍스트 또는 XML 파일 형식으로 웹 서버의 하드 디스크에 캐시한다.

(2)  ADO의 RecordSet의 Save() 및 Open() 함수를 활용하여 디스크에 저장

(3)  Scripting.FileSystemObject를 이용하여 파일로 저장


2.  덩치 큰 COM 개체 등은 메모리에 캐쉬하지 마라.


3.  데이터베이스 연결은 응용 프로그램이나 세션 개체에 캐시하지 마라.


4.  세션 개체를 올바르게 사용하라.

가.  웹 서버에 대한 사용자 "Sticking" 현상 발생

나.  세션을 사용하고 있지 않으면 세션 기능을 반드시 해제

        <% @EnableSessionState=False %>

다.  상태의 크기가 4KB 미만으로 작은 경우에는 일반적으로 쿠키, QueryString 변수 및 <input type=hidden>를 사용하는 것이 좋다


5.  스크립트 코드를 COM 개체로 만들어 사용하라.

가.  COM 개체는 비즈니스 로직으로부터 표현 로직을 분리할 수 있다.

나.  COM 개체는 코드 재사용을 가능케 한다.

다.  작은 양의 ASP는 COM으로 안 만드는 것이 좋다.


6.  최신의 리소스를 얻어 신속하게 해제하라.

가.  다운로드 컴포넌트

나.  신속하게 Close하고 Nothing을 설정하라.


7.  독립 프로세스 실행을 통해 성능과 안정성을 적절히 안배하십시오

가.  낮은 격리 : 모든 IIS 버전에서 지원되며 속도가 가장 빠릅니다

나.  보통 격리 : 독립 프로세스로 실행

다.  높은 격리 : 독립 프로세스로 실행. ASP 작동이 중단되더라도 웹 서버 작동은 유지. 동시 접속자 수가 증가할 경우에만 높은 격리를 사용하는 것이 좋다.

※ ASP 응용 프로그램을 독립 프로세스(보통 또는 높음 격리)로 실행하면 ASP 응용 프로그램은 Windows NT4의 경우 Mtx.exe로 실행, Windows 2000의 경우 DllHost.exe로 실행된다.

※ 권장 사항 : IIS 4.0에서는 ASP의 낮음 격리 수준을, IIS 5.0에서는 ASP의 보통 격리 수준을 사용하고 COM+ 라이브러리 응용 프로그램을 사용하라.


8.  Option Explicit를 사용하십시오

가.  Option Explicit는 ASP 스크립트의 첫 번째 줄에 사용한다.

나.  모든 변수를 먼저 선언해야 한다. 만약 선언하지 않을 경우 에러가 발생된다.

다.  변수 이름의 오타를 막을 수 있다.

라.  선언된 변수가 선언되지 않은 변수보다 빠르게 실행된다.

(1)  선언되지 않은 변수 : 스크립팅 실행 시간에 필요할 때마다 변수 선언하여 사용

(2)  선언된 변수 : 컴파일 시간 또는 실행 시간에 미리 할당


9.  가급적 전역 변수보다는 함수 내의 지역 변수를 사용하라.


10.  자주 사용되는 데이터를 변수에 저장하라.

가.  COM 개체에서 읽어온 데이터

나.  Request 변수(Form 및 QueryString 변수)


11.  배열 크기 재정의를 피하라.

가.  배열 크기가 불확실할 때에는 적당하게 크게 잡아라. 약간의 낭비가 오히려 낫다.


12.  응답 버퍼링을 사용하십시오

가.  IIS : IIS를 이용한 전체 응용 프로그램의 응답 버퍼링 기능을 설정(권장 사항)

나.  스크립트 : Response.Buffer를 true로 설정, 이것은 HTML이 ASP 스크립트에 나타나기 이전과 Response.Cookies 컬렉션을 사용하여 쿠키가 설정되기 이전에 미리 실행되어야 한다.

다.  중간 중간에 버퍼링되 내용을 출력할 때 Response.Flush를 사용한다. 예를 들어, 1,000개의 행으로 구성된 테이블에서 100개의 행을 표시한 후 ASP는 Response.Flush를 호출하여 브라우저에 보낸다. 그러나 대부분 </table> 태그가 나타날 때까지는 대부분의 브라우저에서 테이블 표시를 시작할 수 없으므로 100개씩 테이블을 쪼개서 나타낸다.


13.  인라인 스크립트 및 Response.Write 명령문을 일괄 처리하십시오

가.  여러 개의 인접한 인라인 표현식들을 한 번의 Response.Write 호출로 바꾸라.


14.  실행 시간이 긴 페이지를 만들 때 Response.IsClientConnected를 사용하십시오.

가.  False가 반환되면 Response.End를 호출하여 나머지 페이지를 포기한다.

나.  IIS 5.0에서는 이러한 절차를 코드화했다. 즉 3초를 지나면 클라이언트가 아직도 연결되어 있는지를 검사하여 클라이언트 연결이 끊어져 있으면 그 즉시 해당 요청을 종료한다.


15.  <OBJECT> 태그를 사용하여 개체를 초기화하십시오

가.  Server.CreateObject 메서드보다는 <object runat=server id=objname> 태그를 사용하라.

나.  <object id=objname> 태그는 개체 이름을 선언만 하고 있다가 호출될 때 비로서 만들어진다.


16.  TypeLib 선언을 ADO 및 그 밖의 다른 구성 요소에 사용하십시오

가.  IIS 5.0에는 구성 요소의 유형 라이브러리에 대한 바인드 기능이 새로 추가되었다.

나.  ADO 상수를 사용할 때에는 다음 명령문을 Global.asa에 넣으라.

        <!-- METADATA NAME=“Microsoft ActiveX Data Objects 2.5 Library”

        TYPE=“TypeLib” UUID=“{00000205-0000-0010-8000-00AA006D2EA4}” -->


17.  서버에 값을 넘기기 전에 클라이언트에서 유효성 검사하라.


18.  루프 형식의 문자열 연결을 피하라.

가.  반복적인 문자열 연결로 인해 제곱 배의 시간이 소요된다. 다음 예의 걸린 시간은 1+2+3+...+N, 즉 N*(N+1)/2이다.


        s = “”

        For i = Asc(“A”) to Asc(“Z”)

                s = s & Chr(i)

        Next


나.  이 경우 Response.Write()로 바꾼다.

다.  JScript인 경우에는 +=이 효율적이다.

        s=s+"a"는 s+="a"에 비해 비 효율적이다.


19.  브라우저 및 프록시 캐싱을 사용하십시오.

가.  response 객체 사용

    <% Response.Expires = 10 %>

    <% Response.ExpiresAbsolute = #May 31,2001 13:30:15# %>

나.  <meta>태그 이용

        <META HTTP-EQUIV=“Expires” VALUE=”May 31,2001 13:30:15”>

다.  HTTP 프록시에서 캐쉬

    <% Response.CacheControl = “Public” %>


20.  가능하면 Response.Redirect가 아닌 Server.Transfer를 사용하라.(IIS 5.0)

가.  브라우저가 웹 서버에 두 번 왕복 이동한다.

나.  Server.Transfer : 이동한 페이지에서 종료된다.

다.  Server.Execute : 이동한 페이지에서 종료 후에 원래 페이지로 복귀한다.


21.  디렉터리 URL의 맨 마지막에 슬래시를 추가한다.

가.  슬래시가 생략되면 기본 문서가 아닌 디렉토리를 요청한 후에 기본 문서나 디렉토리 찾아보기를 실행한다.

나.  <a href=“http://msdn.microsoft.com”>를 <a href=“http://msdn.microsoft.com”>로 수정한다.


22.  Request.ServerVariables 사용을 피하십시오

가.  Request.ServerVariables에 액세스하면 웹 사이트가 서버에게 특수한 요청을 보내어 요청한 변수 뿐만 아니라 모든 서버 변수들을 모은다.

나.  Request("Data")을 요청할 경우 Request.Cookies, Request.Form, Request.QueryString 또는 Request.ClientCertificate에 들어 있지 않은 항목에 대해서는 Request.ServerVariables를 호출한다.

다.  Request.ServerVariables 컬렉션 속도는 다른 컬렉션 속도보다 매우 느리다.


23.  시스템 구성 요소를 최신으로 업그레이드하십시오


24.  성능 테스트를 하라.

가.  Microsoft WAS(Web Application Stress) 도구 : 웹 서버를 방문하는 사용자들을 수 백명 또는 수 천명까지 시뮬레이트할 수 있다.

나.  WAS는 초당 요청수, 응답 시간 배포, 오류 카운트 등을 파악


25.  Stored Procedure를 사용한다. (일반 ASP자체 쿼리보다 최고 30% 성능 향상.)


26.  뷰테이블 사용 시 뷰테이블 자체에서 정렬을 해야 한다. 이미 만들어진 뷰테이블을 이용하여 Asp 코드에서 정렬하면 속도가 크게 떨어진다.


27.  Query를 사용할 때 꼭 필요한 컬럼만 명시하여 불러오거나 이용해야 한다. SQL은 아주 정직해서 불러오는 컬럼의 갯수(레코드 수가 동일하다고 가정시)에 비례하여 시간이 걸린다.


28.  Recordset 객체보다는 Command 객체를 이용하는 것이 빠르다. 10%정도의 향상을 볼 수 있었다.


29.  Recordset 객체 사용시 CursorLocation를 적절한 것을 사용해야 한다. (1, 서버, 3. 클라이언트) 속도의 차이가 클 수 있다. CursorType도 영향을 미친다. 반드시 테스트 필요. 보통은 CursorLocation은 클라이언트에 두는 것이 추세다. 테스트때 클라이언트에 커서를 두었을때 서버에 두었을때보다 속도가 최고 3배이상 빨라지는 것을 경험했다.

30.  1000글자가 넘어가는 문장의 경우는 변수에 담아서 한번에 Response.Write 하는 것보다는 한 줄 한 줄 직접 뿌려주는 것이 빠르다.


31.  사용한 객체는 반드시 Close, Nothing 해준다. 안 해주면 메모리 누수가 일어난다. 웹서버들이 잘 죽는 경우는 반드시 이것을 체크해야 한다.


32.  다중 레코드를 이용할 시에는 Do until, Rs.MoveNext 구문보다는 GetRows() 함수를 이용하는 것이 빠르다.


33.  사용자 Function을 만들어 쓰는 것이 디버깅 등에 좋다.


34.  Inlcude를 많이 시키면 속도가 느려진다고 일반적으로 알려져 있지만 실제로는 속도차이가 전혀 없다.


35.  뷰 테이블에 아무리 많은 테이블, 컬럼들을 Join 해도 단일 테이블의 같은 수의 컬럼을 사용하는 속도와 동일하다.


36.  보안 철저

가.  수시로 windows 보안 업데이트

나.  파일 업로드 위치에는 절대로 스크립트 실행 권한을 주지 않는다.

다.  asp 스크립트가 주석 처리되지 않도록 한다.

2008/02/21 15:15 2008/02/21 15:15

이번 예제는 도움이 될까해서 해외사이트에서 퍼온 소스입니다.

참고하세요.


<%


    Dim eConn, ePath, rs,Sql,my_count
    Set eConn = Server.CreateObject("ADODB.Connection")
    ePath = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" & Server.MapPath("YOUR DB!")
   
    eConn.Open ePath
    'Count the records to get a High number
    Sql = "select count(b_id)as cnt from tblbanner"
   
    Set rs = Server.CreateObject("ADODB.Recordset")
    rs.Open Sql, eConn, 3, 3
    'plug it into a varibale
    my_count = rs("cnt")
 


    'If the table is empty write something
    if my_count < "1" Then
     Response.Write("Empty banner text")
    else
    'Get the ID and the Text for the banner
     Sql = "select b_id,b_text from tblbanner"
     Set rs = Server.CreateObject("ADODB.Recordset")
     rs.Open Sql, eConn, 3, 3
     RANDOMIZE
     Small = 1
    'vaiable for the high number
     High = my_count
     RandomNumber = INT((High-Small+1)*Rnd+Small)
    'Loop thru the results
     Do While Not rs.EOF
     Select Case RandomNumber
    'when the random number has a match us i
    '     t
      Case rs("b_id")
    'write the random number text
       Response.Write(rs("b_text"))
      End Select
     rs.MoveNext
     Loop
    End if
   
%>

2008/02/21 15:15 2008/02/21 15:15

<%


'해당 아이피가 로그인후 경과한 시간을 체크
function loginTimeCheck(tblname,strIP,tValue)
 

   Dim TimeCheck, bCheck

        set dbcon = server.CreateObject("ADODB.Connection")
   dbCon.Open strConnect
 
  '해당 아이피의 idate의 값을 가지고 온다
  'idate의 데이타형식은 datetime형입니다.
  SQLtime="Select idate from " & tblname & " where ip='" & strIP & "'"
  SQLtime=SQLtime & " order by no desc"
  set rs = dbCon.Execute(SQLtime)

 
  'TimeCheck=datediff("n", rs("idate"),now) '몇분이 지났는지 확인

   TimeCheck=datediff( "h", rs("idate"),now) '몇시간이 지났는지 확인
   if int(TimeCheck)>int(tValue) then 'tValue의 값이 2이면 2시간이 지났는지 확인

    '//--------필요한 처리를 여기서 한다
    '//--------tValue의 시간이 지났으면  bCheck = true 아니면 false
    '//--------처리끝 ----------------
   
 
  end if

 

  rsTime.close
  set rsTime = nothing
  dbCon.close
  set dbCon = nothing

  loginCheckTime = bCheck


end function


%>








%>

2008/02/21 15:14 2008/02/21 15:14

CDONTS객체를 사용한 이메일 발송예제는 너무나 쉽습니다.

아래는 직접사용하고 있는 소스인데 이미지 부분만 빼고 텍스트는 변경하고 올립니다.

참고하세요.


<%
  mail = name & "<table width='658' border='0' cellspacing='0' cellpadding='0'>"
  mail = mail & "<tr bgcolor='BDBABD'>"
  mail = mail & "<td colspan='3' height='1'></td>"
  mail = mail & "</tr>"
  mail = mail & "<tr>"
  mail = mail & "<td bgcolor='BDBABD' width='1'></td>"
  mail = mail & "<td width='656'>"
  mail = mail & "<table width='656' border='0' cellspacing='0' cellpadding='0'>"
  mail = mail & "<tr>"
  mail = mail & "<td></td>"
  mail = mail & "</tr>"
  mail = mail & "<tr>"
  mail = mail & "<td height='8'></td>"
  mail = mail & "</tr>"
  mail = mail & "<tr>"
  mail = mail & "<td align='center'><table width='566' border='0' cellspacing='0' cellpadding='0'>"
  mail = mail & "<tr>"
  mail = mail & "<td align='center'><p><strong>메일 발송 예제입니다</strong></p></td>"
  mail = mail & "</tr>"
  mail = mail & "</table></td>"
  mail = mail & "</tr>"
  mail = mail & "<tr>"
  mail = mail & "<td align='center'>&nbsp;</td>"
  mail = mail & "</tr>"
  mail = mail & "<tr>"
  mail = mail & "</tr>"
  mail = mail & "<tr>"
  mail = mail & "<td align='center'>&nbsp;</td>"
  mail = mail & "</tr>"
  mail = mail & "<tr>"
  mail = mail & "<td align='center'><table width='566' border='0' cellspacing='0' cellpadding='0'>"
  mail = mail & "<tr>"
  mail = mail & "<td><p>안녕하세요.. 이메일 발송 예제입니다. <br>"
  mail = mail & "여기다가 내용을 기재하여 주시고 이미지도 첨부하시면 멋진 이메일이 완성됩니다 <br>"
  mail = mail & "내용을 여기다가 계속 적어주십시오 <br>"
  mail = mail & "이메일 발송 예제 끝입니다.</td>"
  mail = mail & "</tr>"
  mail = mail & "</table></td>"
  mail = mail & "</tr>"
  mail = mail & "<tr>"
  mail = mail & "<td align='center'>&nbsp;</td>"
  mail = mail & "</tr>"
  mail = mail & "<tr>"
  mail = mail & "<td height='66' background='http://61.100.181.53/e-mail/image/bg_01.gif' align='center'>"
  mail = mail & "<table width='656' border='0' cellspacing='0' cellpadding='0'>"
  mail = mail & "<tr>"
  mail = mail & "<td width='210' align='right' height='67'></td>"
  mail = mail & "<td width='390' height='67'><font color='#666666'>Copyright @"
  mail = mail & "http://cafe.naver.com/webdeveloper  </font></td>"
  mail = mail & "</tr>"
  mail = mail & "</table>          </td>"
  mail = mail & "</tr>"
  mail = mail & "</table>"
  mail = mail & "</td>"
  mail = mail & "<td bgcolor='BDBABD' width='1'></td>"
  mail = mail & "</tr>"
  mail = mail & "<tr bgcolor='BDBABD'>"
  mail = mail & "<td colspan='3' height='1'></td>"
  mail = mail & "</tr>"
  mail = mail & "</table>"


  name = "테스트" '받는고객 이름
  Email = "test@testto.co.kr" '받는사람 메일주소
  fromMail = "test@test.co.kr" '보낸사람 메일주소

 

  content=Replace(Replace(mail,chr(13)&chr(10),""),"[고객이름]",name)
 
  Set objMail = Server.CreateObject("CDONTS.NewMail")
  objMail.From = fromMail
  objMail.To = Email
  objMail.subject = name &"님께 메일을 보냅니다"
  objMail.Body = content
  objMail.BodyFormat = 0     ' HTML일떄 0, 일반 Text일때 1 으로 설정한다.
  objMail.MailFormat = 0      ' HTML일떄 0, 일반 Text일때 1 으로 설정한다.
  objMail.Send
  Set objMail = nothing
%>

2008/02/21 15:14 2008/02/21 15:14
해외사이트에서 퍼온 소스입니다. 칼라테이블이 나오고 테이블을 클릭하면 그 테이블의

컬러로 텍스트 색상을 변경해줍니다.  웹서버에 넣고 돌려보니 잘 돌아갑니다.


<%
   Dim arrColors   ' Array of usable colors

   Dim iMinColor   ' LBound of the array
   Dim iMaxColor   ' UBound of the array

   Dim iR, iG, iB  ' Index vars for looping of each color

   Dim strColor    ' Temp var for building color string in loop


   ' Assign acceptable color components in hex.
   ' This is the 216 color web-safe palette.
   arrColors = Array("00", "33", "66", "99", "CC", "FF")

   ' Note I use the same array for all the colors since
   ' it's really just a mechanism to hold the hex values.

   ' I do this to save the processing time that would o/w
   ' result from doing this computation on each pass of the loop.

   iMinColor = LBound(arrColors)
   iMaxColor = UBound(arrColors)


    ' Table the colors for neat display
    Response.Write "<table cellspacing=""0"" cellpadding=""0"" " _
    & "border=""0"">" & vbCrLf


    ' Loop through reds
    For iR = iMinColor To iMaxColor
    ' Put in a row break so we can see the whole thing on one page
    Response.Write "<tr>" & vbCrLf
    ' Loop through greens
    For iG = iMinColor To iMaxColor
        ' Loop through blues
        For iB = iMinColor To iMaxColor
            ' calculate the color and show it
            strColor = "#" & arrColors(iR) & arrColors(iG) & arrColors(iB)
            Response.Write "<td bgcolor=""" & strColor & """>" _
                & "<a href=""color_chooser.asp?color=" & Server.URLEncode(strColor) _
                & """><img src=""images/spacer.gif"" width=""15"" height=""15"" " _
                & "alt=""" & strColor & """ border=""0""></a></td>" & vbCrLf
        Next 'iB
    Next 'iG
    Response.Write "</tr>" & vbCrLf
    Next 'iR
    Response.Write "</table>" & vbCrLf
%>

<p>
<strong>
<font size="+2" color="<%= Request.QueryString("color") %>">
This text will appear in the color you click above.
</font>
</strong>
</p>

2008/02/21 15:12 2008/02/21 15:12

해외사이트에서 퍼온 트랜잭션 처리예제입니다.   ASP에서 트랜잭션 처리는 좀 의문이네요?

잘 작동하는지는 테스트해보지 않았습니다만 관심있는 분은 소스 참고해 보세요.


<!-- #include file="adovbs.inc" -->
<%
' ADO constants included above.  Questions about adovbs.inc?
' See "What is Adovbs.inc and Why Do I Need It?"

Dim strConnString      ' Connection string
Dim myConnection       ' ADO Connection object
Dim strSqlQuery        ' SQL query
Dim lngRecordsAffected ' Number of records affected by command

' Set our connection string
strConnString = "Provider=SQLOLEDB;Data Source=10.2.1.214;" _
 & "Initial Catalog=samples;User Id=samples;Password=password;" _
 & "Connect Timeout=15;Network Library=dbmssocn;"

' Build our SQL query
strSqlQuery = "INSERT INTO [scratch] (text_field, integer_field, date_time_field) " _
                & "VALUES ('" _
                & CStr(WeekdayName(WeekDay(Date()))) & "', '" _
                & CInt(Day(Now())) & "', '" _
                & Now() & "');"

' Open connection
Set myConnection = Server.CreateObject("ADODB.Connection")
myConnection.Open strConnString

' Start transaction
Response.Write "<p><strong>Starting Transaction.</strong></p>" & vbCrLf
myConnection.BeginTrans

' Execute the SQL command
Response.Write "<p><strong>Executing SQL Command:</strong><br /><code>" & strSqlQuery & "</code></p>" & vbCrLf
myConnection.Execute strSqlQuery, lngRecordsAffected, adCmdText + adExecuteNoRecords

' Echo back the number of records affected
Response.Write "<p><strong>Records Affected:</strong> <code>" & lngRecordsAffected & "</code></p>" & vbCrLf

' Either commit or rollback the transaction based on QueryString
If CBool(Request.QueryString("rollback")) = True Then
 Response.Write "<p><strong>Rolling Back Transaction.</strong></p>" & vbCrLf
 myConnection.RollbackTrans
Else
 Response.Write "<p><strong>Commiting Transaction.</strong></p>" & vbCrLf
 myConnection.CommitTrans
End If

' Close data access objects and free variables
myConnection.Close
Set myConnection = Nothing
%>

<br />

<p>
<strong>Run the script again:</strong>
<a href="<%= Request.ServerVariables("URL") %>?rollback=false">Commit Transaction</a>
or
<a href="<%= Request.ServerVariables("URL") %>?rollback=true">Rollback Transaction</a>
</p>



2번째 이야기

저는 이방법을 쓰지는 않지만  ASP에서 많이들 쓰시는  트랜잭션 처리 방법하나 올립니다.

참고하세요


<!--#include file="dbconnect/dbconnect.asp"-->
<OBJECT RUNAT=server PROGID=ADODB.Connection id=db></object>
<OBJECT RUNAT=server PROGID=ADODB.Recordset id=rs></object>
<%

tblname = request("tblname")

memuid = request("memuid")


dim dberr
dberr = 0


db.begintrans()


sql = "insert into  " & tblname & " ( memuid, idate ) values ('"&memuid&"',getdate())"
db.execute(sql)
dberr = dberr + db.errors.count


if dberr > 0 then
 db.rollbacktrans()
 db.close
 response.write "<center><br><br>회원가입 처리중 에러가 발생 했습니다."
 response.write "에러:<br><br><font color='red'>"&Err.Description&"</font>"
 response.write "<br><br>위의 에러 내용을 사이트관리자에게 문의하여 주시기 바랍니다.</center>"
 err.close()
 response.end
else
 db.committrans()
end if


db.Close
%>


 

2008/02/21 15:12 2008/02/21 15:12

해외사이트에서 퍼온 달력예제입니다.  실제로 웹서버에 넣고 돌려보니 잘 실행됩니다.

달력 필요하신 분들은 소스 참고해 보세요.


<%
' ***Begin Function Declaration***
' New and improved GetDaysInMonth implementation.
' Thanks to Florent Renucci for pointing out that I
' could easily use the same method I used for the
' revised GetWeekdayMonthStartsOn function.
Function GetDaysInMonth(iMonth, iYear)
 Dim dTemp
 dTemp = DateAdd("d", -1, DateSerial(iYear, iMonth + 1, 1))
 GetDaysInMonth = Day(dTemp)
End Function

' Previous implementation on GetDaysInMonth
'Function GetDaysInMonth(iMonth, iYear)
' Select Case iMonth
'  Case 1, 3, 5, 7, 8, 10, 12
'   GetDaysInMonth = 31
'  Case 4, 6, 9, 11
'   GetDaysInMonth = 30
'  Case 2
'   If IsDate("February 29, " & iYear) Then
'    GetDaysInMonth = 29
'   Else
'    GetDaysInMonth = 28
'   End If
' End Select
'End Function

Function GetWeekdayMonthStartsOn(dAnyDayInTheMonth)
 Dim dTemp
 dTemp = DateAdd("d", -(Day(dAnyDayInTheMonth) - 1), dAnyDayInTheMonth)
 GetWeekdayMonthStartsOn = WeekDay(dTemp)
End Function

Function SubtractOneMonth(dDate)
 SubtractOneMonth = DateAdd("m", -1, dDate)
End Function

Function AddOneMonth(dDate)
 AddOneMonth = DateAdd("m", 1, dDate)
End Function
' ***End Function Declaration***


Dim dDate     ' Date we're displaying calendar for
Dim iDIM      ' Days In Month
Dim iDOW      ' Day Of Week that month starts on
Dim iCurrent  ' Variable we use to hold current day of month as we write table
Dim iPosition ' Variable we use to hold current position in table


' Get selected date.  There are two ways to do this.
' First check if we were passed a full date in RQS("date").
' If so use it, if not look for seperate variables, putting them togeter into a date.
' Lastly check if the date is valid...if not use today
If IsDate(Request.QueryString("date")) Then
 dDate = CDate(Request.QueryString("date"))
Else
 If IsDate(Request.QueryString("month") & "-" & Request.QueryString("day") & "-" & Request.QueryString("year")) Then
  dDate = CDate(Request.QueryString("month") & "-" & Request.QueryString("day") & "-" & Request.QueryString("year"))
 Else
  dDate = Date()
  ' The annoyingly bad solution for those of you running IIS3
  If Len(Request.QueryString("month")) <> 0 Or Len(Request.QueryString("day")) <> 0 Or Len(Request.QueryString("year")) <> 0 Or Len(Request.QueryString("date")) <> 0 Then
   Response.Write "The date you picked was not a valid date.  The calendar was set to today's date.<BR><BR>"
  End If
  ' The elegant solution for those of you running IIS4
  'If Request.QueryString.Count <> 0 Then Response.Write "The date you picked was not a valid date.  The calendar was set to today's date.<BR><BR>"
 End If
End If

'Now we've got the date.  Now get Days in the choosen month and the day of the week it starts on.
iDIM = GetDaysInMonth(Month(dDate), Year(dDate))
iDOW = GetWeekdayMonthStartsOn(dDate)

%>
<!-- Outer Table is simply to get the pretty border-->
<TABLE BORDER=10 CELLSPACING=0 CELLPADDING=0>
<TR>
<TD>
<TABLE BORDER=1 CELLSPACING=0 CELLPADDING=1 BGCOLOR=#99CCFF>
 <TR>
  <TD BGCOLOR=#000099 ALIGN="center" COLSPAN=7>
   <TABLE WIDTH=100% BORDER=0 CELLSPACING=0 CELLPADDING=0>
    <TR>
     <TD ALIGN="right"><A HREF="./calendar.asp?date=<%= SubtractOneMonth(dDate) %>"><FONT COLOR=#FFFF00 SIZE="-1">&lt;&lt;</FONT></A></TD>
     <TD ALIGN="center"><FONT COLOR=#FFFF00><B><%= MonthName(Month(dDate)) & "  " & Year(dDate) %></B></FONT></TD>
     <TD ALIGN="left"><A HREF="./calendar.asp?date=<%= AddOneMonth(dDate) %>"><FONT COLOR=#FFFF00 SIZE="-1">&gt;&gt;</FONT></A></TD>
    </TR>
   </TABLE>
  </TD>
 </TR>
 <TR>
  <TD ALIGN="center" BGCOLOR=#0000CC><FONT COLOR=#FFFF00><B>Sun</B></FONT><BR><IMG SRC="./images/spacer.gif" WIDTH=60 HEIGHT=1 BORDER=0></TD>
  <TD ALIGN="center" BGCOLOR=#0000CC><FONT COLOR=#FFFF00><B>Mon</B></FONT><BR><IMG SRC="./images/spacer.gif" WIDTH=60 HEIGHT=1 BORDER=0></TD>
  <TD ALIGN="center" BGCOLOR=#0000CC><FONT COLOR=#FFFF00><B>Tue</B></FONT><BR><IMG SRC="./images/spacer.gif" WIDTH=60 HEIGHT=1 BORDER=0></TD>
  <TD ALIGN="center" BGCOLOR=#0000CC><FONT COLOR=#FFFF00><B>Wed</B></FONT><BR><IMG SRC="./images/spacer.gif" WIDTH=60 HEIGHT=1 BORDER=0></TD>
  <TD ALIGN="center" BGCOLOR=#0000CC><FONT COLOR=#FFFF00><B>Thu</B></FONT><BR><IMG SRC="./images/spacer.gif" WIDTH=60 HEIGHT=1 BORDER=0></TD>
  <TD ALIGN="center" BGCOLOR=#0000CC><FONT COLOR=#FFFF00><B>Fri</B></FONT><BR><IMG SRC="./images/spacer.gif" WIDTH=60 HEIGHT=1 BORDER=0></TD>
  <TD ALIGN="center" BGCOLOR=#0000CC><FONT COLOR=#FFFF00><B>Sat</B></FONT><BR><IMG SRC="./images/spacer.gif" WIDTH=60 HEIGHT=1 BORDER=0></TD>
 </TR>
<%
' Write spacer cells at beginning of first row if month doesn't start on a Sunday.
If iDOW <> 1 Then
 Response.Write vbTab & "<TR>" & vbCrLf
 iPosition = 1
 Do While iPosition < iDOW
  Response.Write vbTab & vbTab & "<TD>&nbsp;</TD>" & vbCrLf
  iPosition = iPosition + 1
 Loop
End If

' Write days of month in proper day slots
iCurrent = 1
iPosition = iDOW
Do While iCurrent <= iDIM
 ' If we're at the begginning of a row then write TR
 If iPosition = 1 Then
  Response.Write vbTab & "<TR>" & vbCrLf
 End If
 
 ' If the day we're writing is the selected day then highlight it somehow.
 If iCurrent = Day(dDate) Then
  Response.Write vbTab & vbTab & "<TD BGCOLOR=#00FFFF><FONT SIZE=""-1""><B>" & iCurrent & "</B></FONT><BR><BR></TD>" & vbCrLf
 Else
  Response.Write vbTab & vbTab & "<TD><A HREF=""./calendar.asp?date=" & Month(dDate) & "-" & iCurrent & "-" & Year(dDate) & """><FONT SIZE=""-1"">" & iCurrent & "</FONT></A><BR><BR></TD>" & vbCrLf
 End If
 
 ' If we're at the endof a row then write /TR
 If iPosition = 7 Then
  Response.Write vbTab & "</TR>" & vbCrLf
  iPosition = 0
 End If
 
 ' Increment variables
 iCurrent = iCurrent + 1
 iPosition = iPosition + 1
Loop

' Write spacer cells at end of last row if month doesn't end on a Saturday.
If iPosition <> 1 Then
 Do While iPosition <= 7
  Response.Write vbTab & vbTab & "<TD>&nbsp;</TD>" & vbCrLf
  iPosition = iPosition + 1
 Loop
 Response.Write vbTab & "</TR>" & vbCrLf
End If
%>
</TABLE>
</TD>
</TR>
</TABLE>

<BR>

<TABLE BORDER=0 CELLSPACING=0 CELLPADDING=0><TR><TD ALIGN="center">
<FORM ACTION="./calendar.asp" METHOD=GET>
<SELECT NAME="month">
 <OPTION VALUE=1>January</OPTION>
 <OPTION VALUE=2>February</OPTION>
 <OPTION VALUE=3>March</OPTION>
 <OPTION VALUE=4>April</OPTION>
 <OPTION VALUE=5>May</OPTION>
 <OPTION VALUE=6>June</OPTION>
 <OPTION VALUE=7>July</OPTION>
 <OPTION VALUE=8>August</OPTION>
 <OPTION VALUE=9>September</OPTION>
 <OPTION VALUE=10>October</OPTION>
 <OPTION VALUE=11>November</OPTION>
 <OPTION VALUE=12>December</OPTION>
</SELECT>
<SELECT NAME="day">
 <OPTION VALUE=1>1</OPTION>
 <OPTION VALUE=2>2</OPTION>
 <OPTION VALUE=3>3</OPTION>
 <OPTION VALUE=4>4</OPTION>
 <OPTION VALUE=5>5</OPTION>
 <OPTION VALUE=6>6</OPTION>
 <OPTION VALUE=7>7</OPTION>
 <OPTION VALUE=8>8</OPTION>
 <OPTION VALUE=9>9</OPTION>
 <OPTION VALUE=10>10</OPTION>
 <OPTION VALUE=11>11</OPTION>
 <OPTION VALUE=12>12</OPTION>
 <OPTION VALUE=13>13</OPTION>
 <OPTION VALUE=14>14</OPTION>
 <OPTION VALUE=15>15</OPTION>
 <OPTION VALUE=16>16</OPTION>
 <OPTION VALUE=17>17</OPTION>
 <OPTION VALUE=18>18</OPTION>
 <OPTION VALUE=19>19</OPTION>
 <OPTION VALUE=20>20</OPTION>
 <OPTION VALUE=21>21</OPTION>
 <OPTION VALUE=22>22</OPTION>
 <OPTION VALUE=23>23</OPTION>
 <OPTION VALUE=24>24</OPTION>
 <OPTION VALUE=25>25</OPTION>
 <OPTION VALUE=26>26</OPTION>
 <OPTION VALUE=27>27</OPTION>
 <OPTION VALUE=28>28</OPTION>
 <OPTION VALUE=29>29</OPTION>
 <OPTION VALUE=30>30</OPTION>
 <OPTION VALUE=31>31</OPTION>
</SELECT>
<SELECT NAME="year">
 <OPTION VALUE=1990>1990</OPTION>
 <OPTION VALUE=1991>1991</OPTION>
 <OPTION VALUE=1992>1992</OPTION>
 <OPTION VALUE=1993>1993</OPTION>
 <OPTION VALUE=1994>1994</OPTION>
 <OPTION VALUE=1995>1995</OPTION>
 <OPTION VALUE=1996>1996</OPTION>
 <OPTION VALUE=1997>1997</OPTION>
 <OPTION VALUE=1998>1998</OPTION>
 <OPTION VALUE=1999>1999</OPTION>
 <OPTION VALUE=2000 SELECTED>2000</OPTION>
 <OPTION VALUE=2001>2001</OPTION>
 <OPTION VALUE=2002>2002</OPTION>
 <OPTION VALUE=2003>2003</OPTION>
 <OPTION VALUE=2004>2004</OPTION>
 <OPTION VALUE=2005>2005</OPTION>
 <OPTION VALUE=2006>2006</OPTION>
 <OPTION VALUE=2007>2007</OPTION>
 <OPTION VALUE=2008>2008</OPTION>
 <OPTION VALUE=2009>2009</OPTION>
 <OPTION VALUE=2010>2010</OPTION>
</SELECT>
<BR>
<INPUT TYPE="submit" VALUE="Show This Date on the Calendar!">
</FORM>
</TD></TR></TABLE>

2008/02/21 15:10 2008/02/21 15:10

데이타베이스를 사용하신다면 쿼리를 이용하시는게 훨씬 간단하고 Performance 또한 좋습니다.

하지만 순수하게 ASP내에서 문자열 길이를 일정하게 유지하셔야  한다면 다음 함수를 써보세요.


<%
                 
     
function LeftCut(strString, intCut)

   

    dim intPos, chrTemp, strCut, intLength

    '문자열 길이 초기화
    intLength = 0
    intPos = 1


   
    '문자열 길이만큼 돈다
    do while ( intPos <= Len( strString ))

      

     '문자열을 한문자씩 비교한다
        chrTemp = ASC(Mid( strString, intPos, 1))

       
        if chrTemp < 0 then '음수값(-)이 나오면 한글임
          strCut = strCut & Mid( strString, intPos, 1 )

          intLength = intLength + 2  '한글일 경우 문자열 길이를 2를 더한다
        else
          strCut = strCut & Mid( strString, intPos, 1 )           

          intLength = intLength + 1  '한글이 아닌경우 문자열 길이를 1을 더한다
        end If

       

        if intLength >= intCut  then
           exit do
        end if


        intPos = intPos + 1
 

    Loop

   

    '리턴값

    LeftCut = strCut


end function




Response.Write LeftCut("2010-12-10 미래에서 잘라낼 길이", 12) & "<br>"

Response.Write LeftCut("미래 2010-12-10 문자열중 잘라낼 길이", 12)


%>

2008/02/21 15:10 2008/02/21 15:10

<%

function stringCount(strString)

   

    dim intPos, chrTemp, intLength

    '문자열 길이 초기화
    intLength = 0


    intPos = 1
   
    '문자열 길이만큼 돈다
    while ( intPos <= Len( strString ) )

     

        '문자열을 한문자씩 비교한다
        chrTemp = ASC(Mid( strString, intPos, 1))

       
        if chrTemp < 0 then '음수값(-)이 나오면 한글임
           intLength = intLength + 2 '한글일 경우 2바이트를 더한다
        else
           intLength = intLength + 1 '한글이 아닐경우 1바이트를 더한다
        end If


        intPos = intPos + 1

    wend


    stringCount = intLength


end function


Response.Write stringCount("이글의 문자열 길이는?")

%>

2008/02/21 15:10 2008/02/21 15:10

<html>
<script language="javascript">

function messageChk( message )
{
   
    alert( '메시지는 '+message+ ' 입니다' );
 
}

</script>
<body>
<%


  dim strMessage, nCount

  nCount = Request("nCount")
 
  if nCount = "" then
  nCount = 1
  else
  nCount = 2
  end if


  select case nCount
  case 1 strMessage = "1번메시지"
  case 2 strMessage = "2번메시지"
  end select


%>
<a href="javascript:messageChk('<%=strMessage%>')">&nbsp;클릭하세요!!!</a>
</body>
</html>

2008/02/21 15:09 2008/02/21 15:09

문자열을 받아서 난수로 문자를 조합해서 값을 되돌려 주는 함수입니다.



<%


   Function MyRandom( couponLength, couponString )
 

  Const defaultString = "ABCDEFGHIJKLMNOPQRSTUVXYZ0123456789"
  Dim nCount, sRet, nNumber, nLength
 
  Randomize '초기화

  If couponString = "" Then
  couponString = defaultString  
  End If
 

  nLength = Len( couponString )
 
  For nCount = 1 To couponLength
   nNumber = Int((nLength * Rnd) + 1)
   sRet = sRet & Mid( couponString, nNumber, 1 )
  Next
 '리턴값
 

  MyRandom = sRet

  End Function

%>



<%
Response.Write "쿠폰넘버: " & MyRandom( 15, "" )
%>

2008/02/21 15:09 2008/02/21 15:09

<%


Sub LinkChk( linkSiteUrl )

    Response.Buffer = True
    On Error Resume Next

    Set objXML = Server.CreateObject("Microsoft.XMLHTTP")
    objXML.Open "Get", linkSiteUrl , False
    objXML.Send
   
 If Err.Number = 0 Then
        response.write "정상"
    Else
        response.write "에러"
    End If
    Response.Flush
    Err.Clear

End Sub

LinkChk( http://www.test.co.kr )


%>

2008/02/21 15:08 2008/02/21 15:08

==========  런타임 에러값=====================


800a0005 유효하지 않은 프로시저 호출이나 함수

800a0006 오버플로우

800a0007 메모리가 초과되었습니다.

800a0009 아래첨자가 범위를 초과했습니다.

800a000a 이 배열은 고정되었거나 임시적으로 락이 걸렸습니다.

800a000b 0으로 나눗셈을 했습니다.

800a000d 타입이 일치하지 않습니다.

800a000e 문자열 범위를 초과했습니다.

800a0011 요청된 작업을 실행할 수 없습니다.

800a001c 스택 공간을 초과했습니다.

800a0023 sub나 function이 정의되지 않았습니다.

800a0030 dll을 로드할 때 에러가 발생했습니다.

800a0033 내부에러

800a0034 적절하지 않은 파일 이름이나 번호

800a0035 파일을 찾을 수 없습니다.

800a0036 파일 모드가 적절하지 않습니다.

800a0037 파일이 이미 열려 있습니다.

800a0039 디바이스 i/o 에러

800a003a 파일이 이미 존재합니다.

800a003d 디스크가 다 찼습니다.

800a003e 입력이 파일의 끝부분을 지나쳤습니다.

800a0043 파일들이 너무 많습니다.

2008/02/21 15:08 2008/02/21 15:08

<html>
<body>
<%

  Dim linkSite(5)
  linkSite(1) = "http://www.naver.com"
  linkSite(2) = "http://www.daum.net"
  linkSite(3) = "http://www.empas.com"
  linkSite(4) = "http://www.yahoo.co.kr"
  linkSite(5) = "http://www.nate.com"


  randomize()
  r=Int((5 * Rnd) + 1) '1부터 5까지 난수값을 생성


  response.write "<a href='" & linkSite(r) & "' target=blank>웹마당(http://cafe.naver.com/webmadangnet.cafe)</a>"

%>
</body>
</html>

2008/02/21 15:08 2008/02/21 15:08

랜덤링크

프로그래밍/Asp 2008/02/21 15:07
<html>
<body>
<%
randomize()
r=rnd()
if r>0.5 then
  response.write("<a href='http://www.naver.com'>웹마당!</a>")
else
  response.write("<a href='http://www.yahoo.co.kr'>웹마당!</a>")
end if
%>
</body>
</html>
2008/02/21 15:07 2008/02/21 15:07

strReverse 함수를 이용한 문자열 거꾸로 뒤집기 입니다.


<html>
<body>
<%
strString = "안녕하세요!"
response.write(strReverse(strString))
%>
</body>
</html>

2008/02/21 15:07 2008/02/21 15:07

이번팁은 네이버 검색중에 필요하신 팁 같아서 퍼왔습니다.

유용하게 쓰세요!!


<%@ LANGUAGE="VBSCRIPT"%>
<%

    strIP = Request.ServerVariables("REMOTE_ADDR")
    strMac = GetMACAddress(strIP)
    strHost = Request.ServerVariables("REMOTE_HOST")

   

    function GetMACAddress(strIP)

   

    Set net = Server.CreateObject("wscript.network")
    Set sh = Server.CreateObject("wscript.shell")
    sh.run "%comspec% /c nbtstat -A " & strIP & " > c:\" & strIP & ".txt",0,true

    Set sh = nothing
   

    Set fso = createobject("scripting.filesystemobject")
    Set ts = fso.opentextfile("c:\" & strIP & ".txt")

    macaddress = null

   

    Do While Not ts.AtEndOfStream

      data = ucase(trim(ts.readline))
      if instr(data,"MAC ADDRESS") Then
      macaddress = trim(split(data,"=")(1))
      Exit Do
      End if

   loop

  

   ts.close

   Set ts = nothing

   fso.deletefile "c:\" & strIP & ".txt"
   Set fso = nothing

   GetMACAddress = macaddress

   End function


%>

<body>

<%Response.Write("Your IP is : " & strIP & "" & vbcrlf)%>
<%Response.Write("Your MAC is : " & strMac & vbcrlf)%>

</body>


2008/02/21 15:06 2008/02/21 15:06

<%
  temp1 = 20
  temp2 = 30
  temp3 = 50


  i = 1 
  j = 2
  k= 3


  addTemp1 = Eval("temp" & i) 'temp1의 값을 저장
  addTemp2 = Eval("temp" & j) 'temp2의 값을 저장
  addTemp3 = Eval("temp" & k) 'temp3의 값을 저장

  Response.Write addTemp1
  Response.Write addTemp2
  Response.Write addTemp3

%>

2008/02/21 15:06 2008/02/21 15:06

<%

   Function MyRandom( couponLength )


     Dim  couponValue(35)
     couponValue(0)   = "A"
     couponValue(1)   = "B"
     couponValue(2)   = "C"
     couponValue(3)   = "D"
     couponValue(4)   = "E"
     couponValue(5)   = "F"
     couponValue(6)   = "G"
     couponValue(7)   = "H"
     couponValue(8)   = "I"
     couponValue(9)   = "J"
     couponValue(10)  = "K"
     couponValue(11)  = "L"
     couponValue(12)  = "M"
     couponValue(13)  = "N"
     couponValue(14)  = "O"
     couponValue(15)  = "P"
     couponValue(16)  = "Q"
     couponValue(17)  = "R"
     couponValue(18)  = "S"
     couponValue(19)  = "T"
     couponValue(20)  = "U"
     couponValue(21)  = "V"
     couponValue(22)  = "W"
     couponValue(23)  = "X"
     couponValue(24)  = "Y"
     couponValue(25)  = "Z"
     couponValue(26)  = "0"
     couponValue(27)  = "1"
     couponValue(28)  = "2"
     couponValue(29)  = "3"
     couponValue(30)  = "4"
     couponValue(31)  = "5"
     couponValue(32)  = "6"
     couponValue(33)  = "7"
     couponValue(34)  = "8"
     couponValue(35)  = "9"


    'ex) idvalue = Int(( 100-1+1 )*Rnd + 1 )  '1부터 100까지의 난수발생
    'ex) idvalue = Int((50-2+1 ) *Rnd+2 ) '2부터 50까지의 난수발생
    'ex) idvalue = Int((35-0+1 )*Rnd+0 ) '0부터 35까지의 난수 발생

    
    'couponLength 길이 만큼의 쿠폰번호를 만든다
     For i=1 To couponLength
     '난수 발생 초기화
      Randomize
      idvalue=Int((35- 0 + 1) * Rnd + 0)
      couponNo = couponNo & couponValue(idvalue)
     Next

    

     MyRandom = couponNo '리턴값

   End Function


   Response.Write MyRandom( 16 ) '16자리의 쿠폰번호를 생성한다

 %>

2008/02/21 15:06 2008/02/21 15:06

// 1 에서 50까지의 A개수 만큼 난수를 출력해줌


<%
Function RandomEA(EA)
Dim min, max, i

min=1 : max=50

Randomize
Response.Write min & "부터 ~" & max &  "까지 &nbsp;" & EA & "개의 난수 발생 <br><br>"
For i=1 to EA
     Response.Write Int((max-min+1) * Rnd + min) & "<br>" //난수공식
Next
end function
%>



<% if request("EA") = "" then %>
<form name = "fm" method = "post" action = "URL">
* 난수를 발생시킬 갯수 : <INPUT TYPE="text" NAME="EA"><INPUT TYPE="submit" value="전송">
</form>
<% else %>
<form name = "fm" method = "post" action = "111.html">
* 난수를 발생시킬 갯수 : <INPUT TYPE="text" NAME="EA"><INPUT TYPE="submit" value="전송">
<% RandomEA(request("EA")) %>
<% end if %>

2008/02/21 15:05 2008/02/21 15:05

<%

   Dim objFSO, FileName
  
   set objFSO = Server.CreateObject("scripting.FileSystemObject")
 
   '지정해 준 경로로 readme.txt 파일을 만든다. 만든 파일은 빈 파일이다.
   set FileName = objFSO.CreateTextFile("C:\readme.txt", true)
 
   'Write와 WriteLine 메서드는 모두 텍스트를 열린 파일에 추가하지만 WriteLine은 후행 줄 바꿈 문자도 추가합니다.
   FileName.WriteLine("웹마당에 카페의 멤버가 되세요!!!")
   FileName.WriteLine("언제나 환영합니다.!!")

  
   'FileName.Write ("웹마당 까페의 멤버가 되세요")

   ' Write three newline characters to the file.
  
   FileName.Close
 
%>

2008/02/21 15:05 2008/02/21 15:05

<%
   

    Dim objFSO, objOpenedFile, Filepath, sRead
    Const ForReading = 1, ForWriting = 2, ForAppending = 8
   

    Const FileName = "\readme.txt"

   

    '파일시스템 객체를 생성한다
    Set objFSO = CreateObject("Scripting.FileSystemObject")

   

    Filepath = Server.MapPath(Filename)

    '파일이 존재하면
    If objFSO.FileExists(Filepath) Then


      Response.Write "<pre>"

      Set objOpenedFile = objFSO.OpenTextFile(Filepath, ForReading, False, TristateUseDefault)

   

     '라인단위로 읽는다
     Do While Not objOpenedFile.AtEndOfStream
 
     sRead = objOpenedFile.readline
     sRead = sRead & vbCRLF
 
     Response.write sRead
     Loop
 
    Response.Write "</pre>"
    Set TextStream = nothing
   
    Else


    Response.Write "파일명 " & Filename & " 파일이 없습니다."

                   

    End If

   

   Set objFSO = nothing
%>

2008/02/21 15:05 2008/02/21 15:05

<%
  Dim objFSO, objOpenedFile, Filepath, sRead
  Const ForReading = 1, ForWriting = 2, ForAppending = 8
 

  Const FileName = "\readme.txt"

  '파일시스템 객체를 생성한다
  Set objFSO = CreateObject("Scripting.FileSystemObject")

   Filepath = Server.MapPath(Filename)


  '파일이 존재하면
  If objFSO.FileExists(Filepath) Then


     '함수원형 object.OpenTextFile(filename[, iomode[, create[, format]]])
     'TristateUseDefault = -2, TristateTrue = -1, TristateFalse = 0
     '-2 시스템 기본값을 이용하여 파일을 연다, -1 유니코드 형식으로 파일을 연다,  0 ASCII 형식으로 파일을 연다
 

      Set objOpenedFile = objFSO.OpenTextFile(Filepath, ForReading, False, TristateUseDefault)
 
 

      sRead     = objOpenedFile.ReadAll  'ReadAll 메서드는 열린 파일 전체를 읽는다
      'sRead     = objOpenedFile.ReadLine 'ReadLine 메서드는 줄 바꿈 문자는 제외하고 줄 전체를 읽는다
      'sRead     = objOpenedFile.Read(4)  'Read 메서드는 열린 파일의 현재 위치에서 지정된 수의 문자를 읽는다
 

      Response.write "<pre>" & sRead & "</pre>"
      objOpenedFile.Close
      Set objOpenedFile = nothing
 
  Else

    

     Response.Write "파일명 " & Filename & " 파일이 없습니다."

                   

  End If

   

  Set objFSO = nothing
%>

2008/02/21 15:04 2008/02/21 15:04