[ASP] 원격 웹서버에 파일이 존재하는지 체크하는 함수 HttpFileExists

지정 URL에 해당하는 파일이 존재하는지 체크하는 HttpFileExists 함수를 만들어 봤다. 파일이 존재하는 경우 파일의 내용을 모두 가지고 오는 방법은 파일의 용량이 큰 경우 성능에 문제가 된다. 성능향상을 위해서 If-Modified-Since 헤더를 이용, 존재 여부만 파악하는 방법을 썼다.

<%
Option Explicit

If HttpFileExist("http://www.ecplaza.net/images/1pixel.gif") Then
    Response.Write "File exists"
Else
    Response.Write "File doesn't exist"
End If

Function HttpFileExist(sUrl)
    Dim oHttp

    set oHttp = Server.CreateObject("MSXML2.ServerXMLHTTP")
    oHttp.Open "GET", sUrl, False

    oHttp.setRequestHeader "If-Modified-Since", DateToHTTPDate(DateAdd("h", -1, Now))
    oHttp.Send ""

    If oHttp.status < 400 Then
        HttpFileExist = True
    Else
        HttpFileExist = False
    End If

    Set oHttp = Nothing
End Function

''
' Converts date (19991022 11:08:38)
' to http form (Fri, 22 Oct 1999 12:08:38 GMT)
Function DateToHTTPDate(ByVal OleDATE)
    Const GMTdiff = #09:00:00#
    OleDATE = OleDATE - GMTdiff
    DateToHTTPDate = engWeekDayName(OleDATE) & _
        ", " & Right("0" & Day(OleDATE),2) & " " & engMonthName(OleDATE) & _
        " " & Year(OleDATE) & " " & Right("0" & Hour(OleDATE),2) & _
        ":" & Right("0" & Minute(OleDATE),2) & ":" & Right("0" & Second(OleDATE),2) & " GMT"
End Function

Function engWeekDayName(dt)
    Dim Out
    Select Case WeekDay(dt,1)
        Case 1:Out="Sun"
        Case 2:Out="Mon"
        Case 3:Out="Tue"
        Case 4:Out="Wed"
        Case 5:Out="Thu"
        Case 6:Out="Fri"
        Case 7:Out="Sat"
    End Select
    engWeekDayName = Out
End Function

Function engMonthName(dt)
    Dim Out
    Select Case Month(dt)
        Case 1:Out="Jan"
        Case 2:Out="Feb"
        Case 3:Out="Mar"
        Case 4:Out="Apr"
        Case 5:Out="May"
        Case 6:Out="Jun"
        Case 7:Out="Jul"
        Case 8:Out="Aug"
        Case 9:Out="Sep"
        Case 10:Out="Oct"
        Case 11:Out="Nov"
        Case 12:Out="Dec"
    End Select
    engMonthName = Out
End Function

%>

관련글 : ASP에서 MSXML2.ServerXMLHTTP 사용하여 원격 웹서버 내용 갖고 오기

띄어쓰기 하지 않은 영어문장 줄바꿈 하는 방법

영문을 띄어쓰기 없이 길게 쓸경우 줄바꿈이 안되는데 모든 부라우져에서 사용가능한 해결방법은 없는 것 같다.

word-break 스타일은 IE에서만 사용할 수 있다.
style=”word-break:break-all”
특수문자를 제외하고 강제 줄바꿈

style=”word-wrap:break-word”
특수문자를 포함하고 강제 줄바꿈

style=”word-break:nowrap”
width를 지정하였지만 개행이 되지 않기를 원할때 사용.

style=”word-break:keep-all”
텍스트가 한글일 경우 띄워쓰기 기준으로 개행된다.

 
* FF3.0 에서는 width 도 넣어줘야 한다.

*텍스트제한(강제 줄바꿈방지; 텍스트 길이제한;)

width:110px; overflow:hidden; text-overflow:ellipsis; white-space:nowrap;

ASP에서 CodePage 고찰

ASP에서 CodePage 설정에 따라 문자열이 어떻게 처리가 되는지를 살펴보자.

<%@ CodePage=65001 Language="VBScript"%>

<%  
Option Explicit

Dim sFileName, sBuffer

sFileName = "utf8.txt"  
sBuffer = ReadFromTextFile(sFileName, "utf-8")  
ShowStringInfo sBuffer

'read utf-8  
Function ReadFromTextFile (sFile, sCharSet)  
    Dim oStream, str

    Set oStream = Server.CreateObject("adodb.stream")  
    oStream.Type = 2 'for text type  
    oStream.Mode = 3 'adModeWrite  
    oStream.Charset = sCharSet  
    oStream.Open  
    oStream.LoadFromFile server.MapPath(sFile)  
    str = oStream.ReadText  
    oStream.Close  
    Set oStream=nothing

    ReadFromTextFile=str  
End Function

Function ShowStringInfo(s)  
    Dim sHex

    sHex = GetHexString(s)  
    Response.Write s & ", Length=" & Len(s) & ", Hex=" & sHex  
End Function

Function GetHexString(s)  
    Dim i  
    Dim char  
    Dim result

    result = "0x"  
    For i = 1 To Len(s)  
        char = AscW(Mid(s, i, 1))  
        result = result & "[" & hex(char) & "]"  
    Next

    GetHexString = result  
End Function

%>    

위의 결과는

한글.txt, Length=6, Hex=0x\[D55C\]\[AE00\]\[2E\]\[74\]\[78\]\[74\]  

만약 CodePage를 949로 바꾸었다면

한글.txt, Length=6, Hex=0x\[D55C\]\[AE00\]\[2E\]\[74\]\[78\]\[74\]  

브라우져로 보면 “한글.txt”가 같아 보이지만 전자는 UTF-8 코드이고, 후자는 CP949이다.

ReadFromTextFile에서 리턴되는 문자열은 CodePage에 상관없이 유니코드페이지가 사용되고, Response.Write 하면서 CodePage에 따라서 문자열 변환이 이루어 진다.