연구_고민/웹2009.07.20 17:38

JQuery 사용해보기.

프로토타입, 도조 등 많은 비슷한 스크립트 라이브러리들이 있지만 요세 대세? 가벼우면서 막강한 JQuery를 사용해보자.

각 포털사이트에서 JQuery를 검색해보면 JQuery는 홈페이지에서 다운로드 할 수 있다.

 

해당 엘리먼트 접근하기

일반 : document.getElementById("id");

JQuery : $("#id");

   - 엘리먼트의 ID 접근시 #, class 접근시 .

 

해당 엘리먼트의 값 접근하기

일반 : document.getElementById("id").value;

JQuery : $("#id").val();

   - 엘리먼트의 값을 대입하고 싶다면 $("#id").val("값");

 

해당 엘리먼트의 개체를 비교하여 true/false를 알려주는 메소드

일반 : document.getElementById("id").checked;

JQuery : $("#id").is(':checked');

   - 체크박스 및 라디오버튼에 체크상태인지를 boolean 형으로 반환

   - $("#id").is(".orange, .blue, lightblue");  id의 class 속성중 orange, blue, lightblue 가 하나라도 있으면 true

 

해당 엘리먼트의 CSS 속성 부여하기

일반 : document.getElementById("id").style.border = "4px solid yellow");

JQuery : $("#id").css("border", "4px solid yellow");

    - 첫번째인자는 속성이름, 두번째인자는 속성값을 넣으면 된다.

 

해당 엘리먼트의 display 속성 부여하기

일반 : document.getElementById("id").style.display = "none";

JQuery : $("#id").hide(); , $("#id").show();

    - hide 숨김, show 보임, hide, show 안에 인자를 slow, normal, fast 중 하나로 보임숨김의 속도를 조절 할 수 있다.

    - 아니면 수치로 1000분의 1초로 할 수 있음. show(950)

 

체크박스의 전체선택 / 해제

일반

function selectAll() {
    var blnChecked = document.getElementById("allCheck").checked;      // 전체선택 체크박스의 상태
    checkBoxes = document.getElementsByName('delCheck');                // 태그이름중 delCheck인 엘리먼트를 배열로 얻음

 

    for(var i=0; i<checkBoxes.length; i++) {
     objCheck = checkBoxes[i];
        if (objCheck) {
            objCheck.checked = blnChecked;
  }
    }
}

 

JQuery

$(document).ready(function() {                    
  $('#allCheck').click(function() {                    // 전체선택 체크박스 선택 이벤트
    if($('#allCheck').is(':checked')){                // 전체선택 체크박스 체크상태
      $('.delCheck').each(function(){                // 여러개의 체크박스 의 class 속성의 값이 delCheck 인걸 가져옴
        $(this).attr('checked', 'checked');           // 가져온 체크박스를 checked
        });
     }else{                                                     // 전체선택 체크박스 미체크상태
       $('.delCheck').each(function(){
       $(this).attr('checked','');                         // 가져온 체크박스를 미체크상태로
       });
     }
   }); 
});

 

엘리먼트의 존재여부를 체크하기

JQuery : if($("#id").length > 0)     

    - 엘리먼트로 존재하지 않은 경우에도 빈 객체로 반환하기 때문에 JQuery는.. 객체의 길이를 체크해서 존재여부를 체크한다

신고
Posted by naearu

Function php_ceil(number)
    If number Mod 1 <> 0 Then
        number = number - (number Mod 1) +1
    End If
    php_ceil = number
End Function

 

제길 이런거까지 만들어서 써야 하는거야?

 

하는김애 내림 함수도 ㄱ-;;

 

Function php_floor(number)
    If number Mod 1 <> 0 Then
        number  = number - (number Mod 1)
    End If
    php_floor = number
End Function

신고
Posted by naearu

http://www.tandol.pe.kr/study/?cmd=prt&lecture=asp&num=6

ASP 기본 개체

▶ Request

클라이언트로부터 무언가를 받아들일 때 사용하는 개체로 QueryString, Form, ServerVariables,Cookies등이 있다.
이미 사용한 QueryString, Form과 브라우져로부터 전송되는 Cookies는 제외하고 ServerVariables만 설명한다.

ServerVariables : 사용자의 접속환경을 알게 해주는 컬렉션이다. 주로 접속지의 IP주소나, 브라우져 종류등을 알아내기 위해 사용한다. 중요 환경 변수는 다음 표와 같다.

환경변수명 설명
CONTENT_LENGTH 보내진 바이트수
CONTENT_TYPE Request가 POST타입일때 컨텐츠 타입
보통 application/x-www-form-urlencode이다
GATEWAY_INTERFACE CGI버전
LOCAL_ADDR 서버의 IP 주소
PATH_INFO 서버 파일 웹 경로
PATH_TRANSLATED 서버 파일 실제 경로
QUERY_STRING 주소줄의 ?뒤의 값
REMOTE_ADDR 클라이언트 IP주소
REMOTE_HOST 클라이언트 hostname(ip주소)
REMOTE_USER 서버에 인증받은 사용자 ID명
REQUEST_METHOD 서버로 전송된 Method
SCRIPT_NAME 실행할 애플리케이션, 스크립트이름
SERVER_NAME 서버이름 혹은 주소
SERVER_PORT 서버 포트
SERVER_PORT_SECURE Encrypt된 포트의 경우 1로된다.
SERVER_PROTOCOL 프로토콜과 버젼
SERVER_SOFTWARE 웹서버 어플리케이션이름과 버젼
URL 주소줄의 내용
HTTP_ACCEPT 브라우져에서 받아들일수 있는 MIME타입
HTTP_ACCEPT_LANGUAGE 브라우져 사용 언어
HTTP_HOST tandol.pe.kr
HTTP_USER_AGENT 브라우져종류와 버젼등
HTTP_COOKIE 쿠키값


 

모든 환경변수값을 출력하는 프로그램       [실행결과보기]
<html>
<head>
<title>
REQUEST
개체 </title>
</head>
<body>
<table
border=1>
<tr><th>
환경변수</th><th></th>
<%
for each item in request.servervariables
    for i=1 to request.servervariables(item).count
        response.write "<tr><td>"
        response.write item & "</td><td>"
        a = request.servervariables(item)(i)
        if a="" then a="&nbsp;"
        response.write a & "</td></tr>"
    next
next

%>
</table>
</body>
</html>
환경변수 사용예      [실행결과보기]
<html>
<head>
<title>
환경변수 사용예 </title>
</head>
<body>

당신의 웹 브라우져는
<%=request.ServerVariables("HTTP_USER_AGENT")%>
입니다.<br>
당신의 IP주소는
<%=request.ServerVariables("REMOTE_HOST")%>
입니다.
</body>
</html>

▶Response

서버에서 클라이언트로 정보를 전달할때 사용하는 개체로서 지난 강의 때 이미 Write와 redirect메소드를 이용 하였다. 주로 이용하는 메소드,속성, 컬렉션을 정리하면 다음과 같다.

컬렉션
Cookies 브라우져로 전송도는 모든 쿠키값
속성(프로퍼티)
buffer 페이지가 완성될때까지 버퍼할것인지 지정
charset 문자셑 - 헤드에 덧붙여진다.
ContentType 컨텐츠 형식 기본값은 text/html이다.
Expires 브라우져에서 캐시완료 기간
메소드
addHeader http헤드를 추가 혹은 변경
clear 버퍼된값을 삭제한다. buffer=true가 되어 있어야 한다
end 스크립트수행을 중단한다.
flush 버퍼의 값을 즉시 전송한다. buffer설정되어 있어야 한다.
reDirect 다른url로 이동
write 클라이언트로 전송

▶Application

서버의 모든 사용자가 전역변수 처럼 공유하는 개체이다. 메소드에는 lock과 unlock이 있다.

Application개체를 이용한 페이지 카운트      [실행결과보기]
<html>
<head>
<title>
읽은 회수 카운트 </title>
</head>
<body>

<%
application.lock
application("ReadCnt") = application("ReadCnt")+1
application.unlock
%>
현재 문서를 읽은 회수는
<%=application("ReadCnt")%>
</body>
</html>

▶Session

현재 서버에 접속된 사용자가 전역변수처럼 사용하는 개체이다.

Timeout속성은 세션의 유지시간으로 분단위이다. 예) session.timeout=10' 세션시간을 10분으로 설정
SessionID는 사용자마다 설정되는 ID로서 사용자정보를 따로 관리할때 사용된다.

 주로 로그온상태등 접속자의 상태를 기억하는 용도로 사용 된다.

간단히 만들어본 로그온 페이지      [실행결과보기]
sesnlogin.asp
<html>
<head>
<title>
Session
이용 로그인 상태 표시 </title>
</head>
<body>

<%
response.expires=0 '
웹브라우져의 캐시완료시간을 0으로 하여 항상 갱신을 한다.
s = session("Login")
if s="" then '
세션이 설정되지 않음
%>
<center>
<h2>
로그온 되어 있지 않습니다</h2>
<form
action="sesnlogin_ok.asp" method=post>
<table>
<tr><td>
ID</td><td><input type=text name=id size=20></td></tr>
<tr><td>
비밀번호</td><td><input type=password name=pwd size=20></td></tr>
</table>
<input
type=submit value="
로그인">
<input
type=button value="
취소 " onclick="history.back()">
</form>

임시로 넣어둔 idkim, park, choi이고 비밀번호는 1234
<%
else '
세션이 설정 되어 있음
%>
<h2><%=session("Login")%>(
)로 로그온 되었 습니다</h2>
<input
type=button value="
로그 아웃" onclick="location.href='sesnlogout.asp'">
<%
end if
%>
</body>
</html>
sesnlogin_ok.asp
<%
id = request.form("id")
pwd = request.form("pwd")

if id="kim" and pwd="1234" then
    session("Login")="
김씨성"
elseif id="park" and pwd="1234" then
    session("Login")="박씨성"
elseif id="choi" and pwd="1234" then
    session("Login")="최씨성"
else
    response.write "<script language='javascript'>"
    response.write "alert('잘못된 사용자이거나 비밀번호가 틀립니다');"
    response.write "history.back();"
    response.write "</script>"
    response.end
end if
response.redirect "sesnlogin.asp"
%>
sesnlogout.asp
<%
session("Login")=""
response.redirect "sesnlogin.asp"
%>

▶Server

서버의 컴포넌트 개체를 이용할 때 사용하는 CreateObject, 웹 가상경로를 실제 물리적 경로로 바꾸어주는 MapPath, 스크립트의 실행 시간을 조절해주는 ScriptTimeout등이 있다.

ex)
    set db = Server.CreateObject("ADODB.Connection")
    dbPath = Server.MapPath("sample.mdb")
    server.ScriptTimeout = 120 '
스크립트 실행 시간을 최대 120초로 설정

FilesystemObject 컴포넌트

서버의 Text 파일을 조작할 수 있도록 한다.

Set fs = server.CreateObject("Scripting.FileSystemObject")
Set a = fs.CreateTextFile("c:\testfile.txt", True)
a.WriteLine("
테스트입니다.")
a.Close

CreateObject 함수는 FileSystemObject 개체(fs)를 만들고, CreateTextFile 메서드에서는 파일을 TextStream 개체(a)로 만들고, WriteLine 메서드에서는 만들어진 텍스트 파일에 텍스트 한 줄을 작성한다. 끝으로 Close 메서드에서 버퍼를 비운 다음 해당 파일을 저장하고 닫는다.

FileSystemObject 개체의 메서드는 다음과 같다.

메서드 기능 결과값
CopyFile 원본, 대상[, 덮어 쓰기] 파일복사  
CopyFolder 원본, 대상[, 덮어 쓰기] 폴더복사  
CreateFolder(폴더 이름) 폴더 만들기  
CreateTextFile(파일 이름[, 덮어 쓰기]) 파일을 만들고 TextStream개체를 생성 TextStream 개체
DeleteFile filespec[, force] 파일삭제
force가 true이면 읽기전용 파일도 삭제된다.
 
DeleteFolder folderspec[, force] 폴더삭제
force가 true이면 읽기전용 폴더도 삭제된다.
 
FileExists(filespec) 파일 존재 여부 true/false
FolderExists(folderspec) 폴더 존재 여부 true/false
GetAbsolutePathName(pathspec) 정확한 경로명 구하기 문자열
GetBaseName(경로) 경로명에서 파일명만 추출 문자열
GetExtensionName(pathspec) 경로명에서 확장자만 추출 문자열
GetFile(filespec) 해당파일의 File 개체를 생성 File 개체
GetFileName(pathspec) 해당 경로의 파일명 구하기 문자열
GetFolder(folderspec) 해당 경로의 Folder 개체를 생성 Folder 개체
MoveFile 원본, 대상 파일 이동 및 이름 변경  
MoveFolder 원본, 대상 폴더 이동 및 이름 변경  
OpenTextFile(파일 이름, iomode) 파일을 열고 TextStream개체를 생성
iomode 기능
1 읽기전용
2 쓰기전용
8 추가용
TextStream 개체

TextStream개체의 메서드 및 속성

속성 및 메서드 기능 결과값
AtEndOfLine 파일 포인터가 TextStream 파일의 줄 끝 표식에 바로 접하여 있으면 참 true/false
AtEndOfStream 파일 포인터가 TextStream 파일 끝에 있으면 참 true/false
Close 파일 닫기  
Read(characters) 지정한 문자수만큼 읽기 문자열
ReadAll 모두 읽기 문자열
ReadLine 한 줄 읽기 문자열
Write(문자열) 지정한 문자열 저장  
WriteLine([문자열]) 지정한 문자열 저장하고 줄바꿈 문자 기록  

File/Folder개체문서읽기 -> 프로그래밍 -> VBScript 를 참조 할것

웹서버 Root의 Global.asa

웹서버의 Global.asa는 특수한 기능을 하는 파일 이다.

웹서버가 실행 할 때와 중단 할때, 사용자가 처음으로 접속할 때와 접속을 중단할 때 각각의 할 일 을 적을 수 있도록 고안 되었다.

PWS 사용자는 Global.asa변경 후 재 부팅을 해 주어야 제대로 작동 한다.

일반적인 구조는 다음과 같다.

Global.asa
<script language="VBScript" runAt="Server">
Sub Application_OnStart
'
이곳에는 웹서버가 시작할 때 실행할 스크립트를 작성한다
end sub

Sub Application_OnEnd
'
이곳에는 웹서버가 중단할 때 실행할 스크립트를 작성한다
end sub

Sub Session_OnStart
'
이곳에는 사용자가 처음 접속할 때 실행할 스크립트를 작성한다
end sub

Sub Session_OnEnd
'
이곳에는 사용자가 접속을 종료할 때 실행할 스크립트를 작성한다
end sub
</script>

방문자수 카운트 프로그램

앞의 Application개체를 이용하여 읽은 회수를 카운트 하는 스크립트에서는 두가지의 문제가 있다.

- 웹서버가 재부팅 하고나면 카운터값이 클리어 된다는 점
- 사용자가 새로 고침 버튼을 누르면 읽은 회수가 증가한다는 점

따라서 방문자 카운트로 작동 시키기 위해서는 특정 데이터 파일에 현재 카운트 한 값을 저장 해 두어야 하고
세션이 시작 될 때에만 - 즉 사용자가 접속을 할 때 -  카운트가 되어야 한다.

Global.asa의 Session_OnStart에서 이 두가지를 모두 실행하는 스크립트를 작성 해야 하고, 결과를 보는 페이지는 따로 작성해야 한다.

Web Server Root Directory 의 Global.asa (PWS 사용자는 저장 후 재부팅 필요함) 
<script language="VBScript" runAt="Server">
Sub Application_OnStart
'
이곳에는 웹서버가 시작할 때 실행할 스크립트를 작성한다
end sub

Sub Application_OnEnd
'
이곳에는 웹서버가 중단할 때 실행할 스크립트를 작성한다
end sub

Sub Session_OnStart
'
이곳에는 사용자가 처음 접속할 때 실행할 스크립트를 작성한다
    Set fs = server.CreateObject("Scripting.FileSystemObject")
    DataFile = Server.MapPath("/count.txt")
    Application.Lock '
여러사람이 동시접속 했을 때를 대비하여 잠금
    if not fs.FileExists(DataFile) then '처음으로 실행하여 파일이 존재하지 않으면
        set Stream = fs.CreateTextFile(DataFile)
        Stream.WriteLine("1")
        Application("Count") = 1
        Stream.close
    else
        set Stream = fs.OpenTextFile(DataFile, 1) '
읽기용으로 연다
        Application("Count") = Stream.ReadLine ' 읽어낸다.
        Stream.Close
        set Stream = fs.OpenTextFile(DataFile, 2) '
쓰기용으로 연다.
        Application("Count") = Application("Count") + 1 '
증가 한다.
        Stream.WriteLine(Application("Count"))
        Stream.Close
        Set Stream = nothing
        Application.Unlock '
잠김 해제
    end if
    Set fs = nothing
end sub

Sub Session_OnEnd
'
이곳에는 사용자가 접속을 종료할 때 실행할 스크립트를 작성한다
end sub
</script>
Count.asp
<!doctype html public "-//W3C//DTD HTML 4.0 Transitional//EN">
<html>
<head>
<title>
방문자 수 카운터 </title>
<meta
http-equiv="content-type" content="text/html; charset=euc-kr">
<meta
http-equiv="Cache-Control" content="no-cache">
</head>
<body>

<%
'
다른 페이지에 방문자 카운터를 넣고 싶은경우 이부분을 복사해서 넣는다.
response.write "<table style='border:1px solid red;'><tr><td bgcolor=black>"
lt = cstr(application("Count"))
ln = len(lt)

for i=1 to ln
    tt = mid(lt, i, 1)
    response.write "<img src=""/images/" + tt + ".gif"" border=0 width=16 height=21>"
next
response.write "</td></tr></table>"
%>
</body>
</html>
Count.asp에 필요한 이미지 파일
(Root의 /images/폴더에 복사 한다.)
0.gif 1.gif 2.gif 3.gif 4.gif 5.gif 6.gif 7.gif 8.gif 9.gif
신고
Posted by naearu

GNU 자유 문서 사용 허가서

1.1 판, 2000년 3월

Copyright (C) 2000  Free Software Foundation, Inc.
51 Franklin Street, Fifth Floor, Boston, MA  02110-1301, USA

누구든지 본 사용 허가서를 있는 그대로 복제하고 배포할 수
있습니다. 그러나 본문에 대한 수정은 허용되지 않습니다. 

제0조. 전문

본 사용 허가서의 목적은 첫째, 매뉴얼이나 책 또는 다른 문서들을 ``자유''롭게 만들기 위한 것입니다. 여기서 말하는 ``자유''란 무료가 아닌 구속되지 않는다는 관점에서의 자유를 의미합니다. 즉, 상업적이든 비상업적이든 간에 누구나 그것을 수정하거나 그렇지 않은 상태에서 복제 및 재배포할 수 있는 실질적인 자유를 보장하기 위한 것입니다. 둘째, 본 사용 허가서는 저작자나 발행인에게 다른 사람들이 가한 수정에 책임지지 않고 그들의 저작물에 대한 공로를 인정 받을 수 있는 길을 보장하기 위한 것입니다.

본 사용 허가서는 일종의 ``카피레프트''입니다. 즉, 문서의 2차적 저작물 또한 같은 의미에서 자유로워야 한다는 것을 의미합니다. 이것은 자유 소프트웨어를 위해서 고안된 카피레프트 사용 허가서인 GNU 일반 공중 사용 허가서를 보완합니다.

자유 소프트웨어는 자유 문서를 필요로 하기 때문에 본 사용 허가서는 자유 소프트웨어 매뉴얼에 사용되기 위해서 고안되었습니다. 자유 프로그램에는 소프트웨어에서와 같은 자유가 제공되는 매뉴얼이 함께 수반되어야 합니다. 그러나 본 사용 허가서가 단지 소프트웨어 매뉴얼에만 한정되는 것은 아닙니다. 이것은 문서의 주제나 그것이 인쇄물로 발행되었는지의 여부에 상관없이 모든 종류의 문서 저작물에 사용될 수 있습니다. 교육이나 참고를 목적으로 하는 저작물에는 원칙적으로 본 사용 허가서를 사용할 것을 추천합니다.

제1조. 적용 범위와 정의

본 사용 허가서는 GNU 자유 문서 사용 허가서(이하, ``GFDL''이라고 칭합니다.)의 규정에 따라 배포될 수 있다는 사항이 저작권자에 의해서 명시된 모든 매뉴얼과 문서 저작물에 적용될 수 있으며, 공중의 누구라도 피양도자가 될 수 있습니다. 본 사용 허가서에서 사용되는 문서(文書, document)는 GFDL에 의해서 양도된 매뉴얼 또는 문서 저작물의 의미합니다. 또한 공중(公衆, public)이란 불특정 다수의 사람을 의미하고, 피양도자(被讓渡者, licensee)란 GFDL에 의해서 매뉴얼 또는 문서 저작물을 양도받은 사람을 의미합니다. 복제 또는 개작의 대상이 되는 독자적인 문서 창작물의 최초 발행물은 원문서(原文書, original document)라고 합니다.

문서의 수정판(修正版, modified version)이란 원문서가 그대로 복제 또는 개작되거나, 다른 언어로 번역된 문서의 전부나 일부를 포함하고 있는 저작물을 의미합니다.

문서의 2차구성부(二次構成部, secondary section)란 문서의 저작자나 발행인과 문서의 전체 주제(또는 관련 내용)와의 관계만을 설명하거나, 문서의 전체 주제와 직접적인 관계가 없는 내용을 포함하고 있는 머리말과 목차 등의 서두나 부록 부분을 가리킵니다. (예를 들면 문서가 수학 교과서의 일부였을 경우, 이 문서의 2차구성부는 수학에 관련된 어떠한 내용도 기술되어서는 안됩니다.) 2차구성부에 포함될 수 있는 내용은 문서의 주제나 관련 사항에 대한 개정 이력이나 법률적, 상업적, 철학적, 윤리적, 정치적 입장 등입니다.

변경불가부분(變更不可部分, invariant section)이란 문서가 본 사용 허가서에 의해서 배포된다는 사실이, 해당 부분이 변경불가부분이라는 제목과 함께 명시된 2차 구성부의 한 형태를 의미합니다.

표지구절(表紙句節, cover texts)이란 문서가 본 사용 허가서에 의해서 배포된다는 사실이 문서의 앞 표지나 뒷 표지에 언급되는 짧은 문장을 의미합니다.

문서의 투명(透明, transparent) 복제물이란 그 사양이 공중에게 공개되어 있고 일반적인 문서 편집기, (픽셀로 구성된 이미지의 경우) 일반적인 페인트 프로그램, (그림의 경우) 널리 사용되는 그림 편집기로 그 내용을 출력시키거나 직접 수정하기에 용이하며 조판 프로그램에 입력하기에 적당하거나 조판 프로그램에 입력할 수 있는 다양한 형태의 포맷으로 자동으로 번역되기에 용이한 형태로 만들어진 기계로 판독 가능한 복제물을 의미합니다. 피양도자가 문서를 개작하는 것을 방해하거나 금지하기 위해서 조판 형태를 설계한 파일 포맷은 투명한 것이 아닙니다. 투명 복제물이 아닌 것을 불투명(不透明, opaque) 복제물이라고 합니다.

투명 복제물로 적절한 포맷의 예는 마크업이 포함되지 않은 평범한 ASCII 포맷과 Texinfo 입력 포맷, LaTeX 입력 포맷, 공개적으로 이용되는 DTD를 사용하는 SGML이나 XML, 그리고 표준 규약을 준수하는 간단한 형식의 HTML과 같이 사람이 직접 개작할 수 있는 형태의 포맷입니다. 불투명 복제물에는 PostScript와 PDF, 독점 워드 프로세서에서만 읽고 편집할 수 있는 독점 포맷, 일반적으로 통용되지 않는 DTD와 처리 도구가 필요한 SGML 및 XML 포맷, 그리고 출력 목적만을 위해서 워드 프로세서로 생성한 기계 생성 HTML 포맷이 포함됩니다.

제목 페이지(title page)란 인쇄된 책의 경우에는 문서의 제목이 표시된 페이지 자체뿐만 아니라 보다 쉽게 이해되는데 필요하다고 판단되어 본 사용 허가서가 제목 페이지에 함께 포함시킬 것을 규정한 후속 페이지들을 모두 의미합니다. 제목 페이지가 없는 저작물의 경우, 제목 페이지는 본문이 시작되기 전에 저작물의 제목에 가장 근접한 형태가 나타난 페이지를 의미합니다.

제2조. 동일 복제

문서의 피양도자는 본 사용 허가서에 어떠한 사항도 추가하지 않은 상태에서 본 사용 허가서와 저작권 사항 그리고 문서의 모든 복제물에 본 사용 허가서가 동일하게 적용된다는 사항을 명시하고 이를 문서의 복제물과 함께 제공하는 한, 어떠한 정보 매체에 의해서도 상업적이나 비상업적인 목적으로 문서를 복제하거나 배포할 수 있습니다. 문서를 복제하거나 배포할 경우에는 임의의 피양도자가 문서를 열람하거나 복제할 수 없도록 방해하거나 통제할 수 있는 어떠한 기술적 수단도 사용해서는 안됩니다. 그러나 복제물을 제공하는데 따른 보상을 청구할 수는 있습니다. 만약, 충분히 많은 양의 복제물을 배포할 경우에는 제3조의 규정들을 함께 준수해야만 합니다.

또한 위의 조건을 준수하는 한, 피양도자는 문서의 복제물을 대여하거나 공개적으로 전시할 수 있습니다.

제3조. 대량 복제

만약, 문서의 인쇄 복제물을 100부 이상 발행하며, 문서의 사용 허가서가 표지 구절의 사용을 규정하고 있는 경우에는 인쇄물의 앞 표지와 뒷 표지에 삽입될 앞 표지 구절과 뒷 표지 구절이 명확하고 읽기 쉬운 형태로 모든 복제물에 포함되어야 합니다. 또한 인쇄 복제물의 발행인에 대한 정보가 양쪽 표지 모두에 명확하고 읽기 쉬운 형태로 명시되어야 합니다. 인쇄물의 앞 표지에는 문서의 완전한 제목이, 제목을 구성하는 모든 문자들이 동일한 수준의 식별력을 가질 수 있도록 표시되어야 합니다. 복제물의 표지에는 추가적인 문장이나 도형, 그림 등의 요소를 추가하는 것이 가능합니다. 문서의 제목이 유지되고 이러한 조건들을 만족하는 한, 표지만 변경시킨 복제물은 표지 이외의 다른 부분에 대한 동일 복제로 간주됩니다.

앞 표지나 뒷 표지에 표시될 표지 구절의 내용이 너무 많아서 읽기 힘든 경우에는 실제 표지에는 (적당한 만큼만) 기재하고, 나머지 내용들은 인접 페이지에 표시할 수 있습니다.

100부 이상의 불투명 복제물을 발행하거나 배포하는 경우, 모든 불투명 복제물에 기계 판독이 가능한 투명 복제물을 함께 첨부하거나, 추가된 것이 없는 완벽한 투명 복제물이 있는 공개적인 접근이 가능한 컴퓨터 네트워크의 위치를 각 불투명 복제물에 명시하여 네트워크를 사용하는 일반 공중이 공개 표준을 준수하는 네트워크 프로토콜을 이용하여 비용없이 익명으로 다운로드 받을 수 있도록 해야 합니다. 후자의 경우, 불투명 복제물을 대량으로 배포하기 시작할 때에는 매우 신중한 접근을 해야 하는데, 불투명 복제물을 공중에게 (본인이 직접 또는 대리인을 통해서, 또는 소매업자를 통해서) 배포한 마지막 시점으로부터 적어도 1년 뒤까지 투명 복제물이 명시된 위치에서 접근될 수 있는 상태로 확실히 남아있도록 해야 합니다.

강제 조항은 아니지만, 복제물을 대량으로 배포하기 전에 충분한 시간적 여유를 두고 문서의 저작자와 연락해서 저작자에게 문서의 최신 개정판을 제공할 수 있는 기회를 주어야 합니다.

제4조. 개작

문서의 수정판은 수정판이 명백하게 본 사용 허가서에 의해서 관리되는 조건 하에서 제2조와 제3조의 규정에 의해서 복제 및 배포될 수 있습니다. 즉, 수정판은 문서의 역할을 유지해야 하며, 수정판의 복제물을 양도받은 임의의 피양도자는 개작과 배포에 대한 동일한 권리를 양수받게 됩니다. 또한 수정판에 대해서 다음의 규정들을 준수해야만 합니다.

A. 수정판의 제목 페이지에는 (표지가 있다면 표지에도) 문서와 그 이전 판의 문서와 구별되는 제목을 사용해야 합니다. (문서의 개정 이력란이 존재한다면 이러한 사실이 등재되어야 합니다.) 그러나 이전 판의 발행인이 허락한다면, 이전 판과 같은 제목을 사용할 수 있습니다.

B. 수정판의 제목 페이지에는 적어도 5명의 문서의 원저작자 (5명보다 적다면 원저작자 모두)와 함께, 개작에 책임이 있는 1인 이상의 개인 또는 단체를 저작자로 명시해야 합니다.

C. 수정판의 발행인 성명을 제목 페이지에 발행인으로서 명시합니다.

D. 문서의 모든 저작권 표시를 수정판에 유지해야 합니다.

E. 문서의 저작권 표시 부분에 자신이 개작한 것에 대한 적절한 저작권 사항을 추가해서 수정판에 표시합니다.

F. 저작권 표시 바로 다음에, 본 사용 허가서의 규정 하에 공중이 수정판을 사용할 수 있다는 사용 허가 표시를 본 사용 허가서의 부록에 나와있는 형식으로 포함시킵니다.

G. 문서의 사용 허가 표시에 포함되어 있던 변경 불가 부분의 목록과 명시할 것을 요구한 표지 구절을 수정판에도 모두 그대로 유지시킵니다.

H. 본 사용 허가서를 변경 없이 그대로 포함시킵니다.

I. 개정이력(履歷, history)이라는 이름이 붙어 있는 부분과 그 제목을 그대로 유지하고 적어도 수정판의 제목, 연도, 수정판 저작자, 발행인에 대한 항목을 제목 페이지에서 명시한 것과 동일하게 이 부분에 추가합니다. 문서에 이력 부분이 없을 경우에는 제목 페이지와 동일하게 문서의 제목과 연도, 저작자, 발행인을 명시한 이력 부분을 새롭게 만들고 앞에서 언급한 대로 수정판에 대한 사항을 추가합니다.

J. 공중이 투명 복제물에 접근할 수 있게 하기 위해서 문서에 명시한 네트워크 주소가 존재한다면 이를 수정판에도 그대로 유지시킵니다. 문서의 이전 판에 포함되어 있던 네트워크 주소가 문서에 기재되어 있는 경우에도, 이를 소급해서 수정판에 그대로 유지합니다. 네트워크 주소는 개정 이력 부분에 기재될 수도 있습니다. 만일 네트워크 주소가 문서보다 적어도 4년 전에 발행된 저작물을 위한 것이거나 네트워크 주소가 최초로 포함된 문서의 발행인이 허락했다면 이를 생략할 수 있습니다.

K. 감사의 글(acknowledgements) 또는 헌사(dedications)라는 표제를 갖고 있는 부분이 있다면, 이 부분에 기재되어 있는 제목과 기여자에 대한 감사의 글 그리고 헌사의 내용과 어조를 수정판에도 모두 유지합니다.

L. 문서의 모든 변경 불가 부분은 제목과 본문을 변경하지 않고 수정판에 그대로 유지시킵니다. 장(chapter) 또는 절(section) 번호나 이에 상당하는 것은 변경 불가 부분의 제목의 일부분으로 간주되지 않습니다.

M. 추천사(endorsements)라는 제목이 붙은 부분은 수정판에서 모두 누락시킵니다. 이러한 부분이 수정판에 포함되어서는 안됩니다.

N. 기존의 어떠한 부분도 수정판에서 추천사로 제목을 바꾸지 말고 제목을 개명하는 부분이 변경 불가 부분의 어떠한 제목과도 충돌되지 않도록 합니다.

만일 수정판이 문서에 포함되어 있지 않던 새로운 서두 부분이나 부록을 2차 구성부의 형태로 포함하게 되면, 이러한 부분의 전체나 일부를 선택에 따라 변경 불가 부분으로 설정할 수 있습니다. 변경 불가 부분을 새롭게 설정하기 위해서는 수정판의 사용권 허가 표시 부분에 포함되어 있는 변경 불가 부분 목록에 제목을 추가시킵니다. 이때 그 제목들은 다른 부분의 제목들과 구별되어야 합니다.

수정판에만 한정된 추천사가 다양한 주체들에 의해서 제공될 경우에는, 예를 들어 동료들의 비평문이나 수정판을 특정한 표준의 권위있는 정의로 인정한다는 관련 기관의 승인이 있을 경우에는 ``추천사''라는 제목의 글을 추가할 수 있습니다.

수정판의 표지 구절 목록 말미에는 앞 표지 구절과 뒷 표지 구절로 각각 5단어와 25단어 미만의 문장을 덧붙일 수 있습니다. 한 개인 또는 한 단체는 (또는 단체에 의해서 만들어진 협약을 통해서) 오직 한 개의 문장만을 각각 앞 표지 구절과 뒷 표지 구절에 추가할 수 있습니다. 만약 문서의 표지 구절에 이미 특정인이나 특정인이 대표하는 단체의 협약에 의해서 포함된 문장이 존재할 경우에는 동일인에 의해서 표지 구절 문장이 추가될 수 없습니다. 그러나 문서의 발행인으로부터 명시적인 승인을 받은 경우에는 기존의 문장을 수정판에서 새로운 문장으로 대체할 수 있습니다.

문서의 저작자(들)과 발행인(들)은 본 사용 허가서를 통해서 수정판을 선전하는데 그들의 이름이 사용되거나, 명시적 또는 묵시적인 형태로 그들의 이름이 수정판을 추천하는데 사용되는 것을 허용한 것은 아닙니다.

제5조. 문서의 결합

수정판에 대해서 정의된 제4조의 규정에 따라서 본 사용 허가서에 의해서 특정 문서를 다른 문서들과 결합할 수 있습니다. 단, 문서를 결합할 때는 결합 저작물을 구성하는 개별 문서들의 변경 불가 부분들을 결합 문서에 그대로 포함시켜야 하며 그 목록을 결합 저작물의 저작권 표시 부분에 명시해야 합니다.

결합 저작물에는 본 사용 허가서의 복제물 1부만 포함시키면 되며 여러 개의 동일한 변경 불가 부분 또한 하나로 통합될 수 있습니다. 만약, 동일한 이름을 갖는 변경 불가 부분이 여러 개 존재하지만 그 내용이 다른 경우에는 각각의 내용과 관련된 저작자와 발행자가 알려져 있을 경우에는 해당 정보를 각 부분의 말미에 괄호안에 명시하고 그렇지 않은 경우에는 숫자를 이용해서 구분합니다. 결합 저작물의 저작권 표시 부분에 있는 변경 불가 부분 목록에 포함된 제목도 같은 방식으로 조정합니다.

원문서에 존재하던 ``개정 이력'' 부분은 모두 통합하여, 단일한 ``개정 이력'' 부분을 결합 저작물 안에 유지해야 합니다. ``감사의 글''과 ``헌사''도 같은 방식으로 조정합니다. 단, ``추천사'' 부분은 모두 삭제해야 합니다.

제6조. 문서의 수집

본 사용 허가서에 의해서 배포된 문서들을 모아서 구성된 수집 저작물을 만들 수 있습니다. 또한 개별 문서에 포함되어 있던 본 사용 허가서의 복제물들을 한 개로 대체하여 수집 저작물에 포함시킬 수 있습니다. 이 경우, 다른 모든 부분들은 본 사용 허가서에 규정된 제2조 동일 복제 규정을 준수해야 합니다.

수집 저작물로부터 하나의 문서를 발췌해서 개별 배포할 경우에는 본 사용 허가서의 복제물을 발췌한 문서에 첨부하고 그 이외의 다른 부분들은 모두 제2조에 규정된 동일 복제 조항을 준수해야 합니다.

제7조. 독자적 저작물과의 집합 저작물 구성

문서 또는 문서의 2차적 저작물을 독자적인 문서나 저작물과 함께 대량 저장 매체 또는 배포 매체에 구성한 편집물을 만들 경우에는 저작물의 구성에 따른 편집 저작권이 주장되지 않는 한, 저작물 전체를 본 사용 허가서가 규정하는 수정판으로 간주하지 않습니다. 이러한 편집물을 집합 저작물이라고 부르며, 편집 과정에서 문서와 함께 구성된 독자적 저작물이 문서로부터 파생된 것이 아니라면 본 사용 허가서가 적용되지 않습니다.

제3조의 표지 구절에 대한 요구는 문서의 복제물에 적용됩니다. 따라서 문서의 양이 전체 편집물의 1/4 보다 작은 경우에는, 문서의 표지 구절은 편집물 안에서 문서가 위치해 있는 곳의 표지 부분에 포함되어도 무방합니다. 그렇지 않은 경우에는 표지 구절이 전체 편집물의 표지 부분에 나타나야 합니다.

제8조. 번역

번역은 일종의 개작으로 간주됩니다. 따라서 문서의 번역물은 제4조의 규정에 따라 배포될 수 있습니다. 변경 불가 부분을 번역물로 대체하기 위해서는 저작권자의 명시적인 승인을 얻어야 합니다. 그러나 변경 불가 부분의 전체 또는 일부에 대한 번역문을 원문과 함께 표시할 경우에는 저작권자로부터 별도의 승인을 얻을 필요가 없습니다. 본 사용 허가서의 번역판을 첨부할 경우에는 영어 원판을 함께 제공해야 합니다. 영어 원판과 번역판 사이에 충돌이 발생할 경우에는 영문 원판이 우선합니다.

제9조. 권리의 소멸

본 허가서에 의해서 명시적으로 이루어 지지 않는 한 문서에 대한 복제와 개작, 양도, 배포가 성립될 수 없습니다. 이와 관련된 어떠한 행위도 무효이며 본 허가서가 보장한 권리는 자동으로 소멸됩니다. 그러나 본 허가서의 규정에 따라 문서의 복제물이나 권리를 양도받았던 제3자는 본 허가서의 규정들을 준수하는 한, 배포자의 권리 소멸에 관계없이 사용상의 권리를 계속해서 유지할 수 있습니다.

제10조. 본 사용 허가서의 향후 개정

자유 소프트웨어 재단은 때때로 본 사용 허가서의 개정판이나 신판을 공표할 수 있습니다. 새롭게 공표될 판은 당면한 문제나 현안을 처리하기 위해서 세부적인 내용에 차이가 발생할 수 있지만, 그 근본 정신에는 변함이 없을 것입니다 http://www.gnu.org/copyleft/의 내용을 참고하시기 바랍니다.

각각의 판들은 판번호를 사용해서 구별됩니다. 특정한 판번호와 그 이후 판을 따른다는 사항이 명시된 문서에는 해당 판이나 그 이후에 발행된 어떠한 판을 선택해서 적용해도 무방하고, 판번호를 명시하고 있지 않은 경우에는 자유 소프트웨어 재단이 공표한 어떠한 판번호의 판을 적용해도 무방합니다.

문서에 GFDL을 적용하는 방법

작성한 문서에 본 사용 허가서를 적용하기 위해서는 본 사용 허가서의 복제물을 문서에 첨부하고 다음과 같은 저작권 및 사용 허가 표시를 제목 페이지 다음에 추가합니다.



Copyright (c) 연도, 본인 성명

GNU 자유 문서 사용 허가서 1.1판 또는 자유 소프트웨어 재단에서 발행한 이후 판의 규정에 따라 본 문서를 복제하거나 개작 및 배포할 수 있습니다. 본 문서의 변경 불가 부분은 ``xxx''이고 앞 표지 구절은 ``xxx'', 뒷 표지 구절은 ``xxx''입니다. 본 사용 허가서의 전체 내용은 ``GNU 자유 문서 사용 허가서'' 부분에 포함되어 있습니다.


만약, 변경 불가 부분이 없는 경우라면 변경 불가 부분을 명시하는 대신 ``변경 불가 부분 없음''이라고 표시합니다. 앞 표지 구절과 뒷 표지 구절이 없는 경우에도 각각 ``앞 표지 구절 없음''과 ``뒷 표지 구절 없음''이라는 사실을 명시합니다.

만약, 문서가 프로그램 코드의 예를 상당 부분 포함하고 있다면 GNU 일반 공중 사용 허가서와 같은 자유 소프트웨어 사용 허가서를 사용해서 프로그램 코드가 자유소프트웨어에서 사용될 수 있도록 사용 허가를 병행할 것을 추천합니다.

신고
Posted by naearu
연구_고민/리눅스2009.01.28 13:32
tar
- 여러개의 파일을 하나로 묶음 (압축은 아님)

#tar [option] file_name.tar file or directory

option
-c : 새로운 archive 파일을 생성(Creation)
-x : archive 파일을 풀어줌(eXtract)
-v : 작업내용을 출력(Verbose)
-p : 퍼미션을 그대로 유지
-f : 옵션 다음에 파일이름을 지정
-Z : compress를 이용해서 압축하여 묶어나 풀어줌
-z : gzip형식으로 압축하여 묶거나 풀어줌
-j : bzip2형식으로 압축하여 묶거나 풀어줌

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

예)
# tar -cvf root.tar install.log.syslog ks.cfg
install.log.syslog
ks.cfg
- tar을 이용해 install.log.syslog, ks.cfg 파일을 root.tar이라는 파일로 묶어줌 (옵션 앞의 '-'는 생략가능)

# ls
install.log.syslog ks.cfg root.tar

# tar xvf root.tar -C /home
install.log.syslog
ks.cfg
- tar을 이용해 /home 폴더에 root.tar파일을 풀어줌 (-C 옵션은 폴더를 지정하는 옵션이다.)

# ls /home
install.log.syslog ks.cfg

예)
# tar tvf root.tar - root.tar 파일의 내용을 풀지 않고 본다.
# tar cvf cc.tar *.c - 현재 폴더에서 *.c로 된 모든 파일을 cc.tar로 묶는다.

# tar cvfZ ccc.tar.Z *.c
# tar xvfZ ccc.tar.Z *.c - tar로 묶어서 compress를 이용해 압축하거나 푼다.

# tar cvfz ccc.tar.gz *.c
# tar xvfz ccc.tar.gz *.c - tar로 묶어서 gzip를 이용해 압축하거나 푼다.

# tar cvfj ccc.tar.bz2 *.c
# tar cvfj ccc.tar.bz2 *.c - tar로 묶어서 bzip2를 이용해 압축하거나 푼다.

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

compress
- 전통적인 유닉스 압축 프로그램으로 압축률이 낮아 현재는 잘 쓰이지 않는다.
- 확장자는 .Z를 갖는다.(설치 프로그램 명은 ncompress이다.)
- 압축 : compress [file_name].tar
- 압축 해제 : uncompress [file_name]tar.Z

gzip
- GNU에서 만튼 압축 프로그램으로 묶는 기능이 없으므로 tar과 같이 사용한다.
- 확장자는 .gz를 갖는다.
- 압축 : gzip [file_name].tar
- 압축 해제 : gunzip [file_name]tar.gz

bzip2
- 리눅스용 압축 프로그램으로 gzip보다 압축율이 뛰어나다.
- 확장자는 .bz2를 갖는다.
- 압축 : bzip2 [file_name].tar
- 압축 해제 : bunzip2 [file_name]tar.bz2

예)
# ls
word.tar word1.tar word2.tar word3.tar

# compress word1.tar
# gzip word2.tar
# bzip2 word3.tar

# ls -l
-rw-r--r-- 1 root root    10240 11월 17 14:59 word.tar
-rw-r--r-- 1 root root       409 11월 17 15:12 word1.tar.Z
-rw-r--r-- 1 root root       245 11월 17 15:10 word2.tar.gz
-rw-r--r-- 1 root root       242 11월 17 15:10 word3.tar.bz2

# uncompress word1.tar.Z
# gunzip word2.tar.gz
# bunzip2 word3.tar.bz2

예)
#tar cvfZ home.tar.Z /home
#tar cvfz home.tar.gz /home
#tar cvfj home.tar.bz2 /home

#ls -l
-rw-r--r-- 1 root root     71591 11월 17 15:57 home.tar.Z
-rw-r--r-- 1 root root     23219 11월 17 15:58 home.tar.bz2
-rw-r--r-- 1 root root     30949 11월 17 15:57 home.tar.gz

#tar xvfZ home.tar.Z
#tar xvfz home.tar.gz
#tar xvfj home.tar.bz2
신고
Posted by naearu
자료 출처 : http://oraclesqlpuzzle.hp.infoseek.co.jp/regex/


ab를 포함하지 않는, bc를 포함하지 않는,cd를 포함한 행을 검색한다.

대상 데이터
abcdefg
acbdefg
ab
bc
cd
cdxxabxxbc
abcd
cdab
axbxcdxxx

정규 표현
^(?!.*ab)(?!.*bc)(?=.*cd).*$
별해
^(?!(?=.*(ab|bc)))(?=.*cd).*$



룩어라운드... 멋진기능이야 ㅠㅠ

(?<= ...)  하위 표현식이 왼쪽에 매치될때
(?<! ...) 하위 표현식이 왼쪽에 매치되지 않을때
(?= ....) 하위 표현식이 오른쪽에 매치될때
(?! ...) 하위 표현식이 오른쪽에 매치되지 않을때

신고
Posted by naearu
TAG 정규식
연구_고민2008.08.08 13:42
그냥 한번 만든겁니다..

API사용 연습이랄까 ㄱ-;;

http://naearu.com/mal


네이버 국어사전을 이용해서 만든건데.. 완전.. 바보입니다 ㄱ-;;;;;;
신고
Posted by naearu
연구_고민2008.07.01 17:31
Netscape 4 배제하기
<link rel="stylesheet" type="text/css" href="/css/style.css" media="all" />
Netscape 는 media 속성이 screen 이 아닌 경우 외부 스타일시트를 읽지 못하는 버그가 존재함.

Win IE 3~4, Mac IE 4~4.5, Netscape 4 배제하기
@import url("/css/style.css")
Win IE 4, Mac IE 4 는 인용부호가 "가 아니면 읽지 못하는 버그 존재. IE 3과 Netscape 4는 @import 지원하지 않음.

Mac IE 5 배제하기
H1 { /* \*/ color:red; /* */ }
Holly 핵이라 하며, 주석 안의 내용이 적용되지 않음.

Win IE 4~5 배제하기
H1/**/ { color:red; }
셀렉터 뒤에 /**/ 삽입.

Win IE 4~5, Mac IE 4.5~5 배제하기
H1 { color/* */:red; }
속성과 속성값을 구분하는 콜론(:) 앞에 /* */ 삽입.

Win IE 4~6, Mac IE 4, Netscape 4 배제하기
html>body H1 { color:red; }
셀렉터 앞에 html>body 삽입.

Win IE 6 제외시키기
H1 { color /**/:red; }
속성과 속성값을 구분하는 콜론(:) 앞에 스페이스와 /**/ 삽입.

언더스코어 핵 (_)
H1 { _color:red; }
Win IE 4~6 에 적용.

닷핵 (.)
H1 { .color:red; }
속성 앞에 . 삽입. Win IE 6~7 에만 적용. 타 브라우저는 정확히 확인하지 못했습니다.
이 핵에 대해선 계속 확인중인데 블로그스피어나 여타 서적에는 전혀 언급이 없는 이상한 핵(?)입니다.

해시 핵(#)
H1 { #color:red; }
속성 앞에 # 삽입. Win IE 4~6, Mac IE 5, Opera 7, Mozilla계열, Firefox 에 적용.

스타 핵
*HTML H1 { color:red; }
셀렉터 앞에 *html 삽입. Win IE 4~6, Mac IE 4~5 에 적용.

스타7 핵
HTML*H1 { color:red; }
셀렉터 앞에 html* 삽입(공백없이). Win IE 5.5~6, Mac IE 5, Safari 에 적용.

xmlns 속성 핵
HTML[xmlns] H1 { color:red; }
셀렉터 앞에 속성 선택자를 삽입. Mozilla, Firefox, Opera, Safari 등 속성 선택자를 지원하는 브라우저에 적용.

:root 가상클래스 핵
:root H1 { color:red; }
셀렉터 앞에 :root 가상클래스 삽입. Mozilla, Firefox, Mac IE 5, Safari 등 가상클래스를 지원하는 브라우저에 적용.

Tantek 박스모델 핵
H1 {
    width:500px;
    voice-family: ""}"";
    voice-family:inherit;
    width:400px;
}
Tantek Celik 이 고안한 유명한 박스모델 핵. Win IE 4~5, Mac IE 4, Netscape 4 에서는 voice-family 속성 이전의 스타일 적용. 그외의 브라우저는 뒤의 속성 적용.

단순 박스모델 핵
H1 {
    width:500px;
    w\idth:400px; //Win IE 6, Mac IE 5, Mozilla, Opera, Safari
    \width:450px; // only Win IE 5
}

속성의 첫번째, 두번째 글자 사이에 \를 삽입하면 Win IE 6, Mac IE 5, Mozilla, Opera, Safari 에 적용.
추가로 속성의 앞에 \를 삽입하면 Win IE 5 에만 적용.

IE 7, Opera 적용하기
*+html body H1 { color:red; }
셀렉터 앞에 *+html body 삽입. IE 7, Opera 8 이후 버전 적용. Opera를 배제한 IE7 전용으로 하고 싶을 때는 *+html>/**/body 로 Opera 전용 속성 기술.

IE 7 적용하기
*:first-child+html H1 { color:red; }
셀렉터 앞에 *:first-child+html 삽입. IE 7에만 적용되고, 이외의 브라우저는 앞에서 기술한 셀렉터의 속성 적용.

Win IE 5 패스필터
@media tty {
i{content:"";/*" "*/}}; @import '/css/style.css'; {;}/*";}
}/* */


Win IE 5.5 패스필터
@media tty {
i{content:"";/*" "*/}}@m; @import '/css/style.css';/*";}
}/* */


Win IE 6 패스필터(?)
<!--[if IE 6]><link rel="stylesheet" type="text/css" href="/css/style.css" media="all" /><![endif]-->

Win IE 7 패스필터(?)
<!--[if gte IE 7]><link rel="stylesheet" type="text/css" href="/css/style.css" media="all" /><![endif]-->

모던브라우저 패스필터 (Win IE 5.5 이하, Mac IE 5, Opera 8 이하, Netscape 4 이하 제외)
@import "null?"{";
@import "/css/style.css";
@import "null?"}"




  Windows Mac OS X Macintosh Other
IE Mz Ns Op iC IE Mz Ns Om Op Sf IE Mz Ns Op Ko
7 6 5.5 5 4 1 7 6 4 8 7 6 5 2 5 1 7 6 4 8 7 6 5 2 5 4 1 7 6 4 6 5 3
  7 6 5.5 5 4 1 7 6 4 8 7 6 5 2 5 1 7 6 4 8 7 6 5 2 5 4 1 7 6 4 6 5 3
IE Mz Ns Op iC IE Mz Ns Om Op Sf IE Mz Ns Op Ko
Windows Mac OS X Macintosh Other
voice-family:"\"}\"";
voice-family:inherit;
property:value;
Y Y N N N Y Y Y N Y Y Y Y Y Y Y Y Y Y Y Y Y Y Y Y N Y Y Y N Y Y Y
p\roperty:value; Y Y N N N Y Y Y N Y Y Y N N Y Y Y Y N Y Y Y N Y Y N Y Y Y N Y N N
/*/*/property:value;/* */ Y Y Y Y Y Y Y Y N Y Y Y Y Y Y Y Y Y Y Y Y Y Y Y Y Y Y Y Y N Y Y Y
/*/*//*/property:value;/* */ N N N N N N N N Y N N N Y N N N N N N N N N Y N N N N N N Y N Y N
div#test Y Y Y Y Y Y Y Y N Y Y Y Y Y Y Y Y Y Y Y Y Y Y Y Y Y Y Y Y N Y Y Y
head:first-child+body div Y N N N N Y Y Y N Y Y N N N Y Y Y Y N Y Y N N Y Y N Y Y Y N N N Y
body>div Y N N N N Y Y Y N Y Y Y Y N Y Y Y Y Y Y Y Y Y Y Y Y Y Y Y N Y Y Y
html[xmlns] div Y N N N N Y Y Y N Y Y Y Y N N Y Y Y N Y Y Y Y Y N N Y Y Y N Y Y Y
@import 'styles.css' Y Y Y Y N Y Y Y N Y Y Y Y Y N Y Y Y Y Y Y Y Y Y N N Y Y Y N Y Y Y
@import "styles.css" Y Y Y Y N Y Y Y N Y Y Y Y Y Y Y Y Y Y Y Y Y Y Y Y N Y Y Y N Y Y Y
@import url(styles.css) Y Y Y Y Y Y Y Y N Y Y Y Y Y Y Y Y Y Y Y Y Y Y Y Y Y Y Y Y N Y Y Y
@import url('styles.css') Y Y Y Y Y Y Y Y N Y Y Y Y Y N Y Y Y Y Y Y Y Y Y N N Y Y Y N Y Y Y
@import url("styles.css") Y Y Y Y Y Y Y Y N Y Y Y Y Y Y Y Y Y Y Y Y Y Y Y Y Y Y Y Y N Y Y Y
@import "null?\"\{";
@import "styles.css";
Y Y Y N N Y Y Y N Y Y Y Y Y Y Y Y Y Y Y Y Y Y Y Y N Y Y Y N Y Y Y
@media all{/* rules */} Y Y Y Y N Y Y Y N Y Y Y Y N N Y Y Y N Y Y Y Y Y N N Y Y Y N Y Y Y
<link media="all"> Y Y Y Y Y Y Y Y N Y Y Y Y Y Y Y Y Y Y Y Y Y Y Y Y Y Y Y Y N Y Y Y
<link media="All"> Y Y Y Y Y Y Y Y N Y Y Y Y Y Y Y Y Y N Y Y Y Y Y Y Y Y Y Y N Y Y Y
* html div N Y Y Y Y N N N N N N N N N Y N N N N N N N N N Y Y N N N N N N N
*+html div Y N N Y N N N N N N N N N N N N N N N N N N N N N N N N N N N N N
i{content:"\"/*"}
div{property:value}
Y Y N N N Y Y Y N Y Y Y Y Y Y Y Y Y Y Y Y Y Y Y Y N Y Y Y N Y Y N
/* \*/
div{property:value}
/* */
Y Y Y Y Y Y Y Y Y Y Y Y Y Y N Y Y Y Y Y Y Y Y Y N Y Y Y Y Y Y Y Y
html*#test Y Y Y N N Y Y Y N N N N N N Y Y Y Y N N N N Y Y Y N Y Y Y N ? Y N
_property:value N Y Y Y Y N N N N N N N N N N N N N N N N N N N Y Y N N N N N N N
*property:value Y Y Y Y N N N N N N N N N N N N N N N N N N N N N N N N N N N N N
@media tty {
i{content:"\";/*" "*/}} @import 'styles.css'; /*";}
}/* */
N N Y Y N N N N N N N N N N N N N N N N N N N N N N N N N N N N N
@media tty {
i{content:"\";/*" "*/}}; @import 'styles.css'; {;}/*";}
}/* */
N N N Y N N N N N N N N N N N N N N N N N N N N N N N N N N N N N
@media tty {
i{content:"\";/*" "*/}}@m; @import 'styles.css'; /*";}
}/* */
N N Y N N N N N N N N N N N N N N N N N N N N N N N N N N N N N N
/*\*//*/
@import "styles.css";
/**/
N N N N N N N N N N N N N N Y N N N N N N N N N Y N N N N N N N N
신고
Posted by naearu
연구_고민/웹2008.06.24 14:41

HTTP 에러 코드

400 요청실패
문법상 오류가 있어, 서버가 요청사항을 이해하지 못함, 클라이언트는 수정없이 요청사항을 반복하지 않을 것이다.

401.1 권한 없음 (접속실패)
이 에러는 서버에 로그온 하려는 요청사항이 서버에 들어있는 권한과 비교했을 때 맞지 않을 경우 발생한다. 이 경우, 여러분이 요청한 자원에 접근할 수 있는 권한을 부여받기 위해 서버 운영자에게 요청해야 할 것이다.

401.2 권한 없음(서버설정으로 인한 접속 실패)
이 에러는 서버에 로그온 하려는 요청사항이 서버에 들어있는 권한과 비교했을 때 맞지않을 경우 발생한다. 이것은 일반적을 으로 적절한 www-authenticate head field를 전송하지 않아서 발생한다.

401.3 권한 없음(자원에 대한 ACL에 기인한 권한 없음)
이 에러는 클라이언트가 특정 자원에 접근할 수 없을 때 발생한다. 이 자원은 페이지가 될 수도 있고 , 클라이언트의 주소 입력란에 명기된 파일일 수도 있다. 아니면 클라이언트가 행당 주소로 들어갈 때 이용되는 또 다른 파일일 수도 있다. 여러분이 접근할 전체 주소를 다시 확인해 보고 웹 서버 운영자에게 여러분이 자원에 접근할 권한이 있는지를 확인해 본다.

401.4 권한 없음(필터에 의한 권한 부여 실패)
이 에러는 웹 서버가 서버에 접속하는 사용자들을 확인하기 위해 설치한 필터 프로그램이 있음을 의미한다. 서버에 접속한는 데 이용되는 인증 과정이 이런 필터 프로그램에 의해 거부되었다.

401.5 권한 없음(ISA PI/CGI 애플리케이션에 의한 권한부여 실패)
이 에러는 여러분이 이용하려는 웹 서버의 어드레스에 ISA PI나 CGI프로그램이 설치되어 있어 사용자의 권한을 검증하고 있음을 의미한다. 서버에 접속하는 데 이용되는 인증 과정이 이 프로그램에 의해 거부되었다.

403.1 금지(수행접근 금지)
이 오류는 CGI나 ISAPI,혹은 수행시키지 못하도록 되어있는 디렉토리 내의 실행 파일을 수행시키려고 했을 때 발생한다.

403.2 금지(읽기 접근 금지)
이 에러는 브라우저가 접근한 디렉토리에 가용한 디폴트 페이지가 없을 경우에 발생한다. 아니면 Eecute나 Script로 분한이 부여된 디렉토리에 들어있는 HTML페이지를 보려했을 때 발생한다.

403.4 금지(SSL 필요함)
이 에러는 여러분이 접근하려는 페이지가 SSL로 보안유지 되고 있는 것일 때 발생한다. 이것을 보기 위해서 여러분은 주소를 입력하기 전에 먼저 SSL을 이용할 수 있어야 한다.


403.5 금지 (SSL 128필요함)
이 에러는 접근하려는 페이지가 SSL로 보안유지 되고 있는 것일 때 발생한다. 이 자원을 보기 위해서는 여러분의 브라우저가 SSL의 행당 레벌을 지원해야 한다. 여러분의 브라우저가 128비트의 SSL을 지원하는 지를 확인해 본다.

403.6 금지(IP 주소 거부됨)
이 에러는 서버가 사이트에 접근이 허용되지 않은 IP주소를 갖고 있는데, 사용자가 이 주소로 접근하려 했을 때 발생한다.

403.7 금지(클라이언트 확인 필요)
이 에러는 여러분이 접근하려는 자원이 서버가 인식하기 위해 여러분의 브라우저에게 클라이언트 SSL을 요청하는 경우 발생한다. 이것은 여러분이 자원을 이용할 수 있는 상용자임을 입증하는데 사용된다.

403.8 금지 (사이트 접근 거부됨)
이 에러는 웹 서버가 요청사항을 수행하고 있지 않거나, 해당 사이트에 접근하는 것이 허락되지 않았을 경우 발생한다.

403.9 접근 금지(연결된 사용자수 과다)
이 에러는 웹서버 BUSY 상태에 있어서 여러분의 요청을 수행할수 없을 경우에 발생한다. 잠시 후에 다시 접근해 보도록 한다.

403.10 접근금지(설정이 확실 하지 않음)
이 순간 웹 서버의 설정쪽에 문제가 있다.

403.11 접근금지(패스워드 변경됨)
이 에러는 사용자 확인단계에서 잘못된 패스워드를 입력했을 경우 발생한다. 페이지를 갱신한 후 다시 시도해 본다.

403.12 접근금지(Mapper 접근 금지됨)
여러분의 클이언트 인증용 맵이 해당 웹 사이트에 접근하는 것이 거부되었다. 사이트 운영자에게 클라이언트 인증 허가를 요청한다. 또한 여러분은 여러분의 클라이언트 인증을 바꿀 수도 있다.

404 발견안됨
웹 서버가 요청한 파일이나 스크립트를 찾지 못했다. URL을 다시 잘 보고 주소가 올바로 입력되었는지 확인해본다.

405 메쏘드 허용안됨
Request 라인에 명시된 메쏘드를 수행하기 위해 해당 자원의 이용이 허용되지 않았다. 여러분이 요청한 자원에 적절한 MIME 타입을 갖고 있는지 확인해 본다.

406 받아들일 수 없음
요청 사항에 필요한 자원은 요청 사항으로 전달된 Acceptheader에 따라 "Not Acceptable"인 내용을 가진 Response 개체만을 만들 수 있다.

407 대리(Proxy) 인증이 필요함
해당 요청이 수행되도록 proxy 서버에게 인증을 받아야 한다. proxy서버로 로그온 한 후에 다기 시도해 본다.

412 선결조건 실패
Request-header field에 하나 이상에 선결조건에 대한 값이 서버에서 테스트 결과 FALSE로 나왔을 경우에 발생한다. 현재 자원의 메타-정보가 하나 이상의 자원에 적용되는 것을 막기 위한 클라이언트 선결조건이 의도되어졌다.

414 요청한 URI가 너무 길다
요청한 URI가 너무 길어서 서버가 요청 사항의 이행을 거부했다. 이렇게 희귀한 상황은 아래와 같은 경우에만 발생한다. 클라이언트가 긴 탐색용 정보를 가지고 POST 요청을 GET으로 부적절하게 전환했다. 클라이언트가 Redirection문제를 접하게 되었다. 서버가, 몇몇 서버가 사용하고 있는 요청한 URI 를 읽고 처리하는 고정된 길이의 메로리 버퍼를 이용해 보안체계에 들어가려는 , 클라이언트에 의한 공격을 받고 있다.

500 서버 내부 오류
웹 서버가 요청사항을 수행할 수 없다. 다시 한 번 요청해 본다.

501 적용안됨
웹 서버가 요청사항을 수행하는 데 필요한 기능을 지원하지 않는다. 에러가 발생한 URL을 확인한 후에, 문제가 지속될 경우에는 웹 서버 운영자에게 연락한다.

502 게이트웨이 상태 나쁨
Gateway나 proxy로 활동하고 있는 서버가 요구 사항을 접수한 upstream 서버로부터 불명확한 답변을 접수 했을 때 발생한다. 만약 문제가 지속된다면 웹 서버 운영자와 상의해 본다.

신고
Posted by naearu
연구_고민/리눅스2008.06.20 13:36

1. 먼저 압축하고자하는 디렉토리로 이동한다..
# cd /soruce


2. 다음과 같은 명령으로 압축을 실행한다.
# tar -cvf - ./ | split -b 1024m - target.tar

폴더의 권한까지 1기가로 압축을 하는 명령어입니다..
단순히 tar로 묶어줍니다..
(그냥 묶는것이 속도가 더 빠릅니다.그래서 저는 압축을 안하고 묶었습니다.)

만약 압축까지하려면 다음과 같은 명령어를 넣어줍니다.
# tar cvzf - 압축할디렉토리 | split -b 1024m - 압축파일.tar


3. 압축파일은 다음과 같은 형태로 저장되게 됩니다.
        압축파일.taraa
        압축파일.tarab
        압축파일.tarac
   뒤에 aa,ab,ac...가 붙게 됩니다..
   혹은
        압축파일.tar.gzaa

        압축파일.tar.gzab
        압축파일.tar.gzac


4. 압축풀기
 #cat target.tar* | tar -xvf -
혹은
 #cat target.tar.gz* | tar xvzf -

신고
Posted by naearu
연구_고민2008.05.20 09:43

IRC

IRC 프로토콜(RFC 1459)

  • 메시지 포맷
      <message>    ::= [':' <prefix> <SPACE> ] <command> <params> <crlf>
      <prefix>     ::= <servername> | <nick> [ '!' <user> ] [ '@' <host> ]
      <command>    ::= <letter> { <letter> } | <number> <number> <number>
      <SPACE>      ::= ' ' { ' ' }
      <params>     ::= <SPACE> [ ':' <trailing> | <middle> <params> ]
      <middle>     ::= <Any *non-empty* sequence of octets not including SPACE or NUL or CR or LF, the first of which may not be ':'>
      <trailing>   ::= <Any, possibly *empty*, sequence of octets not including NUL or CR or LF>
      <crlf>       ::= CR LF
      <target>     ::= <to> [ "," <target> ]
      <to>         ::= <channel> | <user> '@' <servername> | <nick> | <mask>
      <channel>    ::= ('#' | '&') <chstring>
      <servername> ::= <host>
      <host>       ::= see RFC 952 [DNS:4] for details on allowed hostnames
      <nick>       ::= <letter> { <letter> | <number> | <special> }
      <mask>       ::= ('#' | '$') <chstring>
      <chstring>   ::= <any 8bit code except SPACE, BELL, NUL, CR, LF and comma (',')>
      <user>       ::= <nonwhite> { <nonwhite> }
      <letter>     ::= 'a' ... 'z' | 'A' ... 'Z'
      <number>     ::= '0' ... '9'
      <special>    ::= '-' | '[' | ']' | '\' | '`' | '^' | '{' | '}'
      <nonwhite>   ::= <any 8bit code except SPACE (0x20), NUL (0x0), CR(0xd), and LF (0xa)>
      
  • 접속 과정
      • PING <msg>
        • PONG <msg> 로 보내주면 된다
    • 로그인
      • USER <name> <host> <user> :<Real Name>
        • name : 접속하는 사용자의 이름(사용자 정보에서 이메일 형식으로 나옴)
        • host, user : 호스트와 유저 이름이지만 실제 영향력은 없는듯..
        • Real Name : 사용자 정보에서 나오는 이름
      • NICK <nick>
        • nick : 실제 대화명(닉네임)
    • 보통 위의 과정을 거치면 환영 메시지가 나옴
  • 대화
    • PRIVMSG <nick|channel>[,<nick|channel>...] <message>
      • 수신자
        • channel : 채널명
      • message : 대화 내용
    • NOTICE 상동
    • PRIVMSG와 NOTICE의 차이점 확인할것
  • 채널 입장
    • JOIN <channel>
      • 471 ERR_CHANNELISFULL "<channel> :Cannot join channel (+l)"
      • 473 ERR_INVITEONLYCHAN "<channel> :Cannot join channel (+i)"
      • 474 ERR_BANNEDFROMCHAN "<channel> :Cannot join channel (+b)"
      • 475 ERR_BADCHANNELKEY "<channel> :Cannot join channel (+k)"
      • 465 ERR_YOUREBANNEDCREEP ":You are banned from this server"
      • 464 ERR_PASSWDMISMATCH ":Password incorrect"
  • 채널 퇴장
    • PART <channel>
  • 채널 관리(채널 오퍼레이터용)
    • MODE <channel> <mode> <nick|params>
      • params : 파라메터
      • (+|-)mode
        • o : 채널의 오퍼레이터 권한을 주거나 뺏는다
        • p : 비공개채널
        • s : 비밀채널
        • i : 초대만 가능한 채널
        • m : 제한된 채널
        • t : 오퍼레이터만 방제를 바꿀수있게한다
        • n : 밖에서 온 클라이언트의 메세지는 채널에 전달되지않는다
        • l : 채널에 들어올수있는 사용자의 수를 제한한다
        • b : 사용자를 계속 내보낼수있게 금지하는마스크
        • v : 제한된 채널에서 말할수있는 권한을 주거나 뺐는다
        • k : 채널에 비밀번호를 지정해놓는다
      • 324 RPL_CHANNELMODEIS "<channel> <mode> <mode params>"
      • 482 ERR_CHANOPRIVSNEEDED "<channel> :You're not channel operator"
      • 472 ERR_UNKNOWNMODE "<char> :is unknown mode char to me"
      • 467 ERR_KEYSET "<channel> :Channel key already set"
  • 토픽 변경
    • TOPIC <params>
      • 331 RPL_NOTOPIC "<channel> :No topic is set"
      • 332 RPL_TOPIC "<channel> :<topic>"
  • 목록 얻기
    • NAMES [<channel>[,<channel>]]
      • 채널명과 그 채널의 사용자 목록을 얻음
        • 353 RPL_NAMREPLY "<channel> :[[@|+]<nick> [[@|+]<nick> [...]]]"
        • 366 RPL_ENDOFNAMES "<channel> :End of /NAMES list"
    • LIST [<channel>[,<channel>]]
      • 채널명과 토픽명을 얻음
        • 비공개 채널일 경우 토픽명을 얻을수 없음
        • 비밀 채널일 경우 목록에 추가되지 않음
          • 321 RPL_LISTSTART "Channel :Users Name"
          • 322 RPL_LIST "<channel> <# visible> :<topic>"
          • 323 RPL_LISTEND ":End of /LIST"
  • 접속 종료
    • QUIT [message]
      • message : 종료시 표시될 메시지
신고
Posted by naearu
Controlling PHP Output: Caching and compressing dynamic pages
(PHP 출력 제어하기 : 동적 페이지를 케싱하고 압축하기)

mod_gzip 은 gzip encoding을 지원하는 브라우저(IE Netscape 등)를 위한 IETF 표준에 따라 Gzip을 사용해서 정적 html 페이지를 압축하는 아파치 모듈입니다. mod_gzip은 다운로드시간은 4/5배 정도 더 빠르게 만들어 줍기 때문에 웹 서버에서 mod_gzip을 사용하길 강력 추천합니다. 그러나 Apache 1.x.x에서 모듈간의 필터링 메커니즘이 없기 때문에 PHP가 생성한 출력을 mod_zip으로 압축하는 것은 불가능합니다. 그렇기 때문에 직접 PHP로 압축엔진을 제작해 주어야합니다. 이 글에서는 PHP출력 제어 함수를 사용해서 페이지가 빨리! 뜨게 하는 방법을 설명합니다.

- PHP 출력 제어 함수란

PHP4의 좋은 점 중 하나는 PHP의 모든 출력을 버퍼에 담을 수 있다는 점입니다. 즉 출력이 직접 그 내용을 전송하기 전까지 브라우저로 전송되지 않게 할 수 있습니다. 이 함수는 header()나 setcookie()함수와 같이 내용이 전송되기 전에 호출되어야 하는 함수와 같이 사용됩니다. 그러나 이 용법은 출력 제어함수의 이점의 일부밖에 되지 않습니다.

void ob_start(void);

이 함수는 PHP 실행기에게 스크립트의 모든 출력을 내부 버퍼에 저장하게 합니다. ob_start()함수가 호출된 이후에는 이떠한 출력도 브라우저로 전송되지 않습니다.

string ob_get_contents(void);

이 함수는 내부 버퍼의 내용을 문자열로 리턴해 줍니다. 이 함수를 사용해서 버퍼에 축적된 출력을 (버퍼 기능을 off한 다음에) 읽어올 수 있습니다.

int ob_get_length(void);

버퍼에 축적된 내용의 길이를 리턴합니다.

void ob_end_clean(void);

버퍼 내용을 지우고 버퍼 기능을 off합니다. 내용을 브라우저로 전송하려면 이 함수를 사용해서 버퍼링 기능을 off해야합니다.

void ob_implicit_flush ([int flag])

이 함수는 자동 플러쉬(implicit flush)를 하게 합니다. 기본 값은 off입니다. 이 값이 on이면 모든 print/echo 함수가 호출될 때마다 flush가 실행되어서 즉시 브라우저로 전송되는 효과를 가져옵니다.

- PHP 출력을 압축하기 위해 출력 제어 함수 사용하기

출력을 압축하려면 PHP4를 컴파일 할 때 Zlib 확장기능을 추가해야 합니다.

1단계 : 출력 버퍼링을 초기화해줍니다.

<?php

ob_start();
ob_implicit_flush(0);

?>

2 단계 : 출력하고자 하는 내용을 print 든 echo든 뭐든지 간에 그냥 출력합니다. (브라우저에는 출력되지 않고 버퍼에 내용이 쌓입니다)

<?php

print("Hey this is a compressed output!");

?>

3단계 : 이렇게 버퍼에 쌓인 페이지를 읽어 옵니다.

<?php

$contents = ob_get_contents();
ob_end_clean();

?>

4단계 : 브라우저가 압축된 데이터를 지원하는지 검사합니다. 지원 여부는 브라우저가 서버에 request할 때 ACCETP_ENCODING 헤더(http 헤더)를 포함하고 있다는 점을 이용합니다. 즉 $HTTP_ACCEPT_ENCODING 변수에 "gzip, deflate"라는 내용이 있는지 검사합니다.

<?php

if(ereg('gzip, deflate',$HTTP_ACCEPT_ENCODING)) {
// 여기서 gzip으로 압축해서 내용을 전송
} else {
echo $contents;
}

?>

그렇게 복잡하지 않습니다. 이제 gzip으로 압축한 정보를 어떻게 생성하는지 한번 살펴봅시다.

(php.net에서 인용한 소스)

<?php

// Tell the browser that they are going to get gzip data
// Of course, you already checked if they support gzip or x-gzip
// and if they support x-gzip, you'd change the header to say
// x-gzip instead, right?
header("Content-Encoding: gzip");

// Display the header of the gzip file
// Thanks ck@medienkombinat.de!
// Only display this once
echo "x1fx8bx08x00x00x00x00x00";

// Figure out the size and CRC of the original for later
$Size = strlen($contents);
$Crc = crc32($contents);

// Compress the data
$contents = gzcompress($contents, 9);

// We can't just output it here, since the CRC is messed up.
// If I try to "echo $contents" at this point, the compressed
// data is sent, but not completely. There are four bytes at
// the end that are a CRC. Three are sent. The last one is
// left in limbo. Also, if we "echo $contents", then the next
// byte we echo will not be sent to the client. I am not sure
// if this is a bug in 4.0.2 or not, but the best way to avoid
// this is to put the correct CRC at the end of the compressed
// data. (The one generated by gzcompress looks WAY wrong.)
// This will stop Opera from crashing, gunzip will work, and
// other browsers won't keep loading indefinately.
//
// Strip off the old CRC (it's there, but it won't be displayed
// all the way -- very odd)
$contents = substr($contents, 0, strlen($contents) - 4);

// Show only the compressed data
echo $contents;

// Output the CRC, then the size of the original
gzip_PrintFourChars($Crc);
gzip_PrintFourChars($Size);

// Done. You can append further data by gzcompressing
// another string and reworking the CRC and Size stuff for
// it too. Repeat until done.

function gzip_PrintFourChars($Val) {
for ($i = 0; $i < 4; $i ++) {
echo chr($Val % 256);
$Val = floor($Val / 256);
}
}

?>

If you want to test it as a working example, the whole script is:

<?php

// Start the output buffer
ob_start();
ob_implicit_flush(0);

// Output stuff here...
print("I'm compressed!n");

$contents = ob_get_contents();
ob_end_clean();

// Tell the browser that they are going to get gzip data
// Of course, you already checked if they support gzip or x-gzip
// and if they support x-gzip, you'd change the header to say
// x-gzip instead, right?
header("Content-Encoding: gzip");

// Display the header of the gzip file
// Thanks ck@medienkombinat.de!
// Only display this once
echo "x1fx8bx08x00x00x00x00x00";

// Figure out the size and CRC of the original for later
$Size = strlen($contents);
$Crc = crc32($contents);

// Compress the data
$contents = gzcompress($contents, 9);

// We can't just output it here, since the CRC is messed up.
// If I try to "echo $contents" at this point, the compressed
// data is sent, but not completely. There are four bytes at
// the end that are a CRC. Three are sent. The last one is
// left in limbo. Also, if we "echo $contents", then the next
// byte we echo will not be sent to the client. I am not sure
// if this is a bug in 4.0.2 or not, but the best way to avoid
// this is to put the correct CRC at the end of the compressed
// data. (The one generated by gzcompress looks WAY wrong.)
// This will stop Opera from crashing, gunzip will work, and
// other browsers won't keep loading indefinately.
//
// Strip off the old CRC (it's there, but it won't be displayed
// all the way -- very odd)
$contents = substr($contents, 0, strlen($contents) - 4);

// Show only the compressed data
echo $contents;

// Output the CRC, then the size of the original
gzip_PrintFourChars($Crc);
gzip_PrintFourChars($Size);

// Done. You can append further data by gzcompressing
// another string and reworking the CRC and Size stuff for
// it too. Repeat until done.


function gzip_PrintFourChars($Val) {
for ($i = 0; $i < 4; $i ++) {
echo chr($Val % 256);
$Val = floor($Val / 256);
}
}

?>

(주 : ^^; 주석이 넘 길군요.....ㅠ,.ㅠ 회사일이 넘 많아서 번역 생략. 용서 ok?)

- PHP 출력을 caching하기

PHP4가 나오기 전에는 PHP3로 데이터베이스와 파일시스템 등에 걸리는 부하를 줄이기 위해 caching 메커니즘을 개발하는데 관심이 많았습니다. PHP4에서는 출력 버퍼링이라는 기능 대문에 훨씬 간단하게 구현할 수 있게 되었습니다.
다음은 그 간단한 예제입니다.

<?php

// 요청한 URI에 대한 cache 파일명을 임의로 생성
$cached_file=md5($REQUEST_URI);

// cache파일이 존재하지 않거나
// cache파일을 새로 만들어야 할 때에만 if절 내부 실행
if((!file_exists("/cache/$cached_file"))||(!is_valid("/cache/$cached_file"))) {
// is_valid함수는 cache파일을 검사하기 위해 자신이 직접 작성합니다.
// 즉 파일이 오래 되었는지...등의 검사를 해서 cache파일이 새로 작성되어야
// 하는지를 알 수 있도록 합니다.

ob_start();
ob_implicit_flush(0);

// 실제 이 페이지의 출력 부분.......

$contents = ob_get_contents();
ob_end_clean();

// cache파일 생성
$fil=fopen($cached_file,"w+");
fwrite($fil,$contents,$strlen($contents));
fclose($fil);
}

// cache 파일 출력
readfile($cached_file);

?>

이 예제는 간단한 예제입니다. 출력 버퍼링을 사용하면 꽤 진보된 내용 생성 시스템을 구축할 수 있습니다. 출력 버퍼링을 사용하면 XML과 XSLT를사용해서 XML제어에도 많은 이득을 볼 수 있습니다.

- 역자 주
여기서 서술한 내용은 여러분들의 gzip과 mod_gzip 출력 제어 함수 등의 내용을 공부하시는데 도움이 되었으면 하고 번역했습니다. 실제로 이 과정은 단 한 줄로 끝낼 수도 있고 php.ini등으로 자동으로 되게끔 셋팅할 수도 있습니다.
다음 라인을 스크립트 가장 처음에 추가하면 출력되는 정보가 자동으로 압축됩니다.

ob_start("ob_gzhandler");

또는 다음 라인을 php.ini에 넣으면 자동으로.... ^^;

output_handler = ob_gzhandler

출력 버퍼링이 대한 좋은 글은 http://www.zend.com/zend/art/buffering.php를 참고합니다.
신고
Posted by naearu
연구_고민2008.02.02 01:19
API Description Category Updated
Google AdSense Advertising management Advertising 2006-06-04
Google AdWords Search advertising Advertising 2006-05-14
Lat49 Geo-targeted advertising for online maps Advertising 2008-01-05
Microsoft adCenter Online advertisting services Advertising 2006-09-25
Right Media Exchange Advertising management Advertising 2007-12-31
UrlTrends Link tracking and search optimization Advertising 2005-09-08
Wordtracker Search engine optimization services Advertising 2006-02-14
Yahoo Ads Online ad management Advertising 2006-04-25
Yahoo Search Marketing Search advertising platform Advertising 2007-06-04
Answerbag Questions and answers service Answers 2007-02-15
True Knowledge General question and answers service Answers 2007-12-06
Blogwise Blog and feed search service Blog Search 2005-11-19
myFeedz Blog services Blog Search 2008-02-09
PubSub Blog and feed search Blog Search 2005-09-04
Spinn3r Blog search index service Blog Search 2007-12-13
SplogSpot Database of spam blogs Blog Search 2006-01-24
Tailrank Blog search and news aggregation service Blog Search 2006-01-22
Technorati Blog search services Blog Search 2006-02-15
Akismet Blog spam prevention service Blogging 2006-09-27
AOL Journals Blogging platform Blogging 2007-10-02
Blogger Blogging services Blogging 2006-02-08
Disqus Blog comments management Blogging 2008-01-27
FeedBlitz Blogs by email service Blogging 2006-12-26
FeedBurner Blog promotion tracking service Blogging 2006-02-15
Freewebs Web publishing platform Blogging 2007-09-27
LiveJournal Blogging software Blogging 2005-09-06
Performancing Blog management Blogging 2006-06-19
Poodz Microblogging service Blogging 2007-12-11
PostMapper Mapping service for blog posts Blogging 2008-02-10
TypePad Blog management Blogging 2005-09-04
Weblogs Blog ping service Blogging 2006-06-23
Windows Live Spaces Blog services Blogging 2006-01-19
BibSonomy Social bookmarking Bookmarks 2007-12-09
Blogmarks Social bookmarking Bookmarks 2005-10-30
Blue Dot Content sharing community Bookmarks 2006-09-18
Cogenz Social bookmarking service Bookmarks 2007-09-20
Connotea Bookmark and reference sharing for researchers Bookmarks 2007-10-20
del.icio.us Social bookmarking Bookmarks 2005-10-30
GroupMe Social bookmarking Bookmarks 2007-12-25
Jots Social bookmarking Bookmarks 2005-12-13
linkaGoGo Social bookmarking service Bookmarks 2006-03-09
Ma.gnolia Social bookmarking service Bookmarks 2006-05-29
OnlyWire Social bookmarklet service Bookmarks 2006-03-01
Rrove Social Bookmarking for Places Create & Share Maps Bookmarks 2006-02-23
Scribble Link manager Bookmarks 2005-09-07
Shadows Social bookmarking and community Bookmarks 2005-11-19
Simpy Social bookmarking Bookmarks 2005-10-30
30 Boxes Calendar service Calendar 2006-02-24
Google Calendar Calendar service Calendar 2006-04-20
Spongecell Online calendar service Calendar 2006-08-25
hon.jp Japanese eBook metadata service Catalog 2006-06-14
AOL Instant Messenger Instant messaging chat service Chat 2006-03-30
AOL Presence Online presence service Chat 2006-03-30
Google Talk Chat application Chat 2005-12-03
Gtalkr Flash chat wrapper for Gtalk Chat 2005-12-03
IMified Instant messenger buddy Chat 2007-07-08
Lingr Online chatroom services Chat 2007-01-30
Meebo Web based messaging platform Chat 2007-11-02
MSN Messenger Chat and messaging Chat 2005-12-08
WebAIM Web based instant messaging Chat 2006-12-01
Yahoo Messenger Instant messaging Chat 2006-06-21
Bebo Social network Community 2007-12-12
Cambrian House Crowdsourcing service Community 2007-10-10
coRank Distributed user reviews service Community 2007-08-13
Facebook Social networking service Community 2006-08-16
Flux Social networking platform from Viacom Community 2008-02-16
Friendster Social networking service Community 2007-10-25
Google Social Graph Search service for finding social connections Community 2008-02-01
Hi5 Social network service Community 2007-10-12
LinkedIn Business social networking platform Community 2007-12-10
MyBlogLog Social footprint sharing service Community 2008-01-19
MySpace Social networking service Community 2007-12-31
Ohloh Open source software directory and community Community 2008-01-03
OpenSocial Common APIs for building social applications Community 2007-11-04
Orkut Social network from Google Community 2007-11-08
PartySpark Social events service Community 2006-11-18
PeopleAggregator Social networking platform and service Community 2007-12-29
Pownce Social networking and micro-blogging service Community 2007-11-02
RapLeaf Portable reputation system Community 2006-08-13
RockYou Super Wall Platform for content sharing within Facebook Community 2007-08-07
Slifeshare Lifestreaming network Community 2007-11-28
Tumblr Web scrapbook post and view service Community 2008-02-10
Twitter Community site Community 2006-12-08
Wakoopa Software usage community service Community 2007-12-26
Amazon SimpleDB Online database service Database 2007-12-16
Carma Carbon emissions data Database 2007-11-26
DabbleDB Online database service Database 2007-01-07
Freebase Community driven open database Database 2007-10-13
gubb List creation and management Database 2007-05-15
HotOrNot Dating rating site Dating 2005-10-30
AOL Open Mail Email services Email 2008-01-08
Email Address Validator Email address validation service Email 2006-11-11
Email2HTTP Email delivery services Email 2008-01-04
ExactTarget Email delivery services Email 2006-06-13
Google Apps Email Migration Migrate existing email systems to Google Apps Email 2007-11-18
IntelliContact Email marketing service Email 2007-05-15
JangoMail Bulk email service Email 2006-08-20
Mailbuild Email forms and templates service Email 2007-04-15
MailChimp Email campaign management service Email 2007-12-21
Orange Email Email service Email 2008-02-10
Publicaster Email marketing management Email 2007-08-14
StrikeIron Email Verification Email verification service Email 2006-09-29
Undisposable Collaborative protection against disposable email Email 2007-11-12
VerticalResponse Email management services Email 2007-04-26
Webmail.us Email hosting service Email 2007-02-10
WhatCounts Email management services Email 2007-03-10
Yahoo Mail Web based email system Email 2007-03-28
Employease On-demand human resource management Enterprise 2007-04-01
Google Provisioning User provisioning for Google Apps Enterprise 2007-02-23
Highrise Online contact manager and CRM Enterprise 2007-11-18
Lokad Online time series forecaster Enterprise 2007-05-22
NetDocuments Enterprise document management service Enterprise 2007-04-23
NetSuite On-demand business application suite Enterprise 2007-04-01
OnForce Work order handling service Enterprise 2007-12-30
Persony Conferencing and collaboration services Enterprise 2008-02-07
Plaxo Address book management Enterprise 2006-02-03
QuickBase Workgroup applications management Enterprise 2008-01-03
Salesforce.com CRM services Enterprise 2005-11-09
WebEx Conferencing and collaboration services Enterprise 2006-12-08
Workday ERP business services Enterprise 2008-01-02
Eventfinder New Zealand events calendar Events 2007-04-02
Eventful Events discovery and demand Events 2005-10-31
Spraci Events and clubs database Events 2006-02-14
Upcoming.org Collaborative event calendar Events 2005-11-19
Zvents Local events search and community Events 2006-02-14
Interfax Fax services Fax 2006-08-31
Bloglines Online feed aggregator Feeds 2005-09-04
fav.or.it RSS reader and blog platform Feeds 2008-02-10
Google Ajax Feeds Access RSS and Atom feeds with JavaScript Feeds 2007-04-20
NewsGator Feed aggregation Feeds 2005-09-04
Syndic8 News feed aggregation services Feeds 2005-11-03
FilesTube Search engine for files File Sharing 2007-12-23
Pando File delivery and management services File Sharing 2008-02-03
Prodigem File sharing via BitTorrent File Sharing 2005-10-30
Amazon DevPay License Service Amazon web services licensing Financial 2008-01-01
Blinksale Online invoicing services Financial 2006-11-01
Currency Rates Currency rates for 115 countries Financial 2006-10-15
Dun and Bradstreet Credit Check Credit quick check web service Financial 2006-12-13
FreshBooks Online invoicing and time tracking Financial 2006-09-19
Gastus Expense tracking Financial 2008-01-06
KashFlow Online accounting software Financial 2007-07-25
Moneytrackin Expense tracking Financial 2007-04-02
NetAccounts Online accounting service Financial 2006-03-27
Prosper Peer-to-peer lending network Financial 2007-05-07
StrikeIron Historical Stock Quotes Stock price quotes for US equities Financial 2006-10-31
StrikeIron Mutual Funds Historical mutual funds price service Financial 2006-11-19
StrikeIron Stock Quotes Basic Real-time stock quotes Financial 2006-09-18
Wesabe Personal finance management and community Financial 2007-07-12
Xignite Realtime U.S. Real-Time Stock Market Quotes Financial 2007-10-01
XigniteCurrencies Real-time currency exchange rates Financial 2008-01-26
XigniteRates International interest rate data Financial 2008-01-26
Food Candy Social site for foodies Food 2006-08-07
Aevum Obscurum Online multiplayer strategy game Games 2007-11-28
Bunchball Multiplayer game platform Games 2006-02-03
BuzzGame Search based game Games 2006-02-02
Dominions Dice Dice throwing service Games 2006-08-15
EVE Online Massively multiplayer online science fiction games Games 2007-07-15
Social Gaming Network Developer platform for social games Games 2008-02-14
Zynga Developer platform for social games Games 2008-02-14
Cicero Lookup service for US Elected Officials by Address Government 2007-04-10
Civic Footprint Political geography lookup for Illinois Government 2006-05-19
Democracy In Action eAdvocacy services for nonprofits Government 2007-03-05
FedSpending.org Database of US government spending Government 2007-04-26
Follow The Money Database of US campaign contributions Government 2006-11-02
GovTracker Rhode Island state data services Government 2006-07-19
LOUIS US federal documents database Government 2007-06-29
Maplight Government database linking contributions and votes Government 2007-11-04
Open Patent Services European Patent Office web services Government 2007-06-26
Sunlight Labs US Congress database service Government 2007-02-27
TheyWorkForYou Track the UK Parliament Government 2007-02-26
USAspending Database of US government spending Government 2008-01-04
Who is my Representative Database of US congressional representatives Government 2007-02-20
Alexa Site Thumbnail Thumbnail images of web site home pages Internet 2006-08-04
Alexa Top Sites Web site traffic rankings Internet 2006-08-04
Amazon EC2 Elastic Compute Cloud virtual hosting Internet 2006-08-25
Clicky Web site analytics Internet 2007-07-27
Compete Internet web site metrics and analytics Internet 2007-02-26
Cordurl Geo coordinate translation service Internet 2007-02-15
Cownt Us Web site analytics Internet 2007-12-09
Dapper Service for API creation Internet 2006-08-18
Domain Tools Internet domain name lookup services Internet 2007-03-10
durl.us URL shortening service Internet 2006-05-19
ecommstats Web analytics Internet 2005-12-28
FormSpring Online forms service Internet 2007-09-16
G8L.US URL shortening service Internet 2008-02-10
hostip.info IP lookup Internet 2005-09-04
HTML2PDF HTML to PDF conversion service Internet 2007-05-14
Internet Archive Non-profit Internet library Internet 2005-09-10
IP Address Lookup Determine IP address from domain name Internet 2006-12-13
Mint Web site metrics and reporting Internet 2006-01-06
Mon.itor.us Web site monitoring services Internet 2007-03-10
MyNotify Feed publication service Internet 2006-12-13
Nenest Web forms and application framework Internet 2007-04-15
Outune Web map engine service Internet 2006-10-22
Pingdom Web site monitoring and reporting services Internet 2006-11-29
Qurl URL redirection services Internet 2005-12-28
SimpleAPI Web site thumbnail image creation Internet 2008-02-14
SoftLayer Systems management and monitoring Internet 2007-05-29
Tinylink URL shortening service Internet 2007-10-25
unAPI Proposal for web clipboard Internet 2006-03-28
W3Counter Web site metrics tools Internet 2006-06-01
Webride Attaches discussions to any site Internet 2006-06-06
WebSitePulse Web site and application monitoring service Internet 2007-12-25
WebThumb Thumbnail image generation service Internet 2006-11-01
Windows Live Admin Center Web site administration services Internet 2007-01-29
Yahoo Site Explorer Web site analysis service Internet 2007-02-01
indeed Job search services Job Search 2005-09-04
SmashFly Job board posting service Job Search 2006-01-08
ArcWeb Mapping and GIS services Mapping 2006-02-09
BigTribe Location based advertising Mapping 2007-04-15
deCarta Location-based services Mapping 2005-09-11
EarthTools Web services for geographical information Mapping 2007-01-03
FeedMap Blog geo-coding Mapping 2006-02-15
Garmin MotionBased GPS services and mapping Mapping 2007-06-05
geocoder Geocoding services for US Mapping 2006-02-15
geocoder.ca Geocoding services for Canada Mapping 2006-02-15
GeoIQ Geospatial analysis and heat mapping service Mapping 2006-11-15
GeoNames Geographic name and postal code lookup Mapping 2006-01-12
GeoSmart New Zealand geospatial and mapping services Mapping 2007-11-18
GetMapping Aerial photography and mapping service Mapping 2007-08-15
GlobeXplorer Mapping services Mapping 2006-07-09
Google Maps Mapping services Mapping 2005-12-05
HopStop Mass transit and walking directions Mapping 2007-05-15
iShareMaps On Demand UK Postcode Geocoder Mapping 2006-05-22
Map24 AJAX API Mapping services Mapping 2006-09-01
Mappr Photo mapping Mapping 2006-02-14
MapQuest Online mapping service Mapping 2006-03-07
Mapstraction Mapping API abstraction layer Mapping 2006-07-04
MetaCarta Location and geotagging services Mapping 2006-07-05
Microsoft MapPoint Mapping services Mapping 2005-11-19
Microsoft Virtual Earth Mapping services Mapping 2005-12-02
Multimap Global online mapping service Mapping 2007-03-23
NASA Satellite mapping images Mapping 2005-09-06
Naver Maps Korean mapping service Mapping 2006-08-15
Nearby.org.uk Geocoding service for UK Mapping 2006-03-22
Ontok Geocode any US address Mapping 2005-11-01
OpenLayers Mapping API abstraction layer Mapping 2006-07-09
OpenStreetMap The Free Wiki World Map Mapping 2005-12-28
Ordnance Survey OpenSpace Online mapping service Mapping 2007-12-18
Platial Collaborative geographic service Mapping 2006-08-31
Plazes Location discovery service Mapping 2005-09-04
Poly9 FreeEarth 3D mapping service Mapping 2007-05-10
Pushpin Mapping service Mapping 2006-09-22
Urban Mapping Urban geo-spatial data services Mapping 2007-05-22
USGS Elevation Query Service Determine elevation based on latitude and longitude Mapping 2007-01-23
ViaMichelin Mapping, directions, and travel booking services Mapping 2007-06-20
Wayfaring Map creation and sharing service Mapping 2006-02-24
WHERE GPS Mobile GPS widget platform Mapping 2006-06-06
Where Is Tim Web Service Location tracking Mapping 2006-09-11
Where2GetIt Geospatial Non-mapping geospatial services Mapping 2006-11-12
Where2GetIt SlippyMap Online mapping service Mapping 2006-11-12
Whereis Australian and New Zealand mapping service Mapping 2007-04-15
Wigle Wireless network mapping Mapping 2005-10-09
Yahoo Geocoding Geocoding services Mapping 2006-02-14
Yahoo Map Image Map image creation service Mapping 2005-11-19
Yahoo Maps Mapping services Mapping 2005-11-19
ZeeMaps Embedded maps and international geocoding Mapping 2006-02-23
ZoomIn New Zealand mapping service Mapping 2006-05-10
BBC Multimedia archive database Media Management 2006-05-05
Cellblock Real-time Multimedia File Sharing Media Management 2007-11-18
Grouper Video Video sharing service Media Management 2006-03-20
Ipernity Media sharing service Media Management 2007-08-27
Orb Digital media remote access and management Media Management 2005-09-25
Phanfare Photo and video sharing service Media Management 2007-01-20
Streamload Online media storage Media Management 2006-03-10
Yahoo Audio Search Music search services Media Search 2005-09-04
cPath Medical database lookup Medical 2005-09-04
Kegg Bioinformatics data services Medical 2006-08-23
NCBI Entrez Life sciences search services Medical 2006-07-16
SeqHound Bioinformatics research database Medical 2005-09-04
411Sync SMS, WAP, and email messaging Messaging 2006-02-08
aql SMS solutions portal Messaging 2007-07-01
Clickatell SMS Messaging services Messaging 2006-09-07
Esendex Esendex Business SMS Text Messaging Service Messaging 2007-08-06
Jaiku Social messaging service Messaging 2007-05-07
Jott Voice to email and text service Messaging 2007-12-25
Mobivity SMS marketing messaging service Messaging 2007-01-19
Movil SMS messaging Messaging 2005-10-05
Orange SMS SMS text messaging service Messaging 2008-02-10
PartySync Messaging services Messaging 2005-12-31
sabifoo IM to RSS conversion service Messaging 2006-05-02
smsBug SMS messaging services Messaging 2006-02-23
StrikeIron Global SMS Pro SMS messaging services Messaging 2007-03-05
StrikeIron Mobile Email Mobile email messaging service Messaging 2006-09-14
Textamerica Moblogs Messaging 2006-01-22
Thumbplay Mobile content provider Messaging 2007-10-11
Trekmail Messaging services Messaging 2005-09-05
Twittervision Location based data for the Twitter service Messaging 2007-04-23
Userplane Communication software for online communities Messaging 2006-12-01
Vazu SMS messaging service Messaging 2005-11-27
Vodafone Betavine Mobile web services Messaging 2007-06-11
Windows Live Messenger IM Control Web based chat service Messaging 2008-01-13
Windows Live Presence Online presence service Messaging 2008-01-13
Digital Podcast Podcast search Music 2005-09-04
Discogs Music database Music 2007-08-27
Faces.com Photo and media sharing service Music 2007-02-16
Feedcache Feed caching service Music 2006-06-27
Freedb / CDDB Online CD catalog service Music 2005-09-04
Gruvr Live music and concert information Music 2007-12-31
JamBase Live music and concert information Music 2007-09-27
Last.fm Music playlist management Music 2005-10-30
Lyricsfly Song lyrics search engine Music 2008-01-02
MP3Tunes Music services Music 2006-07-16
MusicBrainz Music metadata community service Music 2006-07-16
MusicDNS.org Music fingerprinting service Music 2006-07-16
MusicMobs Social music service Music 2006-07-16
OpenStrands Music recommendation and discovery Music 2006-05-18
RadioTime Music and talk radio service Music 2007-12-31
Rhapsody Online music services Music 2006-06-01
SeeqPod Music recommendation service Music 2006-11-04
SNOCAP Digital music marketplace Music 2007-04-03
soundtoys Visual artists works repository Music 2006-03-01
Tunelog Music metadata management Music 2006-04-23
WebJay Music playlist management Music 2005-09-04
Winamp Customizable music player Music 2006-12-01
Yahoo Music Engine Desktop music player Music 2005-11-09
AmphetaRate News aggregator News 2005-09-18
ClearForest Semantic Web Services1 Natural language processing tools News 2006-10-10
Daylife Online News Service News 2007-08-08
Digg Community driven news links and ratings News 2007-04-20
Findory Personalized news aggregation News 2006-01-22
Macromedia News Aggregator Data access service News 2006-03-02
Moreover News delivery News 2005-09-12
NewsCloud Social news service News 2006-10-16
NewsIsFree Online news aggregation News 2005-12-28
Backpack Online information manager Office 2006-02-08
Big Contacts Web based contact management Office 2007-03-16
EditGrid Online spreadsheet Office 2006-07-29
Google Documents List Document management services Office 2007-08-07
Google Spreadsheets Online spreadsheets Office 2006-12-02
MindMeister Collaborative online mind mapping Office 2008-02-10
Numbler Online spreadsheet service Office 2006-06-15
SlideShare Presentation sharing community Office 2007-07-26
ThinkFree Document management services Office 2007-12-26
Zoho Online office suite Office 2006-12-01
43Things Social goal setting Other 2005-10-30
activeRenderer Outline publishing for Radio UserLand Other 2005-09-04
Adobe on AIR Bus Tour Services to track Adobe AIR product launch Other 2007-07-13
Amazon Mechanical Turk Request services of humans Other 2006-01-22
Amazon Queue Service Internet-based queuing service Other 2006-08-03
AMEE Avoiding Mass Extinctions Engine - CO2 calculations Other 2007-09-21
Amnesty International Database of censored sites and data Other 2006-10-28
Approver Services for document approval and review Other 2006-11-24
Autodesk Freewheel CAD model viewing, printing and collaboration Other 2007-07-12
Betfair Online betting exchange Other 2006-03-09
Bible Gateway Bible lookup services Other 2007-07-23
Bible Lookup Bible lookup service Other 2006-01-14
bLaugh Comics Online comic strip Other 2006-10-28
BT Web21C Communications services APIs Other 2007-03-07
CafeSpot Social guide to cafes Other 2006-02-08
Calais Semantic data search and extraction service Other 2008-01-31
Cdyne Data delivery services Other 2005-10-01
Cdyne Notify Create voice messages from text Other 2006-11-24
CommonTimes Community based media distribution Other 2005-10-04
Convio Non profit online fundraising Other 2007-10-25
Creative Commons Licensing engine integration Other 2005-09-04
Dropcash Fundraising tools Other 2006-02-15
EchoSign Document management and verification service Other 2006-11-29
Engagd Attention data management platform Other 2007-08-05
eSideWalk Community networking site Other 2006-02-05
ESV Bible Lookup Bible lookup service Other 2005-09-04
FeedFlow Feed monitoring service Other 2006-02-23
Google Chart Chart creation service Other 2007-12-06
Google Gears Tools for offline browser extensions Other 2007-05-31
GraphMagic Graph and chart services Other 2005-09-12
Haystack Networking Social networking for business Other 2006-10-10
iGoogle Themes Google homepage design service Other 2008-01-19
Kintera Fundraising and donor management Other 2008-02-11
Kuler Adobe web service for creating color themes Other 2007-09-01
Litmus Cross-browser compatibility testing Other 2008-01-06
Living Stones Bible lookup service Other 2006-04-11
Lulu Publishing Programmatically publish books Other 2007-12-04
Microsoft Silverlight Streaming Streaming application management service Other 2007-05-01
MuseStorm Web services tools Other 2007-04-01
Ning Service creation playground Other 2005-10-11
Pathfinder Air cargo tracking service Other 2006-04-17
Random House Book search and viewing service Other 2007-08-14
Raw Sugar Web directory service Other 2006-03-06
SecondLife Virtual world Other 2006-01-29
SharedBook On-demand reverse publishing system Other 2007-04-10
Skyhook Wireless Wifi positioning services Other 2006-07-29
Snipplr Code sharing service Other 2007-12-30
Sparklines Graph generation service Other 2006-04-01
StrikeIron API marketplace services Other 2006-09-27
StrikeIron Address Distance Calculation of distances between addresss Other 2006-08-23
StrikeIron Tax Service Sales tax reference lookup Other 2006-08-29
StrikeIron US Addresses US address verification service Other 2006-08-29
Tabblo Web based printing service from HP Other 2007-07-02
Taleo Workforce management services Other 2006-09-07
TeamDesk Web based database application service Other 2006-12-18
The Astrologer Astrology services Other 2007-05-15
Topicalizer Document analysis service Other 2006-03-23
TradeSports Online sports betting exchange Other 2006-11-12
Trynt Term extraction service Other 2006-05-21
Tutorials Garden Online tutorials service Other 2007-01-29
voo2do Task management Other 2006-02-14
We Feel Fine Art project that harvests feelings from blogs Other 2007-08-05
WebPurify Profanity filtering service Other 2007-01-14
Wufoo Online forms creation service Other 2007-03-17
Yahoo Traffic Traffic data and routing Other 2005-11-19
ZipCodes Simple zip code lookup service Other 2005-10-31
ZoomClouds Tag cloud service Other 2006-03-01
OReilly Safari Book search Other Search 2005-09-04
Amazon Flexible Payments Service eCommerce payments service Payment 2007-08-03
PayPal Online payments Payment 2005-09-04
23 Photo sharing service Photos 2006-02-13
AOL Pictures Online photo management Photos 2006-10-01
Buzznet Photo sharing Photos 2005-10-30
Flickr Photo sharing service Photos 2005-09-04
FotoFlexer Online image editor Photos 2007-09-12
Fotolia Royalty free stock photos Photos 2007-01-01
Google Picasa Photo management and sharing service Photos 2007-03-23
imageLoop Animated slideshow service Photos 2007-01-14
Panoramio photo upload site with organizer and geolocation Photos 2007-06-12
Picnik Online photo editing service Photos 2007-11-04
Pikeo Picture sharing service Photos 2007-10-07
Pixagogo Online photo services Photos 2006-02-14
Pixenate Online photo editing Photos 2007-10-27
Riya Photo search Photos 2006-06-17
ShutterPoint Stock photography service Photos 2007-05-22
Smugmug Photo sharing service Photos 2005-11-01
Snipshot Online photo editing service Photos 2006-12-13
WebShots Photo sharing service Photos 2006-06-27
Windows Live Spaces Photo Photo management services Photos 2007-12-17
Windows Live Spaces Photo Control Programmable widget for blog photos Photos 2007-05-01
XmgImage Photo sharing and editing Photos 2007-11-12
Yahoo Photos Online photo service Photos 2006-10-01
Zoto Photo sharing service Photos 2006-03-01
Nozbe Personal productivity service using GTD PIM 2007-09-01
Remember the Milk Personal information management PIM 2006-05-18
Tiktrac Timesheet management PIM 2007-02-04
Toodledo To-do list management PIM 2006-11-19
Windows Live Contacts Contacts database PIM 2007-05-01
Windows Live Contacts Control Contacts control PIM 2006-10-18
Assembla Online project collaboration service Project Management 2008-02-10
Basecamp Project collaboration service Project Management 2006-03-29
Goplan Online project management Project Management 2007-03-17
Unfuddle Bug and issue tracking Project Management 2007-12-18
Nestoria UK real estate listings Real Estate 2006-07-29
PlanningAlerts Alerts service for UK local planning alerts Real Estate 2007-05-29
Rentometer Realestate pricing services Real Estate 2007-09-01
Trulia Real estate search Real Estate 2007-02-21
Zillow Real estate pricing and valuations Real Estate 2006-10-26
Arkayne Content Linking Widget Based On Post Similarity Recommendations 2007-12-23
Baynote Recommendations service Recommendations 2007-10-09
Boo-box Recommendation service Recommendations 2008-01-27
CleverSet Recommendations service for eCommerce sites Recommendations 2007-12-17
Criteo Distributed recommendation service Recommendations 2007-01-30
EasyUtil Recommendation service Recommendations 2006-02-14
Loomia Recommendation service Recommendations 2007-10-12
WSRelater Recommendation engine Recommendations 2005-11-27
Yelp Local user reviews and city guides Recommendations 2007-08-03
Aonaware Dictionary Dictionary lookup service Reference 2006-11-19
CatalogWS Academic library Reference 2008-02-07
City and State by Zip Code Address lookup service Reference 2006-11-19
Dun and Bradstreet Business Verification Research company background data Reference 2006-09-23
Dun and Bradstreet WorldBase Marketing Plus Business research services Reference 2006-09-23
FUTEF Wikipedia API Third party Wikipedia web service Reference 2007-01-23
Holidays Service Holiday dates lookup service Reference 2006-10-20
ISBNdb Books database Reference 2006-03-01
Library of Congress SRW Information database search Reference 2006-03-10
LibraryThing Books database and community Reference 2008-02-09
Microsoft MSDN Technical reference library Reference 2006-06-14
OpenDOAR Academic research repository Reference 2007-05-21
PhoneVal Phone number validation service Reference 2006-12-18
RealEDA Reverse Phone Lookup Lookup address and name via phone Reference 2006-10-31
SRC Demographics Demographic reference data Reference 2006-06-13
StrikeIron Address Verfication Global address verification service Reference 2006-10-20
StrikeIron Do Not Call Telephone number verification serice Reference 2006-09-23
StrikeIron Insider Trading Insider trading transaction information Reference 2006-10-08
StrikeIron Phone Number Enhancement Adds address and statistical data based on phone number Reference 2006-11-24
StrikeIron Residential Lookup Residential directory lookup and validation service Reference 2006-11-12
StrikeIron Reverse Phone Lookup Reverse phone lookup services Reference 2006-09-14
StrikeIron Sales Tax Basic Sales and use tax data service Reference 2006-12-08
StrikeIron Super Data Pack APIs for variety of reference data sources Reference 2007-01-30
StrikeIron US Census Census data information service Reference 2006-10-08
StrikeIron Zacks Company Profile Corporate profiles web service Reference 2006-11-29
Talis Library 2.0 reference services Reference 2006-06-07
UrbanDictionary Slang dictionary lookup Reference 2005-10-31
US Yellow Pages US yellow pages telephone directory Reference 2006-10-09
Yahoo Answers Community driven reference service Reference 2006-08-16
ZoomInfo Information search services Reference 2007-09-27
Alexa Web Information Service Web site information and traffic data Search 2006-08-03
Alexa Web Search Web Search Engine Search 2006-04-04
Amazon A9 OpenSearch Search services Search 2005-09-04
Gigablast Search service Search 2005-09-09
Google Ajax Search Web search components Search 2006-06-04
Google Code Search Code search service Search 2006-12-02
Google Custom Search Google custom search management Search 2007-07-08
Google Desktop Desktop search and gadgets Search 2006-09-18
Google Research Search Search services for researchers Search 2007-08-20
Google Search Search services Search 2006-01-22
Kratia Democratic search engine Search 2006-02-03
Naver Korean search engine Search 2006-05-29
Vast Structured web search Search 2006-03-15
Windows Live Search Internet search Search 2006-01-23
Wink Social search service Search 2007-06-05
Yahoo Image Search Image search services Search 2005-11-19
Yahoo Local Search Local search service Search 2005-11-19
Yahoo My Web Search Personalized search services Search 2006-10-20
Yahoo Related Suggestions Search suggestion service Search 2006-03-10
Yahoo Search Search services Search 2006-02-14
Yahoo Term Extraction Contextual search service Search 2005-11-19
Yandex Russian search engine Search 2007-09-16
AOL Open Auth Authentication services Security 2007-08-16
buySAFE E-commerce trust network Security 2006-11-01
FraudLabs Credit Card Fraud Detection Credit card verification service Security 2006-09-23
Google Client Authentication Account authentication for installed applications Security 2006-11-05
Google Safe Browsing Security service to verify URLs Security 2007-06-29
Google Single SignOn Authentication for Google Apps Security 2007-02-23
Google Web Authentication Account authentication proxy for web-based applications Security 2006-11-05
PhishTank Community site for tracking phishing Security 2006-11-01
TypeKey Authentication Framework Security 2005-09-23
Windows Live Data Service for users to control data access Security 2007-05-01
Windows Live ID Client SDK Windows SDK for Windows Live sign-in authentication Security 2007-02-03
Windows Live ID Web Authentication Web based authentication service Security 2008-01-13
Yahoo BBauth Browser based authentication service Security 2006-10-01
DHL Package shipping services Shipping 2007-10-25
eCourier UK delivery services Shipping 2007-04-14
FedEx Package shipping Shipping 2005-09-04
Shipwire Warehouse and shipping service Shipping 2007-12-23
UPS Package shipping Shipping 2005-09-04
US Postal Service Package shipping and postage Shipping 2005-12-06
Amazon eCommerce Online retailer Shopping 2006-04-04
Amazon Historical Pricing Historical product sales data Shopping 2006-08-04
Authorize.Net Internet based payment gateway services Shopping 2007-02-20
AvantLink Affiliate marketing network Shopping 2007-07-21
Bountii Price Search Electronics and appliances price comparison service Shopping 2007-12-30
Cafe Press Customized retail product service Shopping 2006-03-06
CNET Shopping services Shopping 2007-02-01
Commission Junction Online affiliate programs Shopping 2006-09-23
DataUnison eBay Research eBay pricing and sales trend data Shopping 2006-10-21
Direct Textbook Book price comparison service Shopping 2007-06-11
eBay Online auction marketplace Shopping 2005-12-05
GoodStorm Online retail ecommerce Shopping 2006-07-16
Google Base Platform for structure and semi-structured data Shopping 2006-08-23
Google Checkout Shopping cart services Shopping 2006-08-31
LinkShare Affiliate marketing network Shopping 2007-10-08
Oodle Online classifieds service Shopping 2007-09-01
PaySimple Online payment gateway Shopping 2007-05-06
PriceGrabber Comparison shopping service Shopping 2008-01-12
PriceRunner Shopping comparision engine Shopping 2007-05-21
QuarkRank Consumer reviews service Shopping 2007-12-18
Rakuten Japanese shopping web service Shopping 2007-06-29
Shopping.com Online retail shopping Shopping 2006-06-14
Shopzilla Comparison shopping service Shopping 2008-01-04
SwapThing Community driven swapping site Shopping 2006-08-20
UPC Database UPC lookup service Shopping 2006-07-09
Windows Live Expo Online classifieds service Shopping 2006-06-07
Yahoo Shopping Shopping services Shopping 2005-11-19
Zazzle On-demand product creation service Shopping 2006-08-31
Zixxo Online coupons Shopping 2006-07-29
Are You Watching This Algorithms identify in-progress, exciting sporting events Sports 2007-09-16
Cypress Golf Golf reservations system Sports 2006-02-23
NCAA Mens College Basketball NCAA college basketball data services Sports 2008-02-15
OddsMiner Sports betting XML feeds Sports 2007-10-13
Adobe Share Service for publishing and sharing documents Storage 2007-10-07
Amazon S3 Online storage services Storage 2006-03-14
Box.net Online file storage Storage 2006-03-07
DigitalBucket Online storage service Storage 2007-11-18
MoveDigital File delivery and management services Storage 2006-08-07
Nirvanix Internet storage service Storage 2007-09-05
Omnidrive Online storage services Storage 2007-01-24
Open Xdrive Online data storage service Storage 2007-07-17
Openomy Online file system Storage 2006-02-14
TinyLoad File distribution service Storage 2007-11-28
Tagalag Email tagging Tagging 2005-10-05
TagFinder Tag extraction service Tagging 2006-03-29
tagthe.net Tag recommendation service Tagging 2006-07-03
TagTooga Tag based Internet directory Tagging 2006-04-25
Tagyu Tag recommendation service Tagging 2005-10-29
AIM Phoneline Voice Over IP Internet telephony services Telephony 2006-09-10
Evoca Phone to web media voice services Telephony 2007-10-20
Global IP Sound Voice Processor for VoIP Services Telephony 2006-07-10
Jaduka Internet and PSTN voice services Telephony 2007-03-10
LignUp Communications web services Telephony 2007-07-19
Lypp VoIP Callback API Telephony 2007-10-20
Mindgram Voice telegram service Telephony 2007-08-05
PhoneDog Cell phone information, service data, and news. Telephony 2007-06-18
Ribbit Flash based VoIP service Telephony 2007-10-28
Sipgate Internet telephone service provider Telephony 2007-09-12
Skype Internet communication Telephony 2005-09-11
SpokenBuzz Voice services portal Telephony 2007-08-06
Sylantro Hosted VoIP services Telephony 2007-07-14
Upside Wireless Text messaging service provider Telephony 2007-07-23
Voxbone VoIP provisioning service Telephony 2007-05-10
Google Mashup Editor Mashup creation tool extensions API Tools 2007-05-31
AgentFactor Travel Travel booking service Travel 2007-12-18
dopplr Community travel service Travel 2007-12-23
FlightAware Live flight aircraft tracking Travel 2007-08-15
Kayak Travel search service Travel 2006-01-10
King County Buses Transit tracking service Travel 2006-03-17
SmartTravelDeals Travel offer publishing and search Travel 2005-09-14
Superbreak Travel booking services Travel 2007-08-01
Yahoo Travel Online travel services Travel 2005-12-21
Google Notebook Online notebook service Utility 2007-02-10
Google Translate Language translation service Utility 2007-08-20
Notely Academic notes and calendar service Utility 2007-12-30
SlimTimer Personal task timer Utility 2007-02-04
stikkit Little sticky notes that think Utility 2007-02-04
Urloid Short URL service Utility 2007-12-06
AOL Video AOL Truveo Video Search Video 2006-10-18
AOL Video Upload Video upload and sharing service Video 2007-12-15
Blinkx Video search service Video 2007-04-26
Blip.tv Video upload and sharing service Video 2008-01-13
Dave.TV Video distribution network Video 2007-02-09
ffwd Video sharing and discovery Video 2008-01-27
HeyWatch Video encoding services Video 2007-08-27
Joost Online television Video 2007-09-01
Kyte Streaming interactive television service Video 2007-10-20
LiveVideo Video repository and user community Video 2007-06-18
Mefeedia Video feeds and community Video 2008-01-13
Opensubtitles Movie subtitles service Video 2008-01-29
Revver Video services Video 2006-10-22
Seesmic Video dashboard and community Video 2008-01-29
SesameVault Video sharing service Video 2007-12-25
Veoh Internet television, video, and social platform Video 2007-06-26
Videodetective Film trailers, cast, images, and related information Video 2007-07-01
Vimeo Video sharing service Video 2007-09-16
Vodpod Video sharing and discovery Video 2008-02-20
Yahoo Live Live video streaming service Video 2008-02-07
Yahoo Video Search Video search Video 2005-11-19
YouTube Video sharing and search Video 2006-02-08
InnerGears Weather by City US Weather forecasts by city Weather 2006-10-15
NOAA Weather Service Weather forecast database Weather 2005-09-08
Weather Channel Weather forecast data Weather 2007-08-05
WeatherBug Weather forecast services Weather 2006-01-13
Clearspring Widget creation, distribution, and tracking services Widgets 2007-06-26
Google Homepage Portal gadgets Widgets 2006-09-17
Microsoft start.com Portal service Widgets 2006-01-21
Netvibes Personalized home page with widgets Widgets 2006-11-05
Pageflakes Personalized start page and widgets Widgets 2007-01-01
Serence Klip Desktop gadgets Widgets 2005-11-09
SpringWidgets Widget platform Widgets 2006-11-07
TagWorld Social web services Widgets 2006-06-04
Widgetbox Create and distribute your widget through the world's largest widget gallery Widgets 2007-12-28
WidgetPlus Widget framework Widgets 2007-10-10
WidSets Mobile widgets service Widgets 2007-10-06
Windows Live Gadgets Online gadgets service Widgets 2006-11-04
Windows Sidebar Gadgets Desktop gadgets Widgets 2006-11-05
Yahoo Mobile Widget Platform Mobile widget platform Widgets 2008-01-07
Yahoo Widgets Desktop widgets Widgets 2006-09-30
yourminis Widget Platform Widgets 2007-04-03
Cogmap Org chart wiki Wiki 2007-08-16
DBpedia Structured query interface to Wikipedia Wiki 2007-08-08
JotSpot Wiki-style collaboration tools Wiki 2005-10-30
MindTouch Deki Wiki Wiki platform service Wiki 2007-12-09
Ontok Wikipedia Encyclopedia data access Wiki 2006-02-06
PBwiki Consumer wiki farm Wiki 2006-12-24
WikiMatrix Wiki search and comparison service Wiki 2006-11-29
신고
Posted by naearu
연구_고민2007.11.21 14:57

*글자를 모두 대,소문자 바꾸기
#mainNav ul {
 text-transform: uppercase(모두대문자), lowercase(모두소문자), capitalize(첫글자대문자);
}
<div id="mainNav">
  <ul>Features</ul>
</div>




*소형대문자*
#mainNav li {
 font-variant: small-caps;
}
<div id="mainNav">
  <li>Features</li>
</div>




*텍스트 위아래 줄넣기
#line {
  text-decoration:underline overline; (아래,위)
  }
<div id="line">텍스트 위아래 줄넣기</div>



*첫줄 들여쓰기
text-indent: 25px;
text-indent: 5em;




* 박스 (버전에 맞는 구현방법)


      * 고로 -_-; 박스는 안쓰는게 좋겠소이다;;; 나중에 시대가 지나믄 필요할지도 모름~!

      [  html . sidebar { margin-left: -3px} ] (얜 뭘까 _-_;;)




 

*Float 해제_서로 다른 높이를 가진 부유 항목들을 어떤 식으로 한데 쏠리지 않도록 해 준다.

.copyright { clear: both; } or .copyright { clear: right; }




 

***** ***** ***** ***** ***** 이미지 관련 소스 시작~!! ***** ***** ***** ***** *****

 

* 배경

body {
 background-color: white;
 background-image: url(images/page_bg.jpg);
 background-repeat: repeat-x;
 background-position: left top;

 text-align: center;

}


* 배경_sidebar

<style type="text/css'>

.sidebar {
 width: 220px;
 float: right;
 margin: 10px;
 background: #CBF622 url(images/bg_bottom.gif) center bottom no-repeat;
 padding-bottom: 75px; (아래 배경의 크기에 따라 조절해야한다)

}

.sidebar h3 {
 font-size: 1.4em;
 margin: 0;
 text-align: center;
 text-transform: uppercase;
 background: url(images/top_bg.gif) center top no-repeat;
 color: #FFF;
 padding: 5px;
}

.sidebar ul {
 color: #666;
 font-size: 1.2em;
 margin: 0;
 padding: 10px 5px 0 5px;
 border-left: 1px solid #E73A10;
 border-right: 1px solid #E73A10;
}

.sidebar li {
 background: url(images/flower_bullet.gif) no-repeat 0px 2px;
 list-style: none;
 padding-left: 18px;
 margin-bottom: 6px;
}

 

/*CSS Hacks for Internet Explorer */

/* fix the over extended h2 borders */
* html h2 {
 zoom: 1;
}

* html .sidebar {
/* double margin bug fix */
 display: inline;
}

 

</style>

<div class="sidebar">
    <h3> Ideas for Better Indoor&nbsp;Agriculture </h3>
    <ul>
      <li>Don't leave the hose running.</li>
      <li>In a small apartment</li>

    </ul>
</div>



*링크_밑줄없애기

a:link { text-decoration:none; }


*링크_마우스On했을때 밑줄넣기

a:link, a:visited { text-decoration:none; background-color:#ff0000; }

a:hover { background-color:transparent; text-decoration:underline; }


*링크_밑줄넣기

a { text-decoration:none; border-bottom:dashed 2px #ff9900; }

a { text-decoration:none; background:url(img/line.gif) repeat-x left bottom; padding-bottom:5px; }

신고
Posted by naearu
TAG css


각 자리에
2 3 4 5 6 7 8 9 2 3 4 5
를 순서대로 곱하고..
다 더한다음에
11로 나누고
나눈 나머지를 11에서 뺀수를 맨뒤에 붙인다...10일경우 0

흐음..

어디보자~
검사하는 식을 만들어보면...

$ssn; //여기에 12자리 순수 숫자들로만 구성된 민번이 들어간다고 치고..
$key=array(2 ,3, 4, 5, 6, 7, 8, 9, 2, 3, 4, 5); 키가 되는 값들을 입력을 하고~

에~ 어디보자.. ssn을 어찌 쪼갤까...흐음..

sub_str($ssn,0,1); 이렇게 11자리 쪼개는거 말고 뭐 간단한거 없나?없나보군.. 젠장...

for($i=0;$i=<strlen($ssn);$i++){
$ssn_array[$i]=sub_str($ssn,$i,1);
}
이렇게 해서 한개씩 쪼개고...

for($i=0;$i=<strlen($ssn);$i++){
$sum+=$ssn_array[$i]*$key[$i];
}
이렇게 합을 구하고..
$tmp=$sum%11;
$check_key=11-$tmp;

이렇게 검사키를 만들고..

if($check_key==10)
   $check_key=0;
10일경우 처리해주고..

if($check_key==$ssn_array[12])
   echo "진짜민번";
else
  echo "가짜민번";

이렇게 되는건가?

흐음..

정리해서... 함수화 시키면..

function ssn_check($ssn){

$key=array(2 ,3, 4, 5, 6, 7, 8, 9, 2, 3, 4, 5);

for($i=0;$i=<13;$i++){
    $ssn_array[$i]=sub_str($ssn,$i,1);
}

for($i=0;$i<12;$i++){
    $sum+=$ssn_array[$i]*$key[$i];
}

$tmp=$sum%11;
$check_key=11-$tmp;

if($check_key==10)
   $check_key=0;

if($check_key==$ssn_array[12])
   return true;
else
   return false;
}

이렇게 되는데 맞나? ㄱ-;; 아님 말고..
이거뭐.. 조금만 바꾸면.. 민번 생성도 가능하네...(요샌 별 쓸모 없지만..)



신고
Posted by naearu
연구_고민2007.11.07 18:05

prototype.js 를 위한 개발자 노트


1.4.0 버전을 다룸

Sergio PereiraSergio Pereira에 의해 작성됨
최근 업데이트: 2006년 4월 13일

Prototype은 무엇인가.?

prototype.jsSam Stephenson에 의해 작성된 자바스크립트 라이브러리이다. 이 놀랍도록 멋진 생각과 표준에 의해 잘 작성된 코드의 일부는 웹2.0의 특성을 나타내는 풍부하고 상호작용하는 웹페이지와 많은 연관을 가진다.

만약 당신이 최근 이 라이브러리를 사용하기 시작했다면, 당신은 아마도 이 문서가 가장 좋은 지시사항중에 하나는 아니라는것을 알아차렸을것이다. 나 이전에 다른 많은 개발자들처럼, 나는 소스코드와 이것을 사용한 경험에서 prototype.js에 대한 지식을 가지게 되었다. 나는 모든 이가 배우고 공유하는 동안 좀더 많은 정보를 얻게 되는게 가장 좋은 것이라고 생각한다.

나는 objects, classes, functions, 그리고 이 라이브러리에 의해 제공되는 확장을 위한 비공식적인 참조문서 또한 제공한다.

당신이 예제와 참조문서를 읽었을때, Ruby프로그래밍 언어에 친숙한 개발자는 Ruby의 내장 클래스와 이 라이브러리에 의해 구현된 많은 확장 사이의 의도적인 유사성을 알아차리게 될것이다.

toc

관련글

고급 자바스크립트 가이드문서.

toc

유틸리티 함수들(utility functions)

라이브러리는 미리 정의된 많은 수의 객체와 유틸리티 함수를 가진다. 이 알기쉬운 함수들의 목적은 반복적인 타이핑과 어구를 많이 줄이는데 있다.

toc

$() 함수 사용하기

$()함수는 가장 많이 사용되는 DOM의 document.getElementById()함수에 대한 편리한 단축키이다. DOM함수처럼, 이것은 인자로 던져진 id를 가진 요소를 하나 반환한다.

하지만 DOM함수와는 달리, 이것은 여러개의 id를 사용할수 있고 $()는 요청된 요소를 가진 Array객체를 반환할것이다. 예제는 아래와 같다.

<HTML>
<HEAD>
<TITLE> Test Page </TITLE>
<script src="prototype-1.4.0.js"></script>

<script>
	function test1()
	{
		var d = $('myDiv');
		alert(d.innerHTML);
	}

	function test2()
	{
		var divs = $('myDiv','myOtherDiv');
		for(i=0; i<divs.length; i++)
		{
			alert(divs[i].innerHTML);
		}
	}
</script>
</HEAD>

<BODY>
	<div id="myDiv">
		<p>This is a paragraph</p>
	</div>
	<div id="myOtherDiv">
		<p>This is another paragraph</p>
	</div>

	<input type="button" value=Test1 onclick="test1();"><br> 
	<input type="button" value=Test2 onclick="test2();"><br> 

</BODY>
</HTML>

이 함수의 다른 좋은 점은 이것은 인자형태를 가질수 있는 다른 함수를 생성할때 매우 유용하도록 만들어주는 id문자열이나 요소객체 자체를 던질수 있다는 것이다.

toc

$F() 함수 사용하기

$F() 함수는 다른 단축키이다. 이것은 text박스나 드랍다운 list와 같은 어떤 필드의 입력 컨트롤의 값을 반환한다. 이 함수는 요소 id나 요소객체 자체를 인자로 가질수 있다.

<script>
	function test3()
	{
		alert(  $F('userName')  );
	}
</script>

<input type="text" id="userName" value="Joe Doe"><br> 
<input type="button" value=Test3 onclick="test3();"><br> 
			

toc

$A() 함수 사용하기

$A() 함수는 이것을 받아들이는 하나의 인자를 Array객체로 변환한다.

Array 클래스를 위한 확장과 조합된 이 함수는 이것을 더욱 쉽게 만든다. 예를 들면, 작성한 함수는 인자의 수를 유연하게 받아들인다.

<script>

	function showOptions(){
		var someNodeList = $('lstEmployees').getElementsByTagName('option');
		var nodes = $A(someNodeList);

		nodes.each(function(node){
				alert(node.nodeName + ': ' + node.innerHTML);
			});
	}
</script>

<select id="lstEmployees" size="10" >
	<option value="5">Buchanan, Steven</option>
	<option value="8">Callahan, Laura</option>
	<option value="1">Davolio, Nancy</option>
</select>

<input type="button" value="Show the options" onclick="showOptions();" > 
			

toc

$H() 함수 사용하기

$H() 함수는 결합된 배열을 열거할수 있는 Hash객체로 변환한다.

<script>
	function testHash()
	{
		//let's create the object
		var a = {
			first: 10,
			second: 20,
			third: 30
			};

		//now transform it into a hash
		var h = $H(a);
		alert(h.toQueryString()); //displays: first=10&second=20&third=30
	}

</script>
			

toc

$R() 함수 사용하기

$R() 함수는 new ObjectRange(lowerBound, upperBound, excludeBounds)를 작성하기 위한 짧은 형태이다.

이 클래스의 완전한 설명을 보기 위해 ObjectRange 클래스 문서를 보라. each 메소드를 통해 반복(iterators)의 사용법을 보여주는 간단한 예제를 보자. 더 많은 메소드는 Enumerable 클래스 문서에서 볼수 있을것이다.

<script>
	function demoDollar_R(){
		var range = $R(10, 20, false);
		range.each(function(value, index){
			alert(value);
		});
	}

</script>

<input type="button" value="Sample Count" onclick="demoDollar_R();" > 
			

toc

Try.these() 함수 사용하기

이것은 인자처럼 많은 수의 함수를 가지고 그것들을 순서대로 차례차례 호출하도록 해준다. 이것은 함수중에 하나씩 수행하고 성공적인 함수호출의 결과를 반환할때까지 순차적으로 수행된다.

예제는 아래와 같다. xmlNode.text는 몇몇 브라우저에서 작동하고 xmlNode.textContent는 다른 브라우저에서 작동한다. Try.these()함수를 사용하면 당신은 작동하는 것중 하나를 반환할수 있다.

<script>
function getXmlNodeValue(xmlNode){
	return Try.these(
		function() {return xmlNode.text;},
		function() {return xmlNode.textContent;}
		);
}
</script>
			

toc

Ajax 객체

위에서 언급된 유틸리티 함수들은 좋다. 하지만 다시 보자. 그것들은 대부분 고급(advanced) 형태는 아니다. 당신은 스스로 이것들을 만들수 있고 당신 자신만의 스크립트에 유사한 함수를 이미 가지고 있을수도 있다. 하지만 이러한 함수들은 단지 일부분에 해당되는 팁일뿐이다.

나는 prototype.js에 대한 당신의 관심이 대부분의 AJAX기능을 다룰수 있다는 것이라고 확신한다. 그래서 당신이 AJAX로직을 수행할 필요가 있을때 좀더 쉽게 사용하도록 도와주는 라이브러리를 사용하는 방법을 살펴보자.

AJAX객체는 AJAX함수를 작성할 때 포함되는 트릭성격의 코드를 포장하고 단순화하기 위한 라이브러리에 의해 생성된 미리-정의된 객체이다. 이 객체는 캡슐화된 AJAX로직을 제공하는 많은 수의 클래스를 포함한다. 그 클래스중에 몇개를 살펴보자.

toc

Ajax.Request 클래스 사용하기

만약 당신이 어떠한 헬퍼(helper) 라이브러리도 사용하지 않는다면, 당신은 XMLHttpRequest객체를 생성하기 위한 많은 코드를 작성할 것이고 단계를 비동기적으로 수행할것이다. 그리고나서 응답을 뽑아내고 이것을 처리한다. 그리고나서는 한가지 이상의 브라우저를 지원하지 않는다면 스스로 행운이라고 생각할 것이다.

AJAX기능을 지원하기 위해, 라이브러리는 Ajax.Request클래스를 정의한다.

당신이 다음처럼 XML응답을 반환하는 http://yoursever/app/get_sales?empID=1234&year=1998 url을 통해 서버와 통신할수 있는 애플리케이션을 가지고 있다고 해보자.

<?xml version="1.0" encoding="utf-8" ?> 
<ajax-response>
	<response type="object" id="productDetails">
		<monthly-sales>
			<employee-sales>
				<employee-id>1234</employee-id> 
				<year-month>1998-01</year-month> 
				<sales>$8,115.36</sales> 
			</employee-sales>
			<employee-sales>
				<employee-id>1234</employee-id> 
				<year-month>1998-02</year-month> 
				<sales>$11,147.51</sales> 
			</employee-sales>
		</monthly-sales>
	</response>
</ajax-response>			
			

XML을 가져오기 위해 서버와 통신하는 것은 Ajax.Request객체를 사용하면 매우 간단하다. 아래의 샘플은 이것을 수행하는 방법을 보여준다.

<script>
	function searchSales()
	{
		var empID = $F('lstEmployees');
		var y = $F('lstYears');
		var url = 'http://yourserver/app/get_sales';
		var pars = 'empID=' + empID + '&year=' + y;
		
var myAjax = new Ajax.Request( url, { method: 'get', parameters: pars, onComplete: showResponse });
} function showResponse(originalRequest) { //put returned XML in the textarea $('result').value = originalRequest.responseText; } </script> <select id="lstEmployees" size="10" onchange="searchSales()"> <option value="5">Buchanan, Steven</option> <option value="8">Callahan, Laura</option> <option value="1">Davolio, Nancy</option> </select> <select id="lstYears" size="3" onchange="searchSales()"> <option selected="selected" value="1996">1996</option> <option value="1997">1997</option> <option value="1998">1998</option> </select> <br><textarea id=result cols=60 rows=10 ></textarea>

Ajax.Request객체의 생성자의 두번째 파라미터를 알아보겠는가.? {method: 'get', parameters: pars, onComplete: showResponse} 파라미터는 문자적 표기법으로 익명 객체를 나타낸다. 이것이 의미하는 것은 'get' 문자열을 포함하는 명명된 메소드(method)의 프라퍼티, HTTP요청 문자열을 포함하는 명명된 파라미터(parameter)의 프라퍼티, 그리고 함수 showResponse를 포함하는 onComplete 프라퍼티/메소드를 가지는 객체를 전달한다는 것이다.

당신이 AJAX를 비동기적으로(asynchronous) 서버에 호출할지를 결정하고 truefalse값으로 셋팅할수 있는 asynchronous(디폴트 값은 true이다.)와 같은 이 객체내 정의하고 활성화시킬수 있는 다른 프라퍼티가 몇개 있다.

이 파라미터는 AJAX호출을 위한 옵션을 정의한다. 샘플에서, 우리는 HTTP GET명령을 통해 첫번째 인자에서 url을 호출한다. 변수 pars내 포함된 조회문자열(querystring)을 전달하고 Ajax.Request객체는 응답을 받아들이는 작업을 마칠때 showResponse함수를 호출할 것이다.

당신이 아는것처럼, XMLHttpRequest는 HTTP호출을 하는 동안 진행과정을 보고한다. 이 진행과정은 4가지의 단계(Loading, Loaded, Interactive, 또는 Complete)를 알릴수 있다. 당신은 이러한 단계중에서 Ajax.Request객체 호출을 사용자정의 함수로 만들수 있다. Complete는 가장 공통적인 단계이다. 함수를 객체에게 알리기 위해, 우리 예제의 onComplete처럼 요청옵션내 onXXXXX로 명명된 프라퍼티/메소드를 간단히 제공하라. 당신이 전달하는 이 함수는 XMLHttpRequest객체 자체가 될 하나의 인자를 가진 객체에 의해 호출될것이다. 당신은 반환 데이터를 얻기 위해 이 객체를 사용할수 있고 아마도 호출의 HTTP결과 코드를 포함할 상태(status) 프라퍼티를 체크할것이다.

두개의 다른 흥미로운 옵션은 결과를 처리하기 위해 사용될수 있다. 우리는 AJAX호출이 에러없이 수행될때 호출될 함수처럼 onSuccess옵션을 명시할수 있다. onFailure옵션은 서버에러가 발생할때 호출될 함수가 될수 있다. onXXXXX의 선택적인 함수처럼, 이 두가지는 AJAX호출이 옮기는 XMLHttpRequest객체를 전달하도록 호출될수 있을것이다.

1.4.0 버전에서, 이벤트 콜랙 핸들링의 새로운 형태가 소개되었다. 만약 당신이 AJAX호출이 발생하는데도 불구하고 특정 이벤트를 위해 수행되어야 하는 코드를 가지고 있다면, 당신은 새로운 Ajax.Responders 객체를 사용할수 있다.

당신이 AJAX호출이 진행중이라는 시각적 표시를 보여주길 원한다고 해보자. 당신은 두개의 전역 이벤트 핸들러를 사용할수 있다. 하나는 첫번째 호출이 시작되었을때 아이콘을 보여주는것이고 다른 하나는 적어도 하나가 끝났을때 아이콘을 숨기는 것이다. 아래의 예제를 보자.

<script>
	var myGlobalHandlers = {
		onCreate: function(){
			Element.show('systemWorking');
		},

		onComplete: function() {
			if(Ajax.activeRequestCount == 0){
				Element.hide('systemWorking');
			}
		}
	};

	Ajax.Responders.register(myGlobalHandlers);
</script>

<div id='systemWorking'><img src='spinner.gif'>Loading...</div>
	

우리의 샘플은 흥미로운 방법으로 XML응답을 처리하지는 않았다. 우리는 textarea내 XML을 집어넣었다. 응답의 전형적인 사용법은 XML내부에서 바라는 정보를 찾고자 할것이고 몇몇 페이지 요소나 페이지내 HTML을 만드는 몇가지의 XSLT변형을 업데이트할것이다.

좀더 완전한 설명을 보기 위해서, Ajax.Request 참조options 참조를 보라..

toc

Ajax.Updater 클래스 사용하기

만약 당신이 HTML로 이미 포맷팅된 정보를 반환할수 있는 서버 종료점(endpoint)을 가진다면, 라이브러리는 당신이 Ajax.Updater클래스를 사용하는것을 좀더 쉽게 만들어준다. 이것으로 당신은 어느 요소가 AJAX호출로부터 반환된 HTML을 채우는지 알리게 된다. 예제는 내가 글로 표현하는 것보다 당신을 좀더 쉽게 이해하도록 도와줄것이다.

<script>
	function getHTML()
	{
		var url = 'http://yourserver/app/getSomeHTML';
		var pars = 'someParameter=ABC';
		
var myAjax = new Ajax.Updater( 'placeholder', url, { method: 'get', parameters: pars });
} </script> <input type=button value=GetHtml onclick="getHTML()"> <div id="placeholder"></div>

당신이 보는것처럼, 코드는 onComplete함수와 생성자에 전달된 요소 id를 제외하고 이전예제에 비해서 매우 간단하다. 클라이언트에서 서버 에러들을 다루는 것이 어떻게 가능한지 보기 위해 코드를 조금 변경해 보자.

우리는 호출을 위해 더 많은 옵션을 추가하고 에러 상황을 뽑아내기 위해 함수를 명시한다. 이것은 onFailure옵션을 사용하여 수행한다. 우리는 성공적인 작동의 경우에만 활성화될 묶음자(placeholder)를 명시할것이다. 이것을 달성하기 위해, 우리는 간단한 요소 id에서 두개의 프라퍼티(success-모든것이 정상적일때 사용되는, failure-어떤것이 실패일때 사용되는)를 가지는 객체로 첫번째 파라미터를 변경할 것이다. 우리는 예제에서 failure 프라퍼티를 사용하지 않을것이고, onFailure옵션에서 reportError함수를 사용할것이다.

<script>
	function getHTML()
	{
		var url = 'http://yourserver/app/getSomeHTML';
		var pars = 'someParameter=ABC';
		
var myAjax = new Ajax.Updater( {success: 'placeholder'}, url, { method: 'get', parameters: pars, onFailure: reportError });
} function reportError(request) { alert('Sorry. There was an error.'); } </script> <input type=button value=GetHtml onclick="getHTML()"> <div id="placeholder"></div>

만약 당신의 서버 로직이 HTML마크업 대신에 자바스크립트 코드를 반환한다면, Ajax.Updater객체는 자바스크립트 코드가 될수 있다. 자바스크립트로 응답을 처리하기 위한 객체를 얻기 위해, 당신은 객체 생성자의 마지막 인자로 프라퍼티들의 목록에 evalScripts: true;를 간단히 추가한다. 하지만 여기엔 문제가 있다. 이러한 스크립트 블럭은 페이지의 스크립트에 추가되지 않을것이다. 옵션이름인 evalScripts이 제시하는것처럼, 스크립트는 평가될것이다. 차이점이 무엇일까.? 요청된 URL이 반환하는 것이 무엇인지 추측해보자.

<script language="javascript" type="text/javascript">
	function sayHi(){
		alert('Hi');
	}
</script>

<input type=button value="Click Me" onclick="sayHi()">
			

이 경우 당신이 이전에 이것을 시도했다면 이것이 작동하지 않는것을 알고 있을것이다. 이유는 스크립트 블럭은 평가될것이고 평가된 스크립트는 sayHi 라는 이름의 함수를 생성하지 않을것이다. 이것은 아무것도 하지 않을것이다. 이 함수를 생성하기 위해, 우리는 함수를 생성하기 위해 변경할 필요가 있다. 아래를 보라.

<script language="javascript" type="text/javascript">
	
sayHi = function(){ alert('Hi'); };
</script> <input type=button value="Click Me" onclick="sayHi()">

이전 예제에서, 우리는 변수를 선언하기 위해 var 키워드를 사용하지 않았다. 그렇게 하는 것은 스크립트 블럭에 지역화될 함수 객체를 생성할것이다. var 키워드 없이 함수 객체는 window범위에서 작동한다.

좀더 상세한 complete설명을 위해서는, Ajax.Request 참조문서Ajax.options 참조문서를 보라.

toc

열거(Enumerating)...

우리는 루프(loop)에 친숙하다. 당신이 알다시피, 배열 자체를 생성하고 같은 종류의 요소로 채운다. 루프 제어구조(이를 테면, foreach, while, repeat 등등)을 생성하고 숫자로 된 인덱스를 통해 순차적으로 각각의 요소에 접근하고 그 요소로 작업을 수행한다.

당신이 이것에 대해 생각할때, 언제나 당신은 코드에 배열을 가지고 루프내 배열을 사용할것이라는것을 의미한다. 이러한 반복을 다루기 위해 좀더 많은 기능을 가진 배열 객체가 있다면 좋지 않겠는가.? 그렇다. 많은 프로그래밍 언어는 배열이나 유사한 구조(collection과 list와 같은)에서 이러한 기능을 제공한다.

prototype.js는 우리에게 반복가능한 데이터를 다룰때 사용하도록 구현된 Enumerable 객체를 제공한다. prototype.js 라이브러리는 더 나아가 Enumerable의 모든 메소드로 Array 클래스를 확장한다

toc

루프, 루비-스타일

표준 자바스크립트에서, 당신이 배열의 요소를 순차적으로 표시하길 원한다면, 당신은 다음처럼 작성할수 있다.

<script>
	function showList(){
		var simpsons = ['Homer', 'Marge', 'Lisa', 'Bart', 'Meg'];
for(i=0;i<simpsons.length;i++){ alert(simpsons[i]); }
} </script> <input type="button" value="Show List" onclick="showList();" >

prototype.js를 사용하면, 다음과 같이 다시 작성할수 있다.

	function showList(){
		var simpsons = ['Homer', 'Marge', 'Lisa', 'Bart', 'Meg'];
simpsons.each( function(familyMember){ alert(familyMember); });
}

당신은 특이한 문법으로 별로 좋지않다고 생각할지도 모른다. 위 예제에서, 엉망으로 만드는 것은 아무것도 없다.

each 메소드에 대한 인자처럼 전달되는 이 함수는 보았는가.? iterator 함수처럼 이것을 참조해보자.

toc

스테로이드(steroids)에서 당신의 배열

위에서 언급된것처럼, 이것은 같은 프라퍼티와 메소드를 가지는 배열내 모든 요소를 위해 공통이다. 우리의 새로운 배열을 가지고 iterator함수의 장점을 가질수 있는 방법을 보자.

문법에 따르는 요소를 찾아라.

<script>
	function findEmployeeById(emp_id){
		var listBox = $('lstEmployees')
		var options = listBox.getElementsByTagName('option');
		options = $A(options);
		var opt = options.find( function(employee){
			return (employee.value == emp_id);
		});
		alert(opt.innerHTML); //displays the employee name
	}
</script>

<select id="lstEmployees" size="10" >
	<option value="5">Buchanan, Steven</option>
	<option value="8">Callahan, Laura</option>
	<option value="1">Davolio, Nancy</option>
</select>

<input type="button" value="Find Laura" onclick="findEmployeeById(8);" > 
			

배열에서 항목을 걸러내는 방법을 보자. 그리고나서 각각의 요소로부터 맴버를 가져온다.

<script>
	function showLocalLinks(paragraph){
		paragraph = $(paragraph);
		var links = $A(paragraph.getElementsByTagName('a'));
		//find links that do not start with 'http'
		var localLinks = links.findAll( function(link){
			var start = link.href.substring(0,4);
			return start !='http';
		});
		//now the link texts
		var texts = localLinks.pluck('innerHTML');
		//get them in a single string
		var result = texts.inspect();
		alert(result);
	}

</script>
<p id="someText">
	This <a href="http://othersite.com/page.html">text</a> has 
	a <a href="#localAnchor">lot</a> of 
	<a href="#otherAnchor">links</a>. Some are 
	<a href="http://wherever.com/page.html">external</a>
	and some are <a href="#someAnchor">local</a>
</p>
<input type=button value="Find Local Links" onclick="showLocalLinks('someText')">
			

이것은 이 문법에 완전히 빠지도록 하기 위한 몇가지 예제를 가진다. 사용가능한 모든 함수를 위해 Enumerable and Array 참조문서를 보라.

toc

내가 강력하게 추천하는 책들.

다음의 책들은 AJAX애플리케이션을 만들기 위해 요구되는 새로운 스킬을 배우는데 많은 도움을 주었고 이미 알고 있던 스킬을 좀더 탄탄하게 만들어주었다. 나는 좋은 책이 충분히 금적적인 가치를 하고 오랜시간동안 가치를 이어간다고 생각한다.

toc


prototype.js 참조

JavaScript 클래스에 대한 확장

prototype.js라이브러리에 기능을 추가하기 위한 방법중 하나는 현재 존재하는 JavaScript클래스를 확장하는 것이다.

toc

Object 클래스를 위한 확장

메소드 종류 인자 상세설명
extend(destination, source) static destination: 객체, source: 객체 source에서 destination으로 모든 프라퍼티와 메소드를 복사하여 상속을 구현하기 위한 방법을 제공
inspect(targetObj) static targetObj: 객체 targetObj의 사람이 읽을수 있는 문자열 표현으로 반환. 주어진 객체가 inspect 인스턴스 메소드를 정의하지 않는다면, toString 의 값을 반환

toc

Number 클래스를 위한 확장

메소드 종류 인자 상세설명
toColorPart() instance (none) 숫자의 16진법 표현을 반환. 색상의 RGB컴포넌트를 HTML표현으로 변환할때 유용
succ() instance (none) 다음 숫자를 반환. 이 함수는 반복을 포함하는 시나리오에서 사용된다.
times(iterator) instance iterator: Function(value, index)를 충족하는 함수 객체 인자 valueindex를 반복적으로 전달하는 iterator 함수를 호출하는 것은 iteration과 현재 index내 현재 값을 각각 포함한다.

다음의 예제는 0에서 9까지의 메시지 박스를 표시할것이다.

<script>
	function demoTimes(){
		var n = 10;
		n.times(function(index){
			alert(index);
		});
		/***************************
		 * you could have also used: 
		 *           (10).times( .... ); 
		 ***************************/
	}

</script>

<input type=button value="Test Number.times()" onclick="demoTimes()">
			

toc

Function 클래스를 위한 확장

메소드 종류 인자 상세설명
bind(object) instance object: 메소드를 소유하는 객체 함수(=메소드) 소유자 객체로 미리 묶는 함수의 인스턴스를 반환. 반환된 함수는 원래의 것과 같은 인자를 가질것이다.
bindAsEventListener(object) instance object: 메소드를 소유하는 객체 유하는 객체 함수(=메소드) 소유자 객체로 미리 묶는 함수의 인스턴스를 반환. 반환된 함수는 이것의 인자로 현재 이벤트 객체를 가질것이다.

실제로 이 확장중 하나를 보자.

<input type=checkbox id=myChk value=1> Test?
<script>
	//declaring the class
	var CheckboxWatcher = Class.create();

	//defining the rest of the class implementation
	CheckboxWatcher.prototype = {

	   initialize: function(chkBox, message) {
			this.chkBox = $(chkBox);
			this.message = message;
			//assigning our method to the event
			
this.chkBox.onclick = this.showMessage.bindAsEventListener(this);
}, showMessage: function(evt) { alert(this.message + ' (' + evt.type + ')'); } }; var watcher = new CheckboxWatcher('myChk', 'Changed'); </script>

toc

String 클래스를 위한 확장

메소드 종류 인자 상세설명
stripTags() instance (none) HTML이나 XML태그가 삭제된 문자열을 반환
stripScripts() instance (none) 삭제된 <script /> 블럭을 가진 문자열을 반환
escapeHTML() instance (none) HTML마크업 문자들이 escaped된 문자열 반환
unescapeHTML() instance (none) escapeHTML()의 반대
extractScripts() instance (none) 문자열내에서 발견되는 모든 <script />블럭을 포함하는 Array객체 반환
evalScripts() instance (none) 문자열내에서 발견되는 각각의 <script />블럭을 평가하기
toQueryParams() instance (none) 쿼리문자열(querystring)을 파라미터 이름에 의해 인덱스화되는 결합된 Array로 쪼개기
parseQuery() instance (none) toQueryParams()와 같음.
toArray() instance (none) 문자열을 이것의 문자들의 Array로 쪼개기
camelize() instance (none) -(하이픈)으로 분리된 문자열을 camelCaseString으로 변환하기. 이 함수는 예를 들면, 프라퍼티 스타일을 다루는 코드를 작성할때 유용하다.

toc

Array 클래스를 위한 확장

시작하기 위해, ArrayEnumerable를 확장한다. 그래서 Enumerable객체내에 정의되는 모든 편리한 메소드는 사용가능하다. 이것외에도, 아래의 메소드들이 구현되었다.

메소드 종류 인자 상세설명
clear() instance (none) 배열을 비우고 자체를 반환한다.
compact() instance (none) null 이거나 undefined인 요소를 제외하고 배열을 반환한다. 이 메소드는 배열자체를 변경하지 않는다.
first() instance (none) 배열의 첫번째 요소를 반환한다.
flatten() instance (none) 기복이 없고, 1차원의 배열을 반환한다. 이 함수는 배열이고 반환된 배열내 요소를 포함하는 배열의 각 요소를 찾음으로써 수행된다.
indexOf(value) instance value: 당신이 찾는 것 배열에서 찾아진다면 주어진 value의 0부터 시작하는 인덱스의 위치를 반환. value이 없다면 -1을 반환
inspect() instance (none) 요소를 가진 배열의 잘 포맷팅된 문자열 표시를 반환하기 위해 변경
last() instance (none) 배열의 마지막 요소를 반환한다.
reverse([applyToSelf]) instance applyToSelf: 배열 자체가 반전되는지 표시 역순서로 배열을 반환. 인자가 주어지지 않거나 인자가 true라면, 배열자체는 반전될것이다. 그렇지 않으면 변경되지 않고 남는다.
shift() instance (none) 첫번째 요소를 반환하고 배열로부터 이것을 제거한다. 배열의 길이는 1 감소한다.
without(value1 [, value2 [, .. valueN]]) instance value1 ... valueN: 배열내 존재한다면 제외될 값 인자로 주어진 요소를 제외한 배열을 반환

toc

document DOM 객체를 위한 확장

메소드 종류 인자 상세설명
getElementsByClassName(className [, parentElement]) instance className: 요소와 연관된 CSS클래스 이름, parentElement: 객체 또는 가져올 요소를 포함하는 요소의 id. 주어진 CSS클래스명과 연관된 모든 요소를 반환. parentElement id가 주어졌다면, 전체 문서가 검색될것이다.

toc

Event 객체를 위한 확장

프라퍼티 타입 상세설명
KEY_BACKSPACE Number 8: 되돌리기(<-) 키를 위한 상수 코드.
KEY_TAB Number 9: 탭키를 위한 상수코드
KEY_RETURN Number 13: 리턴키를 위한 상수코드
KEY_ESC Number 27: Esc키를 위한 상수코드
KEY_LEFT Number 37: 왼쪽 화살표 키를 위한 상수코드
KEY_UP Number 38: 위쪽 화살표 키를 위한 상수코드
KEY_RIGHT Number 39: 오른쪽 화살표 키를 위한 상수코드
KEY_DOWN Number 40: 아래쪽 화살표 키를 위한 상수코드
KEY_DELETE Number 46: Delete키를 위한 상수코드
observers: Array 캐시된 관찰자(observers)의 목록. 상세한 객체의 내부구현의 일부

메소드 종류 인자 상세설명
element(event) static event: 이벤트 객체 이벤트를 일으키는 요소를 반환
isLeftClick(event) static event: 이벤트 객체 마우스 왼쪽 버튼을 클릭시 true값 반환
pointerX(event) static event: 이벤트 객체 페이지에서 마우스 포인터의 x측 좌표값 반환
pointerY(event) static event: 이벤트 객체 페이지에서 마우스 포인터의 y측 좌표값 반환
stop(event) static event: 이벤트 객체 이벤트의 디폴트 행위를 취소하고 위임을 연기하기 위해 이 함수를 사용
findElement(event, tagName) static event: 이벤트 객체, tagName: 원하는 태그명 DOM트리 위쪽으로 가로지른다. 주어진 태그명을 가진 첫번째 요소를 검색한다. 이벤트를 발생시키는 요소로부터 시작한다.
observe(element, name, observer, useCapture) static element: 객체 또는 아이디, name: 이벤트 명 (like 'click', 'load', etc), observer: 이벤트를 다루는 함수, useCapture: true라면, capture내 이벤트를 다루고 false라면 bubbling 내 이벤트를 다룬다. 이벤트를 위한 이벤트 핸들러 함수를 추가
stopObserving(element, name, observer, useCapture) static element: 객체 또는 아이디, name: 이벤트 명 ('click' 처럼), observer: 이벤트를 다루는 함수, useCapture: true라면 capture내 이벤트를 다루고, false라면 bubbling내에서 다룬다. 이벤트로부터 이벤트 핸들러를 제거
_observeAndCache(element, name, observer, useCapture) static   private메소드, 이것에 대해 걱정하지말라.
unloadCache() static (none) private메소드, 이것에 대해 걱정하지말라. 메모리로부터 캐시된 모든 관찰자(observer)를 지운다.

window객체의 이벤트를 로그하기 위한 이벤트 핸들러를 추가하는 객체를 사용하는 방법을 보자.

<script>
	Event.observe(window, 'load', showMessage, false);

	function showMessage() {
	  alert('Page loaded.');
	}
</script>			
			

toc

prototype.js에 새롭게 정의된 객체와 클래스

라이브러리가 당신을 돕는 다른 방법은 객체지향 디자인과 공통적인 기능을 위한 지원 모두를 구현하는 많은 객체를 제공하는 것이다.

toc

PeriodicalExecuter 객체

이 객체는 주어진 함수를 주어진 시간간격으로 반복적으로 호출하기 위한 로직을 제공한다.

메소드 종류 인자 상세설명
[ctor](callback, interval) constructor callback: 파라미터 성격이 아닌 함수, interval: 초단위 시간간격 함수를 반복적으로 호출할 이 객체의 하나의 인스턴스를 생성

프라퍼티 타입 상세설명
callback Function() 호출되기 위한 함수. 이 함수로 전달될 파라미터는 없다.
frequency Number 이것은 수초내 간격으로 실질적으로 작용
currentlyExecuting Boolean 만약 함수 호출이 진행중이라면 표시

toc

Prototype 객체

Prototype 객체는 사용되는 라이브러리의 버전을 명시하는 것보다 중요한 역활을 가지지 않는다.

프라퍼티 타입 상세설명
Version String 라이브러리의 버전
emptyFunction Function() 비어있는(empty) 함수 객체
K Function(obj) 주어진 파라미터를 되돌리는 함수 객체
ScriptFragment String 스크립트를 확인하는 정규식 표현

toc

Enumerable 객체

Enumerable 객체는 list형태의 구조내에서 항목을 반복하기 위한 좀더 멋진 코드를 작성하는 것을 허용한다.

많은 객체들은 유용한 인터페이스에 영향을 끼치기 위해 Enumerable 을 확장한다.

프라퍼티 타입 상세설명
Version String 라이브러리의 버전

메소드 종류 인자 상세설명
each(iterator) instance iterator: Function(value, index)를 충족하는 함수 객체 주어진 iterator함수를 호출하는 것은 첫번째 인자내 목록으로 각각의 요소와 두번째 인자내 요소의 인덱스 전달한다.
all([iterator]) instance iterator: Function(value, index)를 충족하는 함수 객체 이 함수는 주어진 함수를 사용하여 값들의 전체 집합을 테스트하기 위한 방법이다. iterator 함수가 어떤 요소를 위해 falsenull을 반환한다면, all은 false를 반환할것이다. 그렇지 않다면 true를 반환할것이다. iterator가 주어지지 않는다면, 요소 자체가 falsenull이 아닌지 테스트할것이다. 당신은 "모든 요소가 false가 아닌지 체크한다"와 같이 이것을 읽을수 있다.
any(iterator) instance iterator: Function(value, index)를 충족하는 함수 객체(선택사항) 이 함수는 주어진 함수를 사용하여 값들의 전체 집합을 테스트하기 위한 방법이다. iterator함수가 어떤 요소를 위해 falsenull을 반환하지 않는다면 anytrue를 반환할것이다. 그렇지 않다면 false를 반환할것이다. iterator가 주어지지 않는다면, 요소 자체가 falsenull이 아닌지 테스트할것이다. 당신은 "어느 요소가 false가 아닌지 체크한다"와 같이 이것을 읽을수 있다.
collect(iterator) instance iterator: Function(value, index)를 충족하는 함수 객체 집합내 각각의 요소를 위한 iterator함수를 호출하고 Array로 각각의 결과를 반환한다. 집합내 각각의 요소를 위한 하나의 결과 요소는 같은 순서이다.
detect(iterator) instance iterator: Function(value, index)를 충족하는 함수 객체 집합내 각각의 요소를 위한 iterator함수를 호출하고 true를 반환하는 iterator함수를 야기하는 첫번째 요소를 반환한다. true를 반환하는 요소가 없다면, detect는 null을 반환한다.
entries() instance (none) toArray()와 같다.
find(iterator) instance iterator: Function(value, index)를 충족하는 함수 객체 detect()와 같다.
findAll(iterator) instance iterator: Function(value, index)를 충족하는 함수 객체 집합내 각각의 요소를 위한 iterator함수를 호출하고 true로 해석되는 값을 반환하는 iterator함수를 야기하는 모든 요소를 가진 Array을 반환한다. 이 함수는 reject()와는 반대의 함수이다.
grep(pattern [, iterator]) instance pattern: 요소를 일치시키기 위해 사용되는 RegExp객체, iterator: Function(value, index)를 충족하는 함수 객체 집합내 각각의 요소의 문자열 값을 pattern 정규표현식에 대해 테스트한다. 함수는 정규표현식에 대응되는 모든 요소를 포함하는 Array 를 반환할것이다. iterator함수가 주어진다면, Array는 대응되는 각각의 요소를 가진 iterator를 호출한 결과를 포함할것이다.
include(obj) instance obj: 객체 집합내 주어진 객체를 찾도록 시도한다. 객체가 찾아진다면, true를 반환하고 찾지 못한다면 false를 반환한다.
inject(initialValue, iterator) instance initialValue: 초기화 값처럼 사용되는 객체, iterator: Function(accumulator, value, index)를 충족하는 함수 객체 iterator함수를 사용하여 집합의 모든 요소를 조합한다. 호출된 iterator는 accumulator인자에서 이전 반복의 결과를 전달한다. 첫번째 반복은 accumulator인자내 initialValue를 가진다. 마지막 결과는 마지막 반환값이다.
invoke(methodName [, arg1 [, arg2 [...]]]) instance methodName: 각각의 요소내에서 호출될 메소드의 이름, arg1..argN: 메소드 호출로 전달될 인자. 집합의 각각의 요소내 methodName에 의해 명시되는 메소드를 호출하는 것은 주어진 인자(arg1에서 argN) 전달하고 Array객체로 결과를 반환한다.
map(iterator) instance iterator: Function(value, index)를 충족하는 함수 객체 collect()과 같다.
max([iterator]) instance iterator: Function(value, index)를 충족하는 함수 객체 집합내 가장 큰 값이나 iterator가 주어진다면 집합내 각각의 요소를 위한 iterator호출의 가장 큰 결과를 반환한다.
include(obj) instance obj: 객체 include()과 같다.
min([iterator]) instance iterator: Function(value, index)를 충족하는 함수 객체 집합내 가장 작은 값을 가진 요소나 iterator가 주어진다면 집합내 각각의 요소를 위한 iterator호출의 가장 작은 결과를 가진 요소를 반환한다.
partition([iterator]) instance iterator: Function(value, index)를 충족하는 함수 객체 두개의 다른 배열을 포함하는 Array를 반환한다. 첫번째 배열은 true를 반환하는 iterator함수를 야기하는 모든 요소를 포함할것이고 두번째 배열은 남아있는 요소를 포함할것이다. 만약 iterator가 주어지지 않는다면, 첫번째 배열은 true로 해석하는 요소를 포함할것이고 다른 배열은 남아있는 요소를 포함할것이다.
pluck(propertyName) instance propertyName : 각각의 요소로부터 읽어들이는 프라퍼티의 이름. 이것은 요소의 인덱스를 포함할수 있다. 집합의 각각의 요소내 propertyName에 의해 명시된 프라퍼티에 값을 가져가고 Array객체로 결과를 반환한다.
reject(iterator) instance iterator: Function(value, index)를 충족하는 함수 객체 집합내 각각의 요소를 위한 iterator함수를 호출하고 false로 해석하는 값을 반환하는 iterator함수를 야기하는 모든 요소를 가진 Array를 반환한다. 이 함수는 findAll()과는 반대되는 함수이다..
select(iterator) instance iterator: Function(value, index)를 충족하는 함수 객체 findAll()과 같다.
sortBy(iterator) instance iterator: Function(value, index)를 충족하는 함수 객체 iterator함수 호출결과를 따르는 정렬된 모든 요소를 가진 Array을 반환.
toArray() instance (none) 집합의 모든 요소를 가지는 Array를 반환.
zip(collection1[, collection2 [, ... collectionN [,transform]]]) instance collection1 .. collectionN: 병합될 목록, transform: Function(value, index)를 충족하는 함수 객체 현재의 집합으로 각각의 주어진 집합을 병합한다. 이 병합 작업은 같은 수의 요소를 가진 새로운 배열을 반환한다. 현재 집합과 각각의 요소가 각각의 병합된 집합으로부터 같은 인덱스를 가진 요소의 배열(이것을 하위 배열이라고 부르자.)이다. transform함수가 주어진다면, 각각의 하위 배열은 반환되기 전에 이 함수에 의해 변형딜것이다. 빠른 예제 : [1,2,3].zip([4,5,6], [7,8,9]).inspect() 는 "[[1,4,7],[2,5,8],[3,6,9] ]" 를 반환한다.

toc

Hash 객체

Hash 객체는 hash구조를 구현한다. 이를테면, Key:Value쌍의 집합.

Hash객체내 각각의 항목은 두개의 요소(첫번째는 key, 두번째는 value)를 가진 배열이다. 각각의 항목은 두개의 프라퍼티(keyvalue)를 가진다.

메소드 종류 인자 상세설명
keys() instance (none) 모든 항목의 key를 가진 Array을 반환
values() instance (none) 모든 항목의 value를 가진 Array을 반환
merge(otherHash) instance otherHash: Hash 객체 hash와 전달된 다른 hash를 조합하고 새로운 결과 hash를 반환
toQueryString() instance (none) 쿼리 문자열처럼 포맷팅된 문자열로 hash의 모든 항목을 반환. 이를테면 'key1=value1&key2=value2&key3=value3'
inspect() instance (none) key:value쌍을 가진 hash의 포맷팅된 문자열 표현을 반환하기 위해 변경(오버라이드)

toc

ObjectRange 클래스

Enumerable으로부터 상속

상위 경계나 하위 경계로 값들의 범위를 표시

프라퍼티 타입 종류 상세설명
start (any) instance 범위의 시작값
end (any) instance 범위의 마지막값
exclusive Boolean instance 경계자체가 범위의 일부인지 판단

메소드 종류 인자 상세설명
[ctor](start, end, exclusive) constructor start: 시작값, end: 마지막값, exclusive: 경계가 범위내 포함되는가.? 하나의 range객체를 생성한다. start 에서 end로 범위를 지정한다. startend가 같은 타입의 객체이고 succ()메소드를 가져야만 한다.
include(searchedValue) instance searchedValue: 검색할 값 주어진 값이 범위내 값인지 체크. truefalse값을 반환한다.

toc

Class 객체

Class 객체는 라이브러리에서 다른 클래스를 선언할때 사용된다. 클래스를 선언할때 이 객체를 사용하는 것은 생성자로 제공되는 initialize()메소드를 지원하기 위한 새로운 클래스를 발생시킨다.

아래의 샘플을 보라.

//declaring the class
var MySampleClass = Class.create();

//defining the rest of the class implmentation
MySampleClass.prototype = {

   initialize: function(message) {
		this.message = message;
   },

   showMessage: function(ajaxResponse) {
      alert(this.message);
   }
};	

//now, let's instantiate and use one object
var myTalker = new MySampleClass('hi there.');
myTalker.showMessage(); //displays alert

			

메소드 종류 인자 상세설명
create(*) instance (any) 새로운 클래스를 위한 생성자를 정의

toc

Ajax 객체

이 객체는 AJAX기능을 제공하는 많은 다른 클래스를 위한 root와 명명공간(namespace)처럼 제공한다.

프라퍼티 타입 종류 상세설명
activeRequestCount Number instance 진행중인 AJAX요청의 수.

메소드 종류 인자 상세설명
getTransport() instance (none) 새로운 XMLHttpRequest 객체를 반환

toc

Ajax.Responders 객체

Enumerable로 부터 상속되었다

이 객체는 Ajax관련 이벤트가 발생할때 호출될 객체의 목록을 보존한다. 예를 들어, 당신이 AJAX작업을 위한 전역 예외 핸들러를 연결하길 원한다면 이 객체를 사용할수 있다.

프라퍼티 타입 종류 상세설명
responders Array instance 객체의 목록은 AJAX이벤트 알림(notifications)을 위해 등록되었다..

메소드 종류 인자 상세설명
register(responderToAdd) instance responderToAdd: 호출될 메소드를 가진 객체 responderToAdd인자를 전달하는 객체는 AJAX이벤트(이를테면, onCreate, onComplete, onException 등등)처럼 명명된 메소드를 포함해야만 한다. 유사한 이벤트가 발생하면, 적절한 이름을 가진 메소드를 포함하는 모든 등록된 객체가 호출되는 메소드를 가질것이다.
unregister(responderToRemove) instance responderToRemove: list로부터 제거될 객체 responderToRemove 인자로 전달되는 객체는 등록된 객체의 list로부터 제거될것이다.
dispatch(callback, request, transport, json) instance callback: 보고되는 AJAX이벤트 이름, request: 이벤트를 책임지는 the Ajax.Request 객체, transport: AJAX호출을 가지는 XMLHttpRequest 객체, json: 응답의 X-JSON 헤더(존재할때만) 등록된 객체의 목록을 통해 실행하는 것은 callback 인자내 결정된 메소드를 가지는 것을 찾는다. 호출되는 각각의 메소드는 다른 3개의 인자를 전달한다. AJAX응답이 몇몇 JSON컨텐츠를 가지는 X-JSON HTTP 헤더를 포함한다면, 이것은 평가되고 json인자로 전달될것이다. 만약 이벤트가 onException라면, transport인자는 대신에 예외를 가질것이고 json은 전달되지 않을것이다.

toc

Ajax.Base 클래스

이 클래스는 Ajax객체내 정의된 다른 대부분의 클래스를 위한 기본(base)클래스처럼 사용된다.

메소드 종류 인자 상세설명
setOptions(options) instance options: AJAX 옵션 AJAX작업을 위해 필요한 옵션 셋팅
responseIsSuccess() instance (none) 만약 AJAX작업이 성공한다면 true를 반환하고, 실패한다면 false를 반환
responseIsFailure() instance (none) responseIsSuccess()와는 반대.

toc

Ajax.Request 클래스

Ajax.Base로 부터 상속

AJAX 작업을 캡슐화

프라퍼티 타입 종류 상세설명
Events Array static AJAX작업중 보고되는 가능한 이벤트/상태의 목록. 목록은 'Uninitialized', 'Loading', 'Loaded', 'Interactive', 그리고 'Complete.'를 포함한다.
transport XMLHttpRequest instance AJAX작업을 가지는 XMLHttpRequest 객체
url String instance 요청에 의해 대상이 되는 URL

메소드 종류 인자 상세설명
[ctor](url, options) constructor url: 꺼내기 위한 url, options: AJAX 옵션 주어진 옵션을 사용하여 주어진 url을 호출할 이 객체의 하나의 인스턴스를 생성. 중요사항: 선택된 url은 브라우저의 보안 셋팅을 위한 대상이 될 가치가 없다. 많은 경우 브라우저는 현재 페이지처럼 같은 호스트로부터가 아니라면 url을 가져오지 않을것이다. 당신은 설정을 피하거나 사용자의 브라우저를 제한하기 위한 로컬 url만을 사용할 것이다.
evalJSON() instance (none) 이 메소드는 대개 외부적으로 호출되지 않는다. 이것은 AJAX응답내 존재하는 X-JSON HTTP헤더의 컨텐츠를 평가하기 위해 내부적으로 호출된다.
evalReponse() instance (none) 이 메소드는 대개 외부적으로 호출되지 않는다. AJAX응답이 text/javascriptContent-type헤더를 가진다면, 응답 몸체는 평가되고 이 메소드는 사용될것이다.
header(name) instance name: HTTP 헤더명 이 메소드는 대개 외부적으로 호출되지 않는다. 이것은 AJAX응답의 HTTP헤더의 컨텐츠를 가져오기 위해 내부적으로 호출된다.
onStateChange() instance (none) 이 메소드는 대개 외부적으로 호출되지 않는다. 이것은 AJAX호출 상태 변경시 객체 자체에 의해 호출된다.
request(url) instance url: AJAX호출을 위한 url 이 메소드는 대개 외부적으로 호출되지 않는다. 이것은 생성자를 호출하는 동안 벌써 호출되었다.
respondToReadyState(readyState) instance readyState: 상태 숫자값(1 에서 4) 이 메소드는 대개 외부에서 호출되지 않는다. 이것은 AJAX호출 상태가 변경될때 객체 자체에 의해 호출된다.
setRequestHeaders() instance (none) 이 메소드는 대개 외부적으로 호출되지 않는다. 이것은 HTTP요청을 하는 동안 보내어질 HTTP헤더를 조합하기 위한 객체 스스로에 의해 호출된다.

toc

options 인자 객체

AJAX작업의 중요한 부분은 options 인자이다. 이것은 기대되는 프라퍼티를 가지는 동안 어떠한 객체도 전달될수 있다. 이것은 AJAX호출을 위해 익명 객체를 생성하는 것이 공통적이다.

프라퍼티 타입 디폴트 상세설명
method String 'post' HTTP요청의 메소드
parameters String '' 요청에 전달한 값들의 url형태의 목록
asynchronous Boolean true AJAX호출이 비동기적으로 만들어지는지 표시
postBody String undefined HTTP POST의 경우 요청의 몸체내 전달되는 내용
requestHeaders Array undefined 요청과 함께 전달되기 위한 HTTP헤더의 목록. 이 목록은 많은 수의 항목을 가져야 한다. 나머지 항목은 사용자 정의 헤더의 이름이다. 그리고 다음의 항목은 헤더의 문자열 값이다. 예제 : ['my-header1', 'this is the value', 'my-other-header', 'another value']
onXXXXXXXX Function(XMLHttpRequest) undefined 각각의 이벤트/상태가 AJAX호출이 발생하는 동안 도착할때 호출될 사용자정의 함수. 예제 var myOpts = {onComplete: showResponse, onLoaded: registerLoaded};. 사용되는 함수는 AJAX작업을 가지는 XMLHttpRequest객체를 포함하는 하나의 인자를 받을것이다.
onSuccess Function(XMLHttpRequest) undefined AJAX호출이 성공적으로 완성될때 호출될 사용자정의 함수. 사용되는 함수는 AJAX작업을 가지는 XMLHttpRequest객체를 포함하는 하나의 인자를 받을것이다.
onFailure Function(XMLHttpRequest) undefined AJAX호출이 에러를 가진채 끝날때 호출될 사용자정의 함수. 사용되는 함수는 AJAX작업을 가지는 XMLHttpRequest객체를 포함하는 하나의 인자를 받을것이다.
insertion Function(Object, String) null 삽입하기 위해 호출되는 함수는 텍스트를 요소로 반환한다. 함수는 수정되기 위한 요소객체와 Ajax.Updater객체에만 적용되는 응답 텍스트의 두개의 인자를 가지고 호출된다.
evalScripts Boolean undefined, false 스크립트 블럭이 응답이 도착했을때 평가할지를 판단. Ajax.Updater객체에만 적용.
decay Number undefined, 1 Ajax.PeriodicalUpdater 객체는 받은 응답이 마지막 것과 같을때 비율을 새롭게 하여 연속적인 후퇴를 결정. 예를 들어, 당신이 2를 사용한다면, 새롭게 된것중에 하나가 이전것과 같은 결과를 만든후에, 객체는 다음 refresh를 위한 시간의 두배를 기다릴것이다. 이것은 다시 반복한다면, 객체는 4배를 기다릴것이다. 이것을 후퇴를 피하기 위해 정의되지 않거나 1을 사용하도록 남겨두라.
frequency Number undefined, 2 초단위의 갱신간격(횟수가 아닌), Ajax.PeriodicalUpdater객체에만 적용.

toc

Ajax.Updater 클래스

Ajax.Request로 부터 상속

요청된 url이 당신 페이지의 특정 요소내 직접적으로 삽입하길 원하는 HTML을 반환할때 사용된다. 당신은 url이 도착을 평가할 <script>블럭을 반환할때 이 객체를 사용할수 있다. 스크립트로 작업하기 위해 evalScripts 옵션을 사용하라.

프라퍼티 타입 종류 상세설명
containers Object instance 이 객체는 두개의 프라퍼티(containers.success 는 AJAX호출이 성공할때 사용될것이다. 그리고 AJAX호출이 실패한다면 containers.failure가 사용될것이다.)를 포함한다.

메소드 종류 인자 상세설명
[ctor](container, url, options) constructor container: 이것은 요소의 id, 요소객체 자체, 또는 두개의 프라퍼티(AJAX호출이 성공했을때 사용될 object.success 요소(또는 id), 그리고 AJAX호출이 실패했을때 사용될 object.failure요소(또는 id))를 가지는 객체가 될수 있다. url: 가져오기 위한 url, options: AJAX 옵션 주어진 옵션을 사용하여 주어진 url을 호출할 이 객체의 하나의 인스턴스를 생성.
updateContent() instance (none) 이 메소드는 대개 외부적으로 호출되지 않는다. 이것은 응답을 받았을때 객체 자체에 의해 호출된다. 이것은 HTML로 적절한 요소를 수정하거나 insertion옵션내 전달되는 함수를 호출할것이다. 이 함수는 두개의 인자(수정되기 위한 요소와 응답 텍스트)를 가지고 호출될것이다.

toc

Ajax.PeriodicalUpdater 클래스

Ajax.Base로 부터 상속

이 클래스는 반복적으로 인스턴스화하고 페이지에서 요소를 새롭게 하거나 Ajax.Updater가 수행할수 있는 다른 작업중 어느것을 수행하기 위한 Ajax.Updater객체를 사용한다. 좀더 많은 정보를 위해 Ajax.Updater 참조를 체크하라.

프라퍼티 타입 종류 상세설명
container Object instance 이 값은 Ajax.Updater생성자에 일관적으로 전달될것이다.
url String instance 이 값은 Ajax.Updater의 생성자에 일관적으로 전달될것이다.
frequency Number instance 초단위의 refresh간격. 디폴트는 2초. 이 숫자는 Ajax.Updater 객체를 호출할때 현재 축소(decay)에 의해 곱해질것이다.
decay Number instance 작업을 재-수행할때 적용될 축소(decay)레벨을 유지
updater Ajax.Updater instance 가장 최신에 사용된 Ajax.Updater 객체
timer Object instance 다른 refresh를 위한 시각일때 객체를 알리기 위해 사용되는 자바스크립트 타이머

메소드 종류 인자 상세설명
[ctor](container, url, options) constructor or container:이것은 요소의 id, 요소객체 자체, 또는 두개의 프라퍼티(AJAX호출이 성공할때 사용될 object.success 요소(나 id), AJAX호출이 실패할때 사용할 object.failure 요소(나 id))를 가지는 객체가 될수 있다. url: 가져오기 위한 url, options: AJAX 옵션 주어진 옵션을 사용하여 주어진 url을 호출할 이 객체의 하나의 인스턴스를 생성
start() instance (none) 이 메소드는 대개 외부적으로 호출되지 않는다. 이것의 정기적인 작업 수행을 시작하기 위해 객체 자체에 의해 호출된다.
stop() instance (none) 이 메소드는 대개 외부적으로 호출되지 않는다. 이것의 정기적인 작업 수행을 시작하기 위해 객체 자체에 의해 호출된다.
updateComplete() instance (none) 이 메소드는 대개 외부적으로 호출되지 않는다. 요청을 완성한 후에 사용되는 Ajax.Updater에 의해 호출된다. 이것은 다음 refresh스케줄링 하기 위해 사용된다.
onTimerEvent() instance (none) 이 메소드는 대개 외부적으로 호출되지 않는다. 이것은 다음 수정을 위한 시각일때 내부적으로 호출된다.

toc

Element 객체

이 객체는 DOM내 요소를 변경하기 위해 몇몇 유틸리티성 함수들을 제공한다.

메소드 종류 인자 상세설명
addClassName(element, className) instance element: element 객체 또는 아이디, className: CSS 클래스명 주어진 class명을 요소의 class명으로 추가
classNames(element) instance element: element 객체 또는 아이디 주어진 element와 관련된 CSS class명을 표시하는 Element.ClassNames 객체를 반환
cleanWhitespace(element) instance element: element 객체 또는 아이디 요소의 자식노드에서 공백을 제거
empty(element) instance element: element 객체 또는 아이디 element태그가 비어있는지(또는 공백만을 가지고 있는지) 표시하는 Boolean값을 반환
getDimensions(element) instance element: element 객체 또는 아이디 element의 면적(dimensions)을 반환. 반환된 값은 두개의 프라퍼티(heightwidth)를 가지는 객체이다.
getHeight(element) instance element: element 객체 또는 아이디 요소의 offsetHeight값을 반환
getStyle(element, cssProperty) instance element: element 객체 또는 아이디, cssProperty : CSS프라퍼티('prop-name' 또는 'propName' 가 작동하는 형태)의 이름 주어진 element내 CSS프라퍼티의 값을 반환하거나 존재하지 않는다면 null 을 반환
hasClassName(element, className) instance element: element 객체 또는 아이디, className: CSS class명 요소가 class명중에 하나로 주어진 class명을 가진다면 true를 반환
hide(elem1 [, elem2 [, elem3 [...]]]) instance elemN: element 객체 또는 아이디 style.display'none'로 셋팅하여 각각의 요소를 숨긴다.
makeClipping(element) instance element: element 객체나 아이디
makePositioned(element) instance element: element 객체나 아이디 element의 style.position'relative'로 변경
remove(element) instance element: element 객체 또는 아이디 문서로 부터 요소를 제거한다.
removeClassName(element, className) instance element: element 객체 또는 아이디, className: CSS 클래스명 요소의 class명으로 부터 주어진 class명을 제거
scrollTo(element) instance element: element 객체나 아이디 창을 element위치로 스크롤
setStyle(element, cssPropertyHash) instance element: element 객체나 아이디, cssPropertyHash : 적용되기 위한 스타일을 가지는 Hash객체 cssPropertyHash 인자내 값에 따라, 주어진 element내 CSS프라퍼티의 값을 셋팅.
show(elem1 [, elem2 [, elem3 [...]]]) instance elemN: element 객체 또는 아이디 style.display''로 다시 셋팅하여 각각의 요소를 보여준다.
toggle(elem1 [, elem2 [, elem3 [...]]]) instance elemN: element 객체 또는 아이디 각각의 전달된 요소의 가시성(visibility)을 토글(toggle)한다.
undoClipping(element) instance element: element 객체 또는 아이디
undoPositioned(element) instance element: element 객체 또는 아이디 element의 style.position''으로 초기화
update(element, html) instance element: element 객체 또는 아이디, html: html 컨텐츠 주어진 html인자를 가지는 요소의 내부 html을 대체. 주어진 html이 <script>블럭을 포함한다면, 그것들은 포함되지는 않지만 평가될것이다.
visible(element) instance element: element 객체 또는 아이디 요소가 눈에 보이는지 표시하는 Boolean값을 반환

toc

Element.ClassNames class

Enumerable로부터 상속

element에 관련된 CSS class명의 collection을 표시

메소드 종류 인자 상세설명
[ctor](element) constructor element: DOM element 객체또는 아이디 주어진 element의 CSS class명을 표시하는 Element.ClassNames 객체를 생성
add(className) instance className: CSS class 명 element에 관련된 class명의 리스트에 주어진 CSS class명을 추가
remove(className) instance className: CSS class 명 element에 관련된 class명의 리스트로부터 주어진 CSS class명을 제거
set(className) instance className: CSS class 명 주어진 CSS class명을 가진 element을 결합, element로부터 다른 class명을 제거.

toc

The Abstract 객체

이 객체는 라이브러리내 다른 클래스를 위한 root처럼 제공한다. 이것은 어떤 프라퍼티나 메소드도 가지지 않는다. 이 객체에 정의된 클래스는 전통적인 추상 클래스처럼 처리된다.

toc

Abstract.Insertion 클래스

이 클래스는 동적으로 내용물을 추가할 다른 클래스를 위한 기본 클래스처럼 사용된다. 이 클래스는 추상 클래스처럼 사용된다.

메소드 종류 인자 상세설명
[ctor](element, content) constructor element: element 객체 또는 아이디, content: 삽입되는 HTML 동적 내용물 삽입을 도울 객체를 생성
contentFromAnonymousTable() instance (none)

프라퍼티 타입 종류 상세설명
adjacency String static, parameter 내용물이 주어진 요소에 대해 상대적으로 위치할 지점을 명시하는 파라미터. 가능한 값은 'beforeBegin', 'afterBegin', 'beforeEnd', 그리고 'afterEnd'.
element Object instance 삽입이 상대적으로 만들어질 요소객체
content String instance 삽입될 HTML.

toc

Insertion 객체

이 객체는 라이브러리내 다른 클래스를 위한 root처럼 제공한다. 이것은 어떠한 프라퍼티나 메소드를 가지지 않는다. 이 객체에 정의된 클래스는 전통적인 추상 클래스처럼 처리된다.

toc

Insertion.Before 클래스

Abstract.Insertion로 부터 상속

요소 앞에 HTML삽입

메소드 종류 인자 상세설명
[ctor](element, content) constructor element: element 객체 또는 아이디, content: 삽입되는 HTML Abstract.Insertion으로 부터 상속. 동적으로 내용물을 삽입하는 것을 돕는 객체를 생성

다음의 코드는

<br>Hello, <span id="person" style="color:red;">Wiggum. How's it going?</span>

<script> new Insertion.Before('person', 'Chief '); </script>
			

다음처럼 HTML이 변경될것이다.

<br>Hello, Chief <span id="person" style="color:red;">Wiggum. How's it going?</span>	
			

toc

Insertion.Top 클래스

Abstract.Insertion로 부터 상속

요소아래의 첫번째 자식으로 HTML을 삽입. 이 내용물은 요소의 열기 태그뒤에 위치할것이다.

메소드 종류 인자 상세설명
[ctor](element, content) constructor element: element 객체 또는 아이디, content: 삽입되는 HTML Abstract.Insertion으로부터 상속. 동적으로 내용물을 삽입하는 것을 돕는 객체 생성

다음의 코드는

<br>Hello, <span id="person" style="color:red;">Wiggum. How's it going?</span>

<script> new Insertion.Top('person', 'Mr. '); </script>
			

다음처럼 HTML이 변경될것이다.

<br>Hello, <span id="person" style="color:red;">Mr. Wiggum. How's it going?</span>	
			

toc

Insertion.Bottom 클래스

Abstract.Insertion로 부터 상속

요소아래의 마지막 자식으로 HTML삽입. 내용물은 요소의 닫기 태그앞에 위치할것이다.

메소드 종류 인자 상세설명
[ctor](element, content) constructor element: element 객체 또는 아이디, content: HTML to be inserted Abstract.Insertion로 부터 상속. 동적으로 내용물을 삽입하는 것을 돕는 객체 생성

다음의 코드는

<br>Hello, <span id="person" style="color:red;">Wiggum. How's it going?</span>

<script> new Insertion.Bottom('person', " What's up?"); </script>
			

다음처럼 HTML이 변경될것이다.

<br>Hello, <span id="person" style="color:red;">Wiggum. How's it going? What's up?</span>	
			

toc

Insertion.After 클래스

Abstract.Insertion로 부터 상속

요소의 닫기 태그뒤 HTML삽입

메소드 종류 인자 상세설명
[ctor](element, content) constructor element: element 객체 또는 아이디, content: HTML to be inserted Abstract.Insertion으로부터 상속. 동적으로 내용물을 삽입하는 것을 돕는 객체 생성

다음의 코드는

<br>Hello, <span id="person" style="color:red;">Wiggum. How's it going?</span>

<script> new Insertion.After('person', ' Are you there?'); </script>
			

다음처럼 HTML이 변경될것이다.

<br>Hello, <span id="person" style="color:red;">Wiggum. How's it going?</span> Are you there?	
			

toc

Field 객체

이 객체는 폼내 input필드와 작동하기 위한 몇가지 유틸리티성 함수를 제공한다.

메소드 종류 인자 상세설명
clear(field1 [, field2 [, field3 [...]]]) instance fieldN: field element 객체 또는 아이디 field요소로부터 각각 전달된 값을 지움(clear)
present(field1 [, field2 [, field3 [...]]]) instance fieldN: field element 객체 또는 아이디 모든 폼 field가 빈값이 아니라면 true를 반환
focus(field) instance field: field element 객체 또는 아이디 주어진 폼 field로 입력 포커스 이동
select(field) instance field: field element 객체 또는 아이디 텍스트 선택을 지원하는 field내 값을 선택
activate(field) instance field: field element 객체 또는 아이디 포커스를 이동하고 텍스트 선택을 지원하는 field내 값을 선택

toc

Form 객체

이 객체는 데이터 항목 폼과 그것들의 입력 field와 작동하기 위한 몇몇 유틸리티성 함수를 제공한다.

메소드 종류 인자 상세설명
serialize(form) instance form: form element 객체 또는 아이디 'field1=value1&field2=value2&field3=value3'처럼 field명과 값의 url형태의 목록을 반환
findFirstElement(form) instance form: form element 객체 또는 아이디 form에서 첫번째로 사용가능한 필드 element를 반환
getElements(form) instance form: form element 객체 또는 아이디 폼내 모든 입력 field를 포함하는 Array 반환
getInputs(form [, typeName [, name]]) instance form: form element 객체 또는 아이디, typeName: input요소의 타입, name: input요소명. 폼내 모든 <input>요소를 포함하는 Array 반환. 선택적으로 목록은 요소의 타입이나 name속성에 의해 필터링 될수 있다.
disable(form) instance form: form element 객체 또는 아이디 폼내 모든 입력 field를 사용불가상태로 만들기
enable(form) instance form: form element 객체 또는 아이디 폼내 모든 입력 field를 사용가능하게 만들기
focusFirstElement(form) instance form: form element 객체 또는 아이디 첫번째 가시성을 활성화하고, 폼내 입력 field를 가능하게 하기
reset(form) instance form: form element 객체 또는 아이디 폼을 리셋하기. form객체의 reset()메소드와 같다.

toc

Form.Element 객체

이 객체는 폼요소와 작동하기 위한 몇몇 유틸리티성 함수를 제공한다.

메소드 종류 인자 상세설명
serialize(element) instance element: element 객체 또는 아이디 'elementName=elementValue'처럼 요소의 name=value 짝을 반환
getValue(element) instance element: element 객체 또는 아이디 요소의 값을 반환

toc

Form.Element.Serializers 객체

이 객체는 폼요소의 현재 값을 가져오기 위해 라이브러리 내부적으로 사용되는 몇몇 유틸리티성 함수를 제공한다.

메소드 종류 인자 상세설명
inputSelector(element) instance element: radio 버튼이나 checkbox처럼 checked프라퍼티를 가지는 form요소의 객체 또는 아이디 ['elementName', 'elementValue']처럼 요소의 이름과 값을 가지는 Array을 반환
textarea(element) instance element: textbox, button 또는 password필드처럼 value프라퍼티를 가지는 form요소의 객체 또는 아이디. ['elementName', 'elementValue']처럼 요소의 이름과 값을 가지는 Array를 반환
select(element) instance element: <select> 요소의 객체 또는 아이디 ['elementName', 'selOpt1 selOpt4 selOpt9']처럼 요소의 이름과 모든 선택된 옵션의 값이나 텍스트를 가지는 Array를 반환

toc

Abstract.TimedObserver 클래스

이 클래스는 값이 변경(또는 프라퍼티가 클래스정의를 얻어내는)될때까지 하나의 요소를 모니터링할 다른 클래스를 위한 기본클래스처럼 사용된다. 이 클래스는 추상클래스처럼 사용된다.

하위클래스는 요소의 입력값, style프라퍼티중 하나, 또는 테이블내 row의 수, 또는 당신이 추적하고자 하는 모든것을 모니터링하기 위해 생성될수 있다.

얻어낸 클래스는 요소내 모니터링되는 현재 값을 무엇인지 판단하기 위한 메소드를 구현하는 것이다.

메소드 종류 인자 상세설명
[ctor](element, frequency, callback) constructor element: element 객체 또는 아이디, frequency: 초단위 간격, callback: 요소가 변경될때 호출되는 함수 요소를 모니터링할 객체 생성
registerCallback() instance (none) 이 메소드는 대개 외부적으로 호출되지 않는다. 이것은 요소 모니터링릉 시작하기 위한 객체 자체에 의해 호출된다.
onTimerEvent() instance (none) 이 메소드는 대개 외부적으로 호출되지 않는다. 이것은 요소를 체크하기 위해 정기적으로 객체 자체에 의해 호출된다.

프라퍼티 타입 상세설명
element Object 모니터링되는 요소객체
frequency Number 이것은 체크사이에 초단위 간격으로 이루어진다.
callback Function(Object, String) 요소가 변경될때마다 호출되기 위한 함수. 이것은 요소객체와 새로운 값을 받을것이다.
lastValue String 요소내 확인되는 마지막 값

toc

Form.Element.Observer 클래스

Abstract.TimedObserver로 부터 상속

폼 입력 요소의 값을 모니터링하는 Abstract.TimedObserver의 구현물. 값 변경을 보고하는 이벤트를 드러내지 않는 요소를 모니터링하고자 할때 이 클래스를 사용하라. 이 경우 당신은 Form.Element.EventObserver 클래스를 대신 사용할수 있다.

메소드 종류 인자 상세설명
[ctor](element, frequency, callback) constructor element: element 객체 또는 아이디, frequency: interval in seconds, callback: function to be called when the element changes Abstract.TimedObserver으로부터 상속. 요소의 value프라퍼티를 모니터링할 객체를 생성.
getValue() instance (none) 요소의 값을 반환

toc

Form.Observer 클래스

Abstract.TimedObserver로 부터 상속

폼내 데이터 항목 요소의 값이 변경하는지를 모니터링하는 Abstract.TimedObserver의 구현물. 당신이 값 변경을 보고하는 이벤트를 드러내지 않는 요소를 포함하는 폼을 모니터링하고자 할때 이 클래스를 사용하라. 이 경우 당신은 Form.EventObserver 클래스를 대신 사용할수 있다.

메소드 종류 인자 상세설명
[ctor](form, frequency, callback) constructor form: form 객체 또는 아이디, frequency: 초단위 간격, callback: form내 데이터 항목 요소가 변경될때 호출되는 함수 Abstract.TimedObserver로부터 상속. 변경하기 위한 폼을 모니터링할 객체 생성.
getValue() instance (none) 모든 폼의 데이터의 직렬화를 반환

toc

Abstract.EventObserver 클래스

이 클래스는 요소를 위해 값-변경 이벤트가 발생할때마다 콜백함수를 수행하는 다른 클래스를 위한 기본 클래스처럼 사용된다.

Abstract.EventObserver 타입의 다중 객체는 다른것을 지우지 않고 같은 요소로 묶일수 있다. 콜백은 요소에 할당되는 순서대로 수행될것이다.

트리거 형태의 이벤트는 radio버튼과 checkbox를 위해서는 onclick이고 대개의 textbox와 리스트박스/드랍다운을 위해서는 onchange이다.

얻어낸 클래스는 요소내 모니터링되는 현재 값을 무엇인지 판단하기 위한 메소드를 구현하는 것이다.

메소드 종류 인자 상세설명
[ctor](element, callback) constructor element: element 객체 또는 아이디, callback: 이벤트가 발생할때 호출되는 함수 요소를 모니터링할 객체 생성.
registerCallback() instance (none) 이 메소드는 대개 외부적으로 호출되지 않는다. 이것은 요소의 이벤트를 자체적으로 묶는 객체에 의해 호출된다.
registerFormCallbacks() instance (none) 이 메소드는 대개 외부적으로 호출되지 않는다. 이것은 폼내 각각의 데이터 항목 요소의 이벤트로 자체적으로 묶기 위한 객체에 의해 호출된다.
onElementEvent() instance (none) 이 메소드는 대개 외부적으로 호출되지 않는다. 이것은 요소의 이벤트로 묶일것이다.

프라퍼티 타입 상세설명
element Object 모니터링되는 요소객체
callback Function(Object, String) 요소가 변경될때마다 호출되기 위한 함수. 이것은 요소객체와 새로운 값을 받을것이다.
lastValue String 요소내 확인되는 마지막 값

toc

Form.Element.EventObserver 클래스

Abstract.EventObserver로 부터 상속

요소내 값 변경을 감지하기 위한 폼 데이터 항목 요소의 적절한 이벤트를 위한 콜백 함수를 수행하는 Abstract.EventObserver의 구현물. 만약 요소가 변경을 보고하는 이벤트를 드러내지 않는다면, 당신은 Form.Element.Observer 클래스를 대신 사용할수 있다.

메소드 종류 인자 상세설명
[ctor](element, callback) constructor element: element 객체 또는 아이디, callback: function to be called when the event happens Abstract.EventObserver로 부터 상속. 요소의 value프라퍼티를 모니터링할 객체 생성.
getValue() instance (none) 요소의 값 반환.

toc

Form.EventObserver 클래스

Abstract.EventObserver로 부터 상속

값이 변결될때 감지하기 위한 요소의 이벤트를 사용하여 폼내 포함되는 어느 데이터 항목 요소에 변경을 모니터링하는 Abstract.EventObserver의 구현물. 만약 폼이 변경을 보고하는 이벤트를 드러내지 않는 요소를 포함한다면, 당신은 Form.Observer 클래스를 대신 사용할수 있다.

메소드 종류 인자 상세설명
[ctor](form, callback) constructor form: form 객체 또는 아이디, callback: form내 데이터 항목 요소가 변경될때 호출되는 함수 Abstract.EventObserver로부터 상속. 변경을 위해 폼을 모니터링할 객체 생성.
getValue() instance (none) 모든 폼의 데이터 직렬화를 반환

toc

Position 객체 (예비 문서)

이 객체는 요소 위치할당을 작업할때 돕는 수많은 함수를 제공한다.

메소드 종류 인자 상세설명
prepare() instance (none) 스크롤 위치내 변경을 수용하기 위한 deltaXdeltaY 프라퍼티 조정. 페이지 스크롤후 withinIncludingScrolloffset를 호출하기 전에 이 메소드를 호출하는 것을 기억하라.
realOffset(element) instance element: object 요소에 영향을 끼치는 어느 스크롤 offset를 포함하는 요소의 정확한 스크롤 offset를 가진 Array을 반환. 이 결과 배열은 [total_scroll_left, total_scroll_top]과 유사하다.
cumulativeOffset(element) instance element: object 위치가 할당된 부모 요소에 의해 부과된 어느 offset를 포함하는 요소의 정확한 위치가 할당된 offset를 가진 Array을 반환. 결과 배열은 [total_offset_left, total_offset_top]과 유사하다.
within(element, x, y) instance element: object, x 와 y: 위치 조정 만약 주어진 지점이 주어진 요소의 직사각형내 조정이 되는지 테스트.
withinIncludingScrolloffsets(element, x, y) instance element: object, x and y: coordinates of a point  
overlap(mode, element) instance mode: 'vertical' 나 'horizontal', element: object within()은 이 메소드가 호출되기 전에 호출될 필요가 있다. 이 메소드는 요소에서 겹치는 것을 조정하는 세분화정도를 표현하는 0.0과 1.0사이의 10진수를 반환할것이다. 예를 들면, 만약 요소가 100px를 가지는 정사각형 DIV이고 (300,300)에 위치한다면, within(divSquare, 330, 330); overlap('vertical', divSquare);은 DIV의 top border로부터 10%(30px)를 가리키는 것을 의미하는 0.10을 반환할것이다.
clone(source, target) instance source: element 객체 또는 아이디, target: element 객체 또는 아이디 source요소에 대해 똑같이 target요소의 크기를 다시 조정하고 다시 위치를 지정


1.4.0을 위한 이 문서는 여전히 작업중입니다. 이 문서의 업데이트를 계속 지켜봐주십시오.
만약 에러를 발견한다면, let me know나에게 알려주십시오. 그러면 가능한한 빨리 그것을 수정할것입니다.
한글 번역에 관련된 부분은 한국어 번역자으로 알려주십시오.

신고
Posted by naearu
연구_고민2007.11.02 16:35
http://hellom.net/in


테스트용 계정
ID : test
PW : 1234

결론부터 간단히 말하면... 댓글놀이다 ㄱ-;;

게다가 실시간인거다!!
내가 글을 쓰면 실시간으로 댓글이 올라오는게 보이는겁니다 ㄱ-;;킁;;

현재 문제가 아주 심각할정도로 많고 보안이 아주 극악으로 취약하지만.. 여튼간에; ㄱ-;;

그냥 한번 오픈해보겟심다~ 클클클..


예전엔 채팅 이라던가 그런거라서.. 왠지 재미가 없었는데..

실시간 댓글이라.. 뭔가 쫌 잼있을꺼 같아서 만들었는데.. 결국 사람이 없으면 말짱 꽝!! ㅋ

언제나 그렇듯이 오늘도 뻘짓!!

자신의 닉넴으로 놀구싶으신분은 가입을 하셔도 되고..랄까.. 항목 세가지 ㄱ-;; ㄱ-;;


여튼.. 저~~ 위에 사이트에서 한번 놀아보세요 ㄱ.. 가끔 자바스크립트 에러날땐.. 새로고침 ㄱㄱ ㄱ-;;

아무도 안오겟지? 안하겟지? ㄱ-;;
신고
Posted by naearu
연구_고민2007.10.18 00:52
실력은 되지도 않으면서 괜히 고스톱을 만들려고 하는중...

사용자 삽입 이미지


개발환경
PHP,Mysql,Ajax
미리네 호스팅(샹..왜 에러메세지가 안뜨냐고!!!);

준비사항..

고스톱패 이미지(보너스,뒷면,폭탄패포함) -- OK

상황에 따른 이미지 및 소리 -- 천천히 수집예정

고스톱 룰 숙지 -- 수집중

DB구조 설계 -- 룰 숙지후 예정.

파일구조 설계 -- 위 두가지 사항 종료후 예정

사용자 인터페이스 설계 -- 역시 위 세가지 종료후 예정.




예상기간..2008년 1월 이전까지..!!!
일정은 고스톱룰 정리 되면 잡아봐야겟심.. 민화투를 만들어?ㅋㅋ;


현재 진행상황

이미지 잘라서 배열처리하고.. 렌덤으로 뽑기놀이...(진행된거냐??ㄱ-)
http://hellom.net/gostop/include/p_info.php(렌덤뽑기 테스팅)

rand() 생각보다 많이 후리더만;;
mt_rand()로 바꾸긴 했지만..그냥rand썻더니 뭐 한사람한테만 보너스가 가는 해괴한일이;;쿨럭;;

여튼 앞으로도 이딴일 많을듯;;ㅋㅋ

하이팅!
신고
Posted by naearu
연구_고민2007.10.06 00:21

배경화면을 일단 렌덤으로 마구 섞어서 돌리고 있습니다 ㅋㅋ

좀 정신 없으시더라도 참아주세요..

참고로 총 16가지 로 바뀝니다..

원래대로라면 날씨에따라서 바뀌게 할예정이었는데..날씨에따라 배경이미지 구하기가 쉽지 않네요..

프로그램은 다짜놧는데 정작 이미지가 없어서 못한다니 이런 서글픈일이 ㅠㅠ

하으~ 여튼.. 뭐.. 혹시 렌덤으로 돌려보고 싶으신분은 역시나 말씀하시면 친히... 돌려드립니다 ~ 살살;




요건 뽀나스 쏘스..

<?
function utf($i){
 return iconv("EUC-KR", "UTF-8", $i);
}
function euc($i){
 return iconv("UTF-8", "EUC-KR", $i);
}

$fdata=file(""); //여기에 날씨정보를 받아오는 URL이 들어가죠..
for($i=0;$i<count($fdata);$i++){


$preg="/stn_id=\"108\" icon=\"(.+)\" desc=/"; // 서울 지역 코드를 문서에서 똑 뗘냅니다.
 if(preg_match($preg,$fdata[$i],$sel)){  //그럼 샥샥분해해서 날씨코드를 받아옵니다.
   $wc=$sel[1]; //wc에 저장합니다..화장실 아닙니다 ㄱ-;
   break;
 }
}

$url=""; // 이미지가 들어있는 URL폴더 를 입력합니다.

$wc=rand()%16+1;  //이건 무작위로 뽑아내는 거.. 이거 주석처리하면 바로 날씨로 기동..


//$wc=7;
switch($wc){  //여기선 날씨별로 분류하는건데.. 지금은 적용안되있심..

case 1 : // 맑음
 $img=$url."1.gif";
 $bgcol="#79737b";
 break;
case 5 : //흐린뒤갬
 $img=$url."5.jpg";
 $bgcol="#a4a4a4";
 break;


case 2 : //구름조금
 $img=$url."2.gif";
 $bgcol="#d0d9d2";
 break;
case 3 : //구름많이
 $img=$url."3.jpg";
 $bgcol="#000000";
 break;
case 4 : //흐림
 $img=$url."4.jpg";
 $bgcol="#ffffff";
 break;
case 6 : //맑은후구름많아짐
 $img=$url."6.jpg";
 $bgcol="#ededed";
 break;


case 7 : //모름
 $img=$url."7.jpg";
 $bgcol="#070707";
 break;


case 11 : //눈
 $img=$url."11.jpg";
 $bgcol="#000000";
 break;
case 12 : //눈후비
 $img=$url."12.jpg";
 $bgcol="#000000";
 break;
case 13 : //비후눈
 $img=$url."13.jpg";
 $bgcol="#000000";
 break;


case 8 : //비
 $img=$url."8.jpg";
 $bgcol="#a4a4a4";
 break;
case 9 : //흐리다비
 $img=$url."9.jpg";
 $bgcol="#a4a4a4";
 break;
case 10 : //비오다갬
 $img=$url."10.jpg";
 $bgcol="#a4a4a4";
 break;
case 14 : //낙뢰
 $img=$url."14.jpg";
 $bgcol="#a4a4a4";
 break;


case 15 : //안개
case 16 : //안개
 $img=$url."15.jpg";
 $bgcol="#000000";
 break;


default :
 $bgcol="#a4a4a4";
 break;


}

?>
//document.write('<?=$wc?><?=$img?>');
document.body.background='<?=$img?>';  //배경이미지 변경
document.body.bgColor='<?=$bgcol?>';  //배경색 변경


신고
Posted by naearu


아.. 2일 고생했네 ㄱ-;;

생각보다 단순.. ㄱ-;;
아직 이미지와 태그를 어찌 보내야할지 막막하긴 하지만 ㄱ-;;
뭐;; 어찌 되것지뭐;; ㅋㅋ

function out_posting($entry){

  $blogid="0000"; // 블로그 api 고유번호
  $userID = "0000";  // 블로그 로그인 아이디
  $userPW = "0000";  //블로그 로그인 암호

  $subject   = $entry['tag'].$entry['title'];
  $body    = $entry['content'];
  $tag    = $entry['tag'];
  $cate    = $entry['category'];
  $reg_date   = gmstrftime("%Y%m%dT%H:%M:%S",time());
  $acceptComment  = $entry['acceptComment'];
  $acceptTrackback = $entry['acceptTrackback'];

 if($entry['visibility']<3)
  $published   = 0;
 else
  $published   = 1;


  $f = new xmlrpcmsg("metaWeblog.newPost",
  array(
  new xmlrpcval($blogid, "string"),
  new xmlrpcval($userID, "string"),
  new xmlrpcval($userPW, "string"),
  new xmlrpcval(
 
  array(

   //"category"=>new xmlrpcval($cate, "string"),  //카테고리
   //"mt_keywords"=>new xmlrpcval($tag, "string"),  // 태그 , 으로 구분
   "description"=>new xmlrpcval($body, "string"),  //내용
   "title"=>new xmlrpcval($subject, "string"),  //제목
   "mt_allow_comments"=>new xmlrpcval($acceptComment, "string"), //댓글허용 =1
   "mt_allow_pings"=>new xmlrpcval($acceptTrackback, "string"),  //트랙백허용 =1
   "dateCreated"=>new xmlrpcval($reg_date, "string")  //날짜

  ), "struct"),

  new xmlrpcval($published, "string") ) // 공개여부 공개 =1 비공개=0
  );
  $c=new xmlrpc_client("/api", "naearu.tistory.com", 80);
  $r=$c->send($f);

}




으아.. 만들어놓고 보니까 생각보다 단순해!!! 이런 줵일..

그렇게 머리싸매고 고생했는데 ㄱ-;;

애시당초 XML규격이 애매해서 ㄱ-;;

아직도 애매해서 태그와 카테고리가 좀 많이 고민이긴 한데.. 어쩌겟나.. 급한대로 써야지 ㅋ

일단.. 티스토리에 성공.. 이제 이글루스도.. 도전??ㅋ





으음 일단 태그까진 됏구..
카테고리와 이미지 올리는 방법만 알아내면 끝이로구나;;
신고
Posted by naearu
연구_고민2007.09.27 23:36
연구_고민2007.09.27 22:57

xml rpc 를 통한 daum blog 에 글 등록 하기

phpschool 의 fguy 님의 daum blog api 를 참고하여 작성하였습니다.
http://www2.phpschool.com/bbs2/inc_view.html?id=12080&code=tnt2&start=0&mode=search&field=title&search_name=&operator=and&period=all&category_id=&s_que=daum

api 는 올려주셨는데 사용법이 없어 올려 보았습니다.


0. 본 문서는 www.phpschool.com 의 tip&tech 게시판에 게시하며 작성자의 허락없이 무단 배포를 금지합니다.
xml 과 http 이해가 가능한자를 기본으로 작성하였습니다.

1. xmlrpc 란 무엇인가?

기존 서버-서버 간 또는 서버-클라이언트간 의 통신에서
form 을 이용한 방식은 페이지를 여러번 거쳐 request - response 를 반복해야하는 단점이 있고
socket 을 이용한 response - request 로 한 페이지 안에서 처리 할 수도 있지만
이 역시 각 서버(업체)마다 서로 상이한 response 결과가
발생하여 이를 다시 파싱하여 프로그램 하기에는 많은 노력이 필요했습니다.

여기에서 나온 대안이 표준문서인 xml 을 이용하는 것이며
xml 중 xmlrpc 방식의 전송규약(protocal) 을 이용하여 서버의 메소드에 바로 접근하는 것이라고
간단히 생각하면 될것 같습니다.

결과적으로 돌아가는 방식은
서버로 내용(xml)을 전송(POST)하여 그 결과(xml)를 받아 오는 방식으로
socket 이나 html - form 을 이용하는 것과 같다고 볼 수 있습니다.
다만 여기서 보내고 받는 방식에 통일된 전송규약(xmlrpc)을 두었다고 생각하면 될것 같습니다.

2. xmlrpc 의 이용 예제

이를 위해 xmlrpc-server 중 공개되어 있는 daum blog 를 이용하여
원격으로 (다음 사이트에 로긴하여 form 을 이용하여 직접입력하지 않고)
daum blog 에 글을 올리는 예제 입니다.

만약 daum 뿐만 아니라 기타 여러 사이트가 xmlrpc server 를 열어 준다면
개인서버등에서 한번의 입력만으로 여러 사이트에 동시에 글을 올리고
그 결과를 쉽게 받아 올 수 있을 것입니다.

(물론 여러 사이트에 한번에 글을 등록하기 위해서 기존에 http - form 이나 socket 을 사용하여 올릴 수도 있습니다.)

xmlrpc 를 이용하기 위해서 먼저 php 가 xml 과 xmlrpc 함수를 지원하도록 컴파일 되어 있어야 합니다.
(xml, xmlrpc 함수가 지원되지 않을때는 socket 과 문자열 파싱의 노가다로 해결 할 수도 있습니다.)

xmlrpc 관련함수는 --with-xmlrpc 로 컴파일시 xmlrpc-server 관련 함수는 기본 지원되나
xmlrpc-client 관련 함수는 지원되지 않으므로 http://sourceforge.net/projects/phpxmlrpc/ 에서 배포하고 있습니다.


fguy 님의 daum blog api 중 발췌
=======================================
Protocols
The DAUM BLOG API is currently implemented for XML-RPC
URI
All XML-RPC requests should go to the following URI: http://blog.daum.net/_blog/XMLRPC.do
Method
daum.blog.newPost.execute : 새 글 등록

daumid (string) : 다음 사용자 ID
password (string) : 다음 사용자 PASSWORD
subject (string) : 글 제목
body (string) : 글 내용
tag (string) : 이 글에 대한 태그 (카테고리)
date (string) : 작성일자 (ISO8601 형식. yyyy-MM-dd'T'HH:mm:ss'Z')

Return
(string) : 등록된 글 번호.
=======================================


위와 같은 daum blog api 가 공개 되었습니다. 이를 이용하여 글등록을 해보도록 하겠습니다.
아래의 소스는 http://sourceforge.net/projects/phpxmlrpc/ 의 배포파일내의 client.php 를 참조한 것입니다.

<?php
include("xmlrpc.inc"); // http://sourceforge.net/projects/phpxmlrpc/ 의 배포파일에 포함 되어 있음...

$userID = "XXXXXX";
$userPW = "XXXXXX";
$subject= "xml rpc input test";
$body = "Hello XMLRPC";
$tag = "daum tag";

$f = new xmlrpcmsg("daum.blog.newPost.execute",
array( new xmlrpcval($userID, "string"),
new xmlrpcval($userPW, "string"),
new xmlrpcval($subject, "string"),
new xmlrpcval($body, "string"),
new xmlrpcval($tag, "string"),
new xmlrpcval(date("c"), "string") )
);

//print "<PRE>다음으로 보내지는 데이터 원본:<BR>" . htmlentities($f->serialize()) . "</PRE>\n"; // 보내는 메세지 출력

$c = new xmlrpc_client("/_blog/XMLRPC.do", "blog.daum.net", 80);
//$c->setDebug(1); // debug 메세지 출력( daum 에서 보내주는 결과값 )
$r = $c->send($f);
$v = $r->value();

if(!$r->faultCode()) {
print "다음 등록 글 번호 : " . ($v->scalarval()) . "<BR>";
print "<a href=\"http://blog.daum.net/" . $userID . "/" . $v->scalarval() . "\">글보기</a><br>";
}
else {
print "Fault: ";
print "Code: " . htmlspecialchars($r->faultCode()) . "<br>";
print "Reason '" . htmlspecialchars($r->faultString()) . "'<BR>";
}
?>


위와 같이 하시면 다음 블로그에 글이 등록된 결과를 확인 하실 수 있을 겁니다.

3. 참고
http://www.xmlrpc.com/spec
http://xmlrpc-epi.sourceforge.net

시간이 없어 xmlrpc.inc 에 문자열 인코딩 부분을 확인 하지 못해 한글 입력은 현재 바로 사용하시면 깨져서 들어 갈 것입니다.
처리 하신 분들은 댓글로 부탁드려요 ^^;


---------------------------------------------------------------------------------------------------
--with-xmlrpc 의 옵션으로 컴파일 한 경우 아래와 같이 socket 과 같이 사용하니 한글 처리가 되는 군요...

<?php
    // daum 서버와 소켓 통신
    function sendQuery($request_xml) {
        global $host, $cgi;

        $fp = fsockopen($host, 80, $errno, $errstr, 30);

        if (!$fp) {
            exit(\"Error : fsockopen\");
        }

        $header =  \"POST \" . $cgi . \" HTTP/1.0\\r\\n\" .
                    \"User-Agent: Frontier/5.1.2(WinNT)\\r\\n\" .
                    \"Host: \" . $host . \"\\r\\n\" .
                    \"Content-Type: text/xml\\r\\n\" .
                    \"Content-length: \" . strlen($request_xml) . \"\\r\\n\";

        fputs($fp, $header . \"\\r\\n\" . $request_xml);
        $buff = \"\";
        while (!feof($fp)) {
            $buff .= fgets($fp, 1024);
        }
        fclose($fp);

        return $buff;
    }

    $headerDelim = \"\\r\\n\\r\\n\";
    $host  = \"blog.daum.net\";
    $cgi    = \"/_blog/XMLRPC.do\";
    $method = \"daum.blog.newPost.execute\";

    // array(userID, userPW, subject, body, tag, date)
    $param  = array(\"XXXXXX\", \"XXXXXXX\", \"xml rpc 입력 테스트\", \"하이\", \"daum tag\", date(\"c\"));

    $output_options = array( \"output_type\" => \"xml\",
                            \"verbosity\" => \"pretty\",
                            \"escaping\" => array(\"markup\"),
                            \"version\" => \"xmlrpc\",
                            \"encoding\" => \"EUC-KR\" );


    $request_xml    = xmlrpc_encode_request($method, $param, $output_options);
    $buff          = sendQuery($request_xml);

    $response_xml  = substr($buff, strpos($buff, $headerDelim) + strlen($headerDelim));
    $result        = xmlrpc_decode_request($response_xml, $method);

    echo \"<xmp>\";
    echo \"전송 데이터 : \\n\";
    echo $request_xml;
    echo \"\\n\\n\\n\";

    echo \"수신 데이터 : \\n\";
    echo $response_xml;
    echo \"\\n\\n\\n\";

    echo \"결과값 : \\n\";
    echo $result;
    echo \"</xmp>\";
    exit;
?>

신고
Posted by naearu

Open API에 관심을 갖게 되어 여기 저기 찾아보니 요새 많은 블로그들에서 범용으로 사용되는 프로토콜이 XMLRPC란 것을 알게 되었고, XMLRPC를 PHP에서 사용할 수 있도록 작성해 놓은 라이브러리를 찾을 수 있었다. XMLRPC for PHP 라이브러리는 소스포지의 한 프로젝트이며, 현재 2.2 버전까지 릴리즈가 되어 있다.

http://phpxmlrpc.sourceforge.net/

Open API에 관심을 갖게 만든건 미투데이의 블로그로 글 배달 서비스이다. 이 서비스를 받아들이기 위해서는 내 블로그에 XMLRPC 서버 기능을 추가해야 한다. 서버 기능이란 내 홈페이지로 request가 오면 그에 대한 처리를 하고 응답을 해 주는 기능을 말한다. 미투데이의 블로그로 글 배달 서비스의 경우 metaWeblog.newPost를 내 홈페이지에 보내게 되고, 서버 프로그램에서 그 request를 받아들여 DB에 글을 등록한 후 작성적으로 처리했다는 응답을 미투데이에 보내줘야 한다.

일단 미투데이의 블로그로 글 배달 서비스를 받기 위해선 blogger.getUsersBlogs 메소드와 metaWeblog.newPost 메소드에 대한 처리를 구현해야 한다. blogger.getUsersBlogs를 받으면 내 블로그에 대한 정보를 응답으로 보내줘야 하고, metaWeblog.newPost를 받았을 때는 글을 DB에 등록한 후 등록된 번호를 응답으로 보내줘야 한다.

참고로 FireFox의 부가기능인 ScribeFire에서는 위의 메소드 외에 metaWeblog.getCategories 메소드와 metaWeblog.getRecentPosts 메소드를 사용하여 블로그 정보를 얻어간다. 이 메소드들의 기능은 메소드 이름에 명확히 나타나 있기때문에 굳이 설명을 할 필요가 없어보인다.

이 밖에도 많은 메소드들이 존재하는데 다음의 페이지에서 간단한 정보를 얻을 수 있다. 어떤 메소드들이 있고 이 메소드에 대한 응답은 어떻게 하는지 간단하게 살펴볼 수 있다.

http://www.peopleaggregator.net/api/doc/peopleaggregator.html

이제 위의 메소드들에 대해서 서버 기능을 구현해주기만 하면 된다. XMLRPC for PHP 라이브러리는 체계적으로 잘 작성되어 있어서 어렵지 않게 구현할 수가 있다. 조금 살펴봐야 할 부분이 있다면 xmlrpcval class를 사용하는 방법 정도일 것이다. 물론 다큐먼트에 예제들이 잘 나와 있다.

xmlrpc.php라는 이름으로 서버 기능을 구현해 본다.

먼저 php파일 상단에 두 개의 파일을 인클루드 한다.

include "xmlrpc.inc";
include "xmlrpcs.inc";

그 다음 xmlrpc_server를 생성한다. 생성시 아규먼트로 메소드와 싱행할 함수의 쌍의 배열을 사용한다. 해당 메소드의 request를 받으면 콜백함수로써 등록된 함수가 실행되는 방식이다.

$s = new xmlrpc_server(
 array(
  "blogger.getUsersBlogs" => array("function", "blogger_getUsersBlogs"),
  "metaWeblog.getCategories" => array("function", "metaWeblog_getCategories"),
  "metaWeblog.getRecentPosts" => array("function", "metaWeblog_getRecentPosts"),
  "metaWeblog.newPost" => array("function", "metaWeblog_newPost")
 )
);

예를 들면, metaWeblog.newPost 요청을 서버에서 받은 경우 metaWeblog_newPost 함수가 실행되는 방식이다. metaWeblog_newPost 함수는 서버에서 구현해 주어야 하며 다음과 같이 작성할 수 있다.

function metaWeblog_newPost($msg)
{
 // $msg에는 클라이언트로부터 받은 XML 데이터가 포함되어 있다.
 
 $id = $msg->getParam(1);
 $id = $id->scalarVal(); // ID
 $password = $msg->getParam(2);
 $password = $password->scalarVal(); // Password

 // $id, $password를 비교해서 정상적인 접근인지 검사.

 // 응답할 XML 데이터 생성
 $value = new xmlrpcval(/* 응답할 데이터 */);

 return new xmlrpcresp($value); // 요청한 클라이언트로 응답
}

$msg에는 XML 데이터가 담겨있다. 각 값들을 파싱하는 함수들이 존재하므로 xmlrpcval 클래스 도움말을 참조하여 값들을 뽑아오면 된다. 요청을 잘 처리했으면 잘 처리했다는 응답을 요청한 클라이언트로 보내줘야 한다. xmlrpcresp 클래스를통해 응답을 해주게 되는데, 이 때 사용되는 $value값은 xmlrpcval 클래스를 사용하여 적당히 만들어줘야 한다.

지금까지의 작업으로 미투데이에서의 metaWeblog.newPost 요청을 처리할 수 있었다. 그런데 안타깝게도 한글이 깨져나오는 문제가 아직 존재한다. 오늘은 한글 문제를 해결하기 위해 골머리좀 쓰게 될 것 같다.

신고
Posted by naearu
연구_고민2007.09.27 21:32

10. PHP로 XML-RPC 사용하기

Edd Dumbill는 PHP용 XML-RPC 모듈을 만들었다. 모듈은 UsefulInc XML-RPC website에서 구할 수 있다.

파일을 내려받아 압축을 푼 다음, xmlrpc.incxmlrpcs.inc 의 두 파일을 PHP 스크립트와 같은 디렉토리에 복사하면 된다.

10.1. PHP 클라이언트

다음의 스크립트는 웹페이지에 XML-RPC 호출 루틴을 추가하는 방법을 보여준다.

<html>
<head>
<title>XML-RPC PHP Demo</title>
</head>
<body>
<h1>XML-RPC PHP Demo</h1>

<?php
include 'xmlrpc.inc';

// Make an object to represent our server.
$server = new xmlrpc_client('/api/sample.php',
                            'xmlrpc-c.sourceforge.net', 80);

// Send a message to the server.
$message = new xmlrpcmsg('sample.sumAndDifference',
                         array(new xmlrpcval(5, 'int'),
                               new xmlrpcval(3, 'int')));
$result = $server->send($message);

// Process the response.
if (!$result) {
    print "<p>Could not connect to HTTP server.</p>";
} elseif ($result->faultCode()) {
    print "<p>XML-RPC Fault #" . $result->faultCode() . ": " .
        $result->faultString();
} else {
    $struct = $result->value();
    $sumval = $struct->structmem('sum');
    $sum = $sumval->scalarval();
    $differenceval = $struct->structmem('difference');
    $difference = $differenceval->scalarval();
    print "<p>Sum: " . htmlentities($sum) .
        ", Difference: " . htmlentities($difference) . "</p>";
}
?>

</body></html>

웹서버에서 PHP 스크립트가 실행되지 않는다면 PHP 웹사이트를 참조하라.

10.2. PHP 서버

다음의 스크립트는 PHP를 이용하여 XML-RPC 서버에 적용하는 방법을 보여준다.

<?php
include 'xmlrpc.inc';
include 'xmlrpcs.inc';

function sumAndDifference ($params) {

    // Parse our parameters.
    $xval = $params->getParam(0);
    $x = $xval->scalarval();
    $yval = $params->getParam(1);
    $y = $yval->scalarval();

    // Build our response.
    $struct = array('sum' => new xmlrpcval($x + $y, 'int'),
                    'difference' => new xmlrpcval($x - $y, 'int'));
    return new xmlrpcresp(new xmlrpcval($struct, 'struct'));
}

// Declare our signature and provide some documentation.
// (The PHP server supports remote introspection. Nifty!)
$sumAndDifference_sig = array(array('struct', 'int', 'int'));
$sumAndDifference_doc = 'Add and subtract two numbers';

new xmlrpc_server(array('sample.sumAndDifference' =>
                        array('function' => 'sumAndDifference',
                              'signature' => $sumAndDifference_sig,
                              'docstring' => $sumAndDifference_doc)));
?>

위의 스크립트를 웹서버에서 http://localhost/path/sumAndDifference.php와 같은 방식으로 실행시킬 수 있다.

신고
Posted by naearu
연구_고민2007.09.27 09:56

Metaweblog API의 기본 내용 요약....


세가지 기본 API

닫기

펼쳐두기..

닫기



 그외 API

닫기

펼쳐두기..

닫기


출처: http://www.xmlrpc.com/metaWeblogApi

신고
Posted by naearu
연구_고민2007.09.27 09:42

[*] SOA 의 구현
===============
작성: 카이 thruthesky@yahoo.co.kr
홈페이지: http://jangnans.com http://siteapi.kldp.net

본 문서에서는 SOA(Site Open API)의 구현에 대해서 설명을 합니다.

[*] SOA 실제 예

PHP 버젼의 SOA 구현은 본인이 이미 작업을 해놓은 것이 있습니다.
제로보드 5, 제로보드 4, 그누보드 4, 알지보드, 테크노트, 미니툴, 장난 홈툴즈 등에서 사용이 가능하도록 포팅을 해 놓았습니다.
이를 바탕으로 새로운 홈페이지(또는 관련된 게시판, 프로그램 등)에 손쉽게 적용이 가능합니다.

그러나, ASP, C, Perl 과 같은 언어로 제작된 사이트에서는 본인이 작성한 PHP 코드를 직접 재 사용할 수가 없습니다.


[*] XML-RPC

XML-RPC 에 대해서는 본인이 다른 곳(문서)에 기록을 해 놓았습니다.
http://jangnans.com/etc/siteopenapi/siteopenapi_spec.html 페이지에서 "4장 Site API 소개" 부분을 참고하십시오.

이처럼 RPC 는 데이터를 송/수신하고 처리를 하는 과정을 말합니다.
이 때(데이터를 송/수신할 때), XML 형식으로 데이터를 표현하는 것이 바로 XML-RPC 입니다.

XML 형식이라고 하는데, 실질적으로 어떻게 데이터를 전송하고, 수신하고하는걸까요?
RPC 에서는 당연히 클라이언트와 서버로 작업분담이 이루어집니다.
XML 로 데이터를 표현하니 C/S(클라이언트와 서버)간의 통신은 HTTP 를 바탕으로 이루어집니다.
데이터는 규격은 http://www.xmlrpc.com/spec 와 같으며 XML 로 표현이됩니다.
클라이언트가 서버로 전송하는 데이터는 HTTP 의 POST 방식으로 전달이 됩니다.

아마 그것은 (클라이언트가 서버로 데이터를 전송하는 것은) 아래와 같은 형식이 될 것입니다.

POST /RPC2 HTTP/1.0
User-Agent: Frontier/5.1.2 (WinNT)
Host: betty.userland.com
Content-Type: text/xml
Content-length: 181

<?xml version="1.0"?>
<methodCall>
   <methodName>examples.getStateName</methodName>
   <params>
      <param>
         <value><i4>41</i4></value>
         </param>
      </params>
   </methodCall>

위 내용은 클라이언트가 데이터를 XML 표현으로 HTTP 의 POST 방식으로 서버에게 전송을 하는 것입니다.
서버는 위 데이터를 받아서 적절한 처리를 할 것입니다. 이때, 서버는 아마도 웹서버가 될 것입니다.
그리고 수신한 데이터에 대한 처리는 CGI(ASP, C, PERL 등)가 담당하게 될 것입니다.
데이터를 받아서 DB 관련 작업을 할 수도 있고 오류처리를 할 수도 있습니다.
웹서버에서 실행되는 언어(ASP, PHP 등)는 이러한 데이터의 작업에 대한 처리를 할 수 있습니다.
XML 데이터를 파싱해서 필요한 데이터를 추출한 다음 처리를 하면됩니다.

실제로 SOA 를 구현해야한다면, 그것이 서버측 작업을 해야한다면 어쩌면 테스트 클라이언트를 직접 작성하셔야할 지도 모르겠습니다.
서버 작업을 하기 위해서는 테스트용 클라이언트가 있어야합니다. 그렇지만 입맛에 맞는 클라이언트는 없습니다.
그러니 실질적으로 XML-RPC 의 모든 것을 구현해야합니다.

이해가 되셨는지 모르겠습니다.
실질적인 구현에 대한 정보는 http://www.xmlrpc.com/directory/1568/implementations 에서 얻을 수 있습니다.


우선 다른 누군가가 XML-RPC 모듈을 만들어 놓았는지 알아볼 필요가 있습니다.
XML-RPC 구현을 위한 소스 코딩 작업이 만만치는 않습니다.
물론 XML-RPC 관련 라이브러리를 구하지 못한다면 직접 작성을 해야합니다.
XML 문서의 파싱 라이브러리라도 구해야합니다. 물론 XML 파싱 라이브러리를 구할 수 없다면, 엮시 직접 코딩을 해야합니다.

C 언어와 Perl 쪽에서는 그리고 PHP 쪽에서는 어느정도 관련 라이브러리가 있습니다.

ASP 에대해서는 본인이 연구를 안해봐서 어떤지 모르겠습니다.
다음은 ASP 와 관련된 참고할 만한 정보입니다.
http://aspxmlrpc.sourceforge.net/ (자세히 보지는 않았지만, 서버와 클라이언트를 위한 XML-RPC 라이브러를 제공하는 것 같습니다.)
http://david.carter-tod.com/blackboard-tips-and-tricks#comment-35

 

[*] SOA 규격

XML-RPC 에 대한 준비가 되었으면 본격적으로 SOA 규격을 구현할 준비가 된 것입니다.
우선 SOA 문서에 대해서 읽어볼 필요가 있습니다.

참고로 SOA 는 정보의 검색에 중점을 두고 있습니다.

일반적인 사이트를 대상으로 사이트가 가지는 정보의 속성을 토대로 규격을 한 것입니다.
예를 들면, 홈페이지에 장난감에 대한 유용한 정보가 있는데 이 정보를 외부에서 사용을 할 수 있도록 해주고 싶어합니다.
이 경우 여러가지 방법이 있겠지만, SOA 를 통하면 홈페이지의 정보를 직접 검색해서 그 결과를 타 사이트, 또는 타 응용 프로그램에서 활용할 수 있습니다. 글의 제목이나 내용, 또는 상품의 가격이나 제작된 날짜 등을 검색해서 그 정보를 타 사이트로 연결, 또는 타 응용 프로그램으로 연결이 가능합니다.

이 와 같이 SOA 는 개별 사이트의 정보를 다른 곳에서 쉽게 이용을 할 수 있도록 하기위해서 규격된 것입니다. 정보의 검색외에도 정보를 외부에서 직접 가공을 하여서 홈페이지로 저장을 할 수도 있습니다.
예를 들면, 기존의 홈페이지 게시판에는 그림이나 파일의 첨부를 2개로 제한하는 경우가 많습니다. 국내의 가장 유명한 무료 웹 게시판이 이런 경우입니다. 이 경우, SOA 를 구현하면 그림이나 파일 첨부의 제한이 없어집니다. 뿐만아니라 디자인을 마음대로 할 수가 있습니다.
사용자가 자신의 상품을 홈페이지에 올리고 싶어하는데, 이미지 연결을 위해서 어렵게 HTML 작성을 직접하거나 제한된 게시판 기능을 이용해서는 사용자가 원하는 모습을 갖추기가 어렵습니다. SOA 는 이런 문제점을 해결해줍니다. 위즈위그 편집기에서 보이는 그대로 쇼핑몰에 정보를 올려줍니다. 이미지도 보이는 그대로 홈페이지에 자동으로 저장이됩니다.

현제 SOA 는 이러한 작업을 위해서 규격이되어있습니다.
그리고 실제로 이러한 작업이 많은 홈페이지에서 시행되고 있습니다.

참고할 만한 소스가 없이, SOA 를 처음부터 구현을 해야하는 입장이면, SOA를 규격하고 PHP 버젼을 구현한 본인과의 연락이 필요합니다.
코딩을 하는 과정에서 실제적으로 도움을 드릴 수 있다고 판단을 합니다.

본 문서를 읽으시는 분은 우선,
1. XML-RPC 에 대한 이해와 실제 예제의 구현를 통해서 정보를 습득하는 것이 필요합니다.
2. SOA 구현에 있어서 PHP 소스가 도움이되지 않는다면 본인에게 도움을 요청할 수 있습니다.

신고
Posted by naearu
연구_고민/리눅스2007.09.24 15:40
http://ubuntuforums.org/showthread.php?t=385981

Feisty:
Code:
deb http://download.tuxfamily.org/syzygy42 feisty avant-window-navigator
deb-src http://download.tuxfamily.org/syzygy42 feisty avant-window-navigator
Gutsy:
Code:
deb http://download.tuxfamily.org/syzygy42 gutsy avant-window-navigator
deb-src http://download.tuxfamily.org/syzygy42 gutsy avant-window-navigator
위 두 코드를 소스 리스트에 집어 넣어 놓고...
아래 코드를 터미널에서 실행해줍시다~그럼 끝;
Code:
wget http://download.tuxfamily.org/syzygy42/reacocard.asc
sudo apt-key add reacocard.asc
rm reacocard.asc
sudo apt-get update
Then install AWN:
Code:
sudo apt-get install avant-window-navigator-bzr awn-core-applets-bzr
신고
Posted by naearu

12.3. 스트링 함수

 

  12.3.1. 스트링 비교 함수

 

스트링-값 함수는 그 결과 값의 길이가 max_allowed_packet 시스템 변수의 값 보다 클 경우에는, NULL을 리턴한다. Section 7.5.2, “서버 파라미터 튜닝하기를 참조할 것.


스트링 포지션(position)에서 연산을 하는 함수의 경우, 첫 번째 포지션은 숫자 1이 된다.

  • ASCII(str)

스트링 str 의 맨 왼쪽 문자의 숫자 값을 리턴한다. str 이 빈 스트링(empty string)일 경우에는 0 을 리턴한다. NULL if str NULL일 경우에는 NULL 을 리턴한다. ASCII()0 에서 255 사이의 숫자 값을 갖는 문자에 대해서 연산을 한다.

mysql> SELECT ASCII('2');

        -> 50

mysql> SELECT ASCII(2);

        -> 50

mysql> SELECT ASCII('dx');

        -> 100

ORD() 함수를 함께 참조할 것.

  • BIN(N)

N의 바이너리 값에 대한 스트링 표현식을 리턴하는데, 여기에서N (BIGINT) 숫자이다. 이것은 CONV(N,10,2)과 동일하다. N NULL일 경우에는 NULL을 리턴한다.

mysql> SELECT BIN(12);

        -> '1100'

  • BIT_LENGTH(str)

스트링 str 의 길이를 비트 단위로 리턴한다.

mysql> SELECT BIT_LENGTH('text');

        -> 32

  • CHAR(N,... [USING charset_name])

CHAR()은 각각의 인수 N 을 정수 형태로 해석을 하고 이러한 정수의 코드 값에 의해 주어지는 문자로 구성된 스트링을 리턴한다. NULL 값은 무시(skipped)된다.

mysql> SELECT CHAR(77,121,83,81,'76');

        -> 'MySQL'

mysql> SELECT CHAR(77,77.3,'77.3');

        -> 'MMM'

MySQL 5.0.15 이후 버전에서는,  255 보다 큰 CHAR() 인수는 여러 개의 결과 바이트로 변환된다. 예를 들면, CHAR(256)CHAR(1,0)와 같고, 그리고 CHAR(256*256) CHAR(1,0,0)과 같다:

mysql> SELECT HEX(CHAR(1,0)), HEX(CHAR(256));

+----------------+----------------+

| HEX(CHAR(1,0)) | HEX(CHAR(256)) |

+----------------+----------------+

| 0100           | 0100           |

+----------------+----------------+

mysql> SELECT HEX(CHAR(1,0,0)), HEX(CHAR(256*256));

+------------------+--------------------+

| HEX(CHAR(1,0,0)) | HEX(CHAR(256*256)) |

+------------------+--------------------+

| 010000           | 010000             |

+------------------+--------------------+

디폴트로는, CHAR()는 바이너리 스트링을 리턴한다. 주어진 문자 셋에 있는 스트링을 만들기 위해서는, USING 구문을 옵션으로 사용한다:

mysql> SELECT CHARSET(CHAR(0x65)), CHARSET(CHAR(0x65 USING utf8));

+---------------------+--------------------------------+

| CHARSET(CHAR(0x65)) | CHARSET(CHAR(0x65 USING utf8)) |

+---------------------+--------------------------------+

| binary              | utf8                           |

+---------------------+--------------------------------+

만일 USING을 사용하였는데도 그 결과 스트링이 주어진 문자 셋에 대해서 유효하지 않게 되면, 경고문이 나오게 된다. 또한, 만일 스트릭트(strict) SQL 모드를 활성화 한다면, CHAR() 의 결과 값은 NULL이 된다.

MySQL 5.0.15 이전 버전에서는, CHAR()는 연결 문자 셋에 있는 스트링을 리턴하며 USING 구문은 사용할 수 없게 된다. 또한, 각각의 인수는 모듈로(modulo) 256으로 해석이 되기 때문에, CHAR(256) CHAR(256*256)는 둘 다 CHAR(0)과 동일한 것이 된다.

  • CHAR_LENGTH(str)

스트링 str의 길이를 리턴한다. 다중 바이트 문자는 단일 문자로 계산(count) 된다. , 5개의 2 바이트 문자를 갖는 스트링에 대해서, LENGTH() 10을 리턴 하지만, CHAR_LENGTH()5를 리턴 한다.

  • CHARACTER_LENGTH(str)

CHARACTER_LENGTH()CHAR_LENGTH()과 동일하다.

  • CONCAT(str1,str2,...)

인수를 연결한 결과로 나오는 스트링을 리턴한다. 한 개 또는 그 이상의 인수를 가질 수 있다. 만일 모든 인수가 바이너리 스트링이 아니라면, 그 결과는 바이너리가 아닌 스트링이 된다. 만일 인수에 바이너리 스트링이 포함되어 있다면, 그 결과는 바이너리 스트링이 된다. 숫자 인수는 동일한 바이너리 스트링 형태로 변환된다; 만일 이렇게 변환되는 것을 원하지 않을 경우에는, 아래의 예문과 같이 명확하게 타입 캐스트(type cast)를 사용하면 된다:

SELECT CONCAT(CAST(int_col AS CHAR), char_col);

CONCAT()는 모든 인수가 NULL이 아니면 NULL을 리턴한다.

mysql> SELECT CONCAT('My', 'S', 'QL');

        -> 'MySQL'

mysql> SELECT CONCAT('My', NULL, 'QL');

        -> NULL

mysql> SELECT CONCAT(14.3);

        -> '14.3'

  • CONCAT_WS(separator,str1,str2,...)

CONCAT_WS()는 구분자를 사용하는 연결(Concatenate With Separator)을 나타내는 것이며 CONCAT()의 특수 형태이다. 첫 번째 인수는 나머지 인수들에 대한 구분자(separator)가 된다. 구분자는 연결되는 스트링 사이에 추가된다. 구분자는 스트링이 될 수 있다. 만일 구분자가 NULL 이면, 그 결과는 NULL이다.

mysql> SELECT CONCAT_WS(',','First name','Second name','Last Name');

        -> 'First name,Second name,Last Name'

mysql> SELECT CONCAT_WS(',','First name',NULL,'Last Name');

        -> 'First name,Last Name'

CONCAT_WS()는 빈 스트링(empty string)을 무시(skip)하지 않는다. 하지만, 구분자 인수 다음에 나오는 모든 NULL 값은 무시를 한다.

  • CONV(N,from_base,to_base)

서로 다른 문자 베이스(base)간의 숫자를 변환한다. from_base 에서 베이스 to_base로 변환된 숫자 N의 스트링 표현식을 리턴한다. 인수 중의 하나가 NULL이면 NULL을 리턴한다.인수 N 은 정수로 해석되지만, 정수 또는 스트링으로 지정될 수도 있다. 최소 베이스는 2 이고 최대 베이스는 36이다. 만일 to_base 가 음수라면, N 은 부호화된 숫자로 간주된다. 그렇지 않을 경우에는, N 은 부호 없는 숫자로 취급된다. CONV()64-비트 정밀도를 갖는다.

mysql> SELECT CONV('a',16,2);

        -> '1010'

mysql> SELECT CONV('6E',18,8);

        -> '172'

mysql> SELECT CONV(-17,10,-18);

        -> '-H'

mysql> SELECT CONV(10+'10'+'10'+0xa,10,10);

        -> '40'

  • ELT(N,str1,str2,str3,...)

만일N = 1이면, str1, N = 2이면, str2 을 리턴하는 방식. N 1 보다 작거나 또는인수의 숫자보다 많을 경우에는 NULL을 리턴한다. ELT()FIELD()의 보수(complement)이다.

mysql> SELECT ELT(1, 'ej', 'Heja', 'hej', 'foo');

        -> 'ej'

mysql> SELECT ELT(4, 'ej', 'Heja', 'hej', 'foo');

        -> 'foo'

  • EXPORT_SET(bits,on,off[,separator[,number_of_bits]])

bits에 있는 모든 비트 셋(bit set)에 대해서는, on 스트링을, 그리고 모든 리셋 비트에 대해서는, off 스트링을 리턴한다. bits 에 있는 비트는 오른쪽에서 왼쪽으로 검사된다 (낮은 순서에서 높은 순서 비트로). 스트링은 왼쪽에서 오른쪽으로 결과에 추가되는데, separator 스트링으로 구분이 된다 (디폴트 스트링은 콤마 문자,’). 검사가 되는 비트의 숫자는 number_of_bits로 주어진다 (디폴트는 64).

mysql> SELECT EXPORT_SET(5,'Y','N',',',4);

        -> 'Y,N,Y,N'

mysql> SELECT EXPORT_SET(6,'1','0',',',10);

        -> '0,1,1,0,0,0,0,0,0,0'

  • FIELD(str,str1,str2,str3,...)

str1, str2, str3, ... 리스트에 있는 str 의 인덱스(포지션)를 리턴한다. str을 찾을 수 없는 경우에는 0 을 리턴 한다.

만일 FIELD()에 대한 모든 인수가 스트링이라면, 모든 인수는 스트링으로 비교된다. 만일 모든 인수가 숫자일 경우에는 숫자로 비교가 된다. 그렇지 않은 경우라면, 인수들은 두 번 (double) 비교가 된다.

만일 str NULL이라면, 리턴 값은 0 이 되는데, 그 이유는 NULL 은 어떤 값과도 등식 비교가 되지 않기 때문이다. FIELD()ELT()의 보수(complement)이다.

mysql> SELECT FIELD('ej', 'Hej', 'ej', 'Heja', 'hej', 'foo');

        -> 2

mysql> SELECT FIELD('fo', 'Hej', 'ej', 'Heja', 'hej', 'foo');

        -> 0

  • FIND_IN_SET(str,strlist)

만일 스트링 str N 의 서브 스트링으로 구성된 스트링 리스트 strlist 에 있는 것이라면, 1의 범위에 있는 값을 N 에 리턴한다. 하나의 스트링 리스트는 콤마 문자로 구분된 서브 스트링들로 구성된 스트링이다. 만일 첫 번째 인수가 상수 스트링이고 두 번째 인수가 타입 SET의 컬럼이라면, FIND_IN_SET() 함수는 비트 산술식을 사용하기 위해서 최적화가 된다. 만일 str strlist에 없거나 또는 strlist가 빈 스트링이라면, 0을 리턴한다. NULL if만일 인수 중의 하나가 NULL이라면, NULL을 리턴한다. 만일 첫 번째 인수가 콤마 문자를 가지고 있다면, 이 함수는 제대로 동작을 하지 않는다.

mysql> SELECT FIND_IN_SET('b','a,b,c,d');

        -> 2

  • FORMAT(X,D)

숫자 X 의 포맷을 '#,###,###.##' 형태로 만들고, D의 소수점 뒷자리에서 절사(round)를 하고, 그 결과를 스트링으로 리턴한다. 만일 D 0 이면, 그 결과는 소수점 또는 분수 부분을 갖지 않는다.

mysql> SELECT FORMAT(12332.123456, 4);

        -> '12,332.1235'

mysql> SELECT FORMAT(12332.1,4);

        -> '12,332.1000'

mysql> SELECT FORMAT(12332.2,0);

        -> '12,332'

  • HEX(N_or_S)

만일N_or_S 이 숫자라면, N에 대한 16진수 값에 해당하는 스트링 표현을 리턴하는데, 여기에서 N (BIGINT) 숫자가 된다. 이것은 CONV(N,10,16)과 동일하다.

만일 N_or_S 이 스트링 이라면, N_or_S 에 대한 16진수 스트링 표현식을 리턴하는데, N_or_S 에 있는 각각의 문자는 2개의 16진수 숫자로 변환된다.

mysql> SELECT HEX(255);

        -> 'FF'

mysql> SELECT 0x616263;

        -> 'abc'

mysql> SELECT HEX('abc');

        -> 616263

  • INSERT(str,pos,len,newstr)

str 의 포지션 pos 에서 시작하는 서브 스트링을 len 문자 길이만큼 스트링 newstr로 변경시켜서 str 을 리턴한다. 만일 pos 가 스트링의 길이 안에 있지 않다면, 원래의 스트링을 리턴한다. 만일 len 의 범위가 스트링의 나머지 길이 범위 내에 있지 않다면, 포지션 pos  이후의 나머지 스트링을 대체 시킨다. 만일 어떤 인수가 NULL 이면, NULL을 리턴한다.

mysql> SELECT INSERT('Quadratic', 3, 4, 'What');

        -> 'QuWhattic'

mysql> SELECT INSERT('Quadratic', -1, 4, 'What');

        -> 'Quadratic'

mysql> SELECT INSERT('Quadratic', 3, 100, 'What');

        -> 'QuWhat'

이 함수는 다중 바이트에서도 동작을 한다.

  • INSTR(str,substr)

str 에서 서브 스트링 substr 가 처음으로 나오는 포지션을 리턴한다. 이것은 LOCATE()에서 두 개의 인수를 사용하는 것과 동일한 결과를 리턴 하지만, 인수들의 순서는 반대가 된다.

mysql> SELECT INSTR('foobarbar', 'bar');

        -> 4

mysql> SELECT INSTR('xbar', 'foobar');

        -> 0

이 함수는 다중 바이트에서도 동작을 하며, 최소 하나의 인수가 바이너리 스트링일 경우에만 문자 크기를 구분한다.

  • LCASE(str)

LCASE()LOWER()와 동의어 이다.

  • LEFT(str,len)

스트링 str에서 가장 왼쪽으로부터 len 개의 문자를 리턴한다.

mysql> SELECT LEFT('foobarbar', 5);

        -> 'fooba'

  • LENGTH(str)

str의 길이를 바이트 단위로 리턴한다. 다중 바이트 문자는 다중 바이트로 계산 (count)된다. 이것은 2 바이트 문자가 5개 있는 스트링의 경우, LENGTH() 10을 리턴하는 반면에, CHAR_LENGTH()5를 리턴한다는 것을 의미한다.

mysql> SELECT LENGTH('text');

        -> 4

  • LOAD_FILE(file_name)

파일을 읽은 다음에 파일의 내용물을 스트링으로 리턴한다. 이 함수를 사용하기 위해서는, 파일은 반드시 서버 호스트에 있어야 하며, 그 파일에 대한 경로 이름을 전체적으로 지정해야 하며, 그리고 FILE 권한을 가져야 한다. 그 파일은 모든 사용자에게 읽힐 수 있어야 하며 파일의 크기는 max_allowed_packet 바이트 보다는 작아야 한다.

만일 파일이 존재하지 않거나 또는 위의 조건 중에 하나로 인해 파일을 읽을 수가 없게 된다면, 이 함수는 NULL을 리턴한다.

MySQL 5.0.19 이후 버전에서는, character_set_filesystem 시스템 변수가 리터럴 스트링으로 주어진 파일 이름에 대한 해석을 제어한다.

mysql> UPDATE t

            SET blob_col=LOAD_FILE('/tmp/picture')

            WHERE id=1;

  • LOCATE(substr,str), LOCATE(substr,str,pos)

첫 번째 신텍스는 str 에서 서브 스트링 substr 가 처음으로 나오는 포지션을 리턴한다. 두 번째 신텍스는, 포지션 pos에서 시작을 해서, str 에서 서브 스트링 substr 가 처음으로 나오는 포지션을 리턴한다. substr str에 존재하지 않을 경우에는, 0을 리턴한다.

mysql> SELECT LOCATE('bar', 'foobarbar');

        -> 4

mysql> SELECT LOCATE('xbar', 'foobar');

        -> 0

mysql> SELECT LOCATE('bar', 'foobarbar', 5);

        -> 7

이 함수는 다중 바이트에서도 동작을 하며, 인수 중에서 최소 하나라도 바이너리 스트링일 경우에만 문자 크기를 구분한다.

  • LOWER(str)

현재 (current) 문자 셋 매핑에 따라서 스트링 str 의 모든 문자를 소문자로 변경 시켜서 리턴한다. 디폴트는 latin1 (cp1252 West European).

mysql> SELECT LOWER('QUADRATICALLY');

        -> 'quadratically'

이 함수는 다중 바이트에서도 동작을 한다.

  • LPAD(str,len,padstr)

왼쪽에 스트링 padstr 를 집어 넣어서 문자의 길이를 len 만큼 되도록 한 스트링 str 을 리턴한다. 만일 str len 보다 길다면, 리턴 값은 len 길이 만큼 줄어 든다.

mysql> SELECT LPAD('hi',4,'??');

        -> '??hi'

mysql> SELECT LPAD('hi',1,'??');

        -> 'h'

  • LTRIM(str)

스트링 앞에 있는 스페이스를 없앤 스트링 str 를 리턴한다.

mysql> SELECT LTRIM('  barbar');

        -> 'barbar'

이 함수는 다중 바이트에서도 동작을 한다.

  • MAKE_SET(bits,str1,str2,...)

bits 셋에 대응되는 비트를 가지고 있는 스트링으로 구성된 셋 값 (콤마 문자로 구분된 서브 스트링을 가지고 있는 스트링)을 리턴한다. str1은 비트 0에 대응되고, str2 1에 대응되며, 계속 이런 식으로 대응이 된다. str1, str2, ... 에 있는 NULL 값은 결과에 따라 나오지 않는다.

mysql> SELECT MAKE_SET(1,'a','b','c');

        -> 'a'

mysql> SELECT MAKE_SET(1 | 4,'hello','nice','world');

        -> 'hello,world'

mysql> SELECT MAKE_SET(1 | 4,'hello','nice',NULL,'world');

        -> 'hello'

mysql> SELECT MAKE_SET(0,'a','b','c');

        -> ''

  • MID(str,pos,len)

MID(str,pos,len)SUBSTRING(str,pos,len)과 동의어 이다.

  • OCT(N)

N 8진 값에 해당하는 스트링 표현식을 리턴하는데, 여기에서 N (BIGINT) 번호가 된다. 이것은 CONV(N,10,8)과 같다. 만일 N NULL이면, NULL을 리턴한다.

mysql> SELECT OCT(12);

        -> '14'

  • OCTET_LENGTH(str)

OCTET_LENGTH()LENGTH()과 동의어 이다.

  • ORD(str)

만일 If the leftmost character of the string스트링 str 의 가장 왼쪽의 문자가 다중 바이트 문자라면, 그 문자에 대한 코드를 리턴하는데, 그 값은 아래의 공식을 사용해서 얻어낸다:

  (1st byte code)

+ (2nd byte code × 256)

+ (3rd byte code × 2562) ...

만일 가장 왼쪽의 문자가 다중 바이트 문자가 아니라면, ORD()ASCII() 함수와 같은 값을 리턴한다.

mysql> SELECT ORD('2');

        -> 50

  • POSITION(substr IN str)

POSITION(substr IN str)LOCATE(substr,str)과 동의어 이다.

 

  • QUOTE(str)

SQL 명령문에서 이스케이프된 데이터 값으로 사용할 수 있는 결과를 만들기 위해 스트링에 인용 부호를 준다. 만일 인수가 NULL이면, 리턴 값은 인용 부호가 없는 단어 “NULL” 이 나오게 된다.

mysql> SELECT QUOTE('Don\'t!');

        -> 'Don\'t!'

mysql> SELECT QUOTE(NULL);

        -> NULL

  • REPEAT(str,count)

count 횟수 만큼 반복된 스트링 str 으로 구성된 스트링을 리턴한다. 만일 count 1 보다 작을 경우에는, 빈 스트링을 리턴한다. str 또는 count NULL이라면, NULL을 리턴한다

mysql> SELECT REPEAT('MySQL', 3);

        -> 'MySQLMySQLMySQL'

  • REPLACE(str,from_str,to_str)

스트링 from_str 가 나온 부분을 모두 스트링 to_str로 대체해서 스트링 str 을 리턴한다.               REPLACE()from_str에 대한 검색을 할 때 문자 크기를 구분해서 매칭을 실행한다.

mysql> SELECT REPLACE('www.mysql.com', 'w', 'Ww');

        -> 'WwWwWw.mysql.com'

이 함수는 다중 바이트에서도 동작을 한다.

  • REVERSE(str)

문자의 순서를 역순으로 헤서 스트링 str 을 리턴한다.

mysql> SELECT REVERSE('abc');

        -> 'cba'

이 함수는 다중 바이트에서도 동작을 한다.

  • RIGHT(str,len)

str에서 오른쪽으로부터 len 문자 만큼을 리턴한다.

mysql> SELECT RIGHT('foobarbar', 4);

        -> 'rbar'

이 함수는 다중 바이트에서도 동작을 한다.

  • RPAD(str,len,padstr)

스트링 padstr 를 오른쪽에 집어 넣어서 len 문자 길이 만큼 str을 만들어서 리턴한다. 만일 str len 보다 길다면, 리턴 값은 len 문자 만큼 짧아진다.

mysql> SELECT RPAD('hi',5,'?');

        -> 'hi???'

mysql> SELECT RPAD('hi',1,'?');

        -> 'h'

이 함수는 다중 바이트에서도 동작을 한다.

  • RTRIM(str)

스트링 str에서 뒤에 붙어 있는 스페이스 문자를 없앤 스트링을 리턴한다.

mysql> SELECT RTRIM('barbar   ');

        -> 'barbar'

이 함수는 다중 바이트에서도 동작을 한다.

  • SOUNDEX(str)

Str의 사운덱스(soundex) 스트링을 리턴한다. 거의 같은 소리가 나는 두 개의 스트링은 고유의 사운덱스 스트링을 가져야 한다. 표준 사운덱스 스트링은 4 문자 길이가 되지만, SOUNDEX() 함수는 임의의 길이 스트링을 리턴한다. 여러분은 표준 사운덱스 스트링을 얻기 위해서 결과 값에 SUBSTRING()을 사용할 수가 있다. str에 있는 문자 중에 알파벳이 아닌 것들은 모두 무시가 된다. A-Z 범위를 벗어나는 모든 국제 문자들은 모두 모음으로 취급된다.

mysql> SELECT SOUNDEX('Hello');

        -> 'H400'

mysql> SELECT SOUNDEX('Quadratically');

        -> 'Q36324'

  • expr1 SOUNDS LIKE expr2

이것은 SOUNDEX(expr1) = SOUNDEX(expr2)과 같다.

  • SPACE(N)

N 개의 스페이스 문자로 구성된 스트링을 리턴한다.

mysql> SELECT SPACE(6);

        -> '      '

  • SUBSTRING(str,pos), SUBSTRING(str FROM pos), SUBSTRING(str,pos,len), SUBSTRING(str FROM pos FOR len)

len 인수가 없는 형태는 포지션 pos에서 시작을 하는 서브 스트링을 스트링 str 에서 리턴 한다. len 인수를 가지고 있는 형태는 포지션 pos에서 시작을 해서 서브 스트링 len 문자를 리턴한다. FROM을 사용하는 형태는 표준 SQL 신텍스이다. pos의 값으로 음수를 사용하는 것도 가능하다. 음수를 사용할 경우에는, 서브 스트링의 시작점이 스트링의 처음이 아닌 끝에서부터 pos 문자 위치가 된다. 음수 값은 이 함수의 어떤 형태에서도 사용이 가능하다.

mysql> SELECT SUBSTRING('Quadratically',5);

        -> 'ratically'

mysql> SELECT SUBSTRING('foobarbar' FROM 4);

        -> 'barbar'

mysql> SELECT SUBSTRING('Quadratically',5,6);

        -> 'ratica'       

mysql> SELECT SUBSTRING('Sakila', -3);

        -> 'ila'       

mysql> SELECT SUBSTRING('Sakila', -5, 3);

        -> 'aki'

mysql> SELECT SUBSTRING('Sakila' FROM -4 FOR 2);

        -> 'ki'

이 함수는 다중 바이트에서도 동작을 한다.

만일 len 1 보다 작으면, 그 결과는 빈 스트링이 된다.

SUBSTR()SUBSTRING()과 동일하다.

  • SUBSTRING_INDEX(str,delim,count)

구분자 (delimiter) delimcount 만큼 나오기 전에 스트링 str 에서 서브 스트링을 리턴한다. 만일 count 가 양수 (positive)라면, 마지막 구분자의 왼쪽에 있는 모든 것들이 리턴된다 (왼쪽부터 계산이 됨). 만일 count 가 음수일 경우에는, 마지막 구분자의 오른쪽에 있는 모든 것들이 리턴된다 (오른쪽부터 계산됨). SUBSTRING_INDEX()delim에 대한 검색을 할 때 문자의 크기를 구분한다.

mysql> SELECT SUBSTRING_INDEX('www.mysql.com', '.', 2);

        -> 'www.mysql'

mysql> SELECT SUBSTRING_INDEX('www.mysql.com', '.', -2);

        -> 'mysql.com'

이 함수는 다중 바이트를 지원한다.

  • TRIM([{BOTH | LEADING | TRAILING} [remstr] FROM] str), TRIM([remstr FROM] str)

스트링 str 를 모든 remstr 접두사 (prefixes) 또는 접미사를 제거한 상태로 리턴한다. 만일 BOTH, LEADING, 또는 TRAILING 중의 어느 것도 주어지지 않는다면, BOTH가 주어진 것으로 간주된다. remstr 는 선택 사항이며, 만일 지정되지 않을 경우에는, 스페이스가 제거된다.

mysql> SELECT TRIM('  bar   ');

        -> 'bar'

mysql> SELECT TRIM(LEADING 'x' FROM 'xxxbarxxx');

        -> 'barxxx'

mysql> SELECT TRIM(BOTH 'x' FROM 'xxxbarxxx');

        -> 'bar'

mysql> SELECT TRIM(TRAILING 'xyz' FROM 'barxxyz');

        -> 'barx'

이 함수는 다중 바이트를 지원한다.

  • UCASE(str)

UCASE()UPPER()와 동의어이다.

  • UNHEX(str)

HEX(str)와는 반대 연산을 실행한다. , 이 함수는 인수에 있는 각각의 16진수를 숫자로 해석을 하고 그 숫자에 대응하는 문자로 변환을 시킨다. 그 결과로 나오는 문자들은 바이너리 스트링으로 리턴된다.

mysql> SELECT UNHEX('4D7953514C');

        -> 'MySQL'

mysql> SELECT 0x4D7953514C;

        -> 'MySQL'

mysql> SELECT UNHEX(HEX('string'));

        -> 'string'

mysql> SELECT HEX(UNHEX('1267'));

        -> '1267'

  • UPPER(str)

Returns 스트링 str 를 현재의 (current) 문자 셋 매핑에 따라서 대문자로 변환이 된 모든 문자와 함께 리턴한다. 디폴트는 latin1 (cp1252 West European).

mysql> SELECT UPPER('Hej');

        -> 'HEJ'

이 함수는 다중 바이트를 지원한다.

신고
Posted by naearu

블로그들의 방문자수를 가져오는 프로그램을 짜야할 일이 생겨서..

블로그들에 프로그램으로 접속을 시도했다!!



얼래? 몇번하다보니 알았는데..이거..카운트가 올라가네??

설마 설마 하면서 새로고침을 몇번해주니까;;

얼라리랍쇼?

카운트가 쭉쭉올라가네? 막힘없는건가?

사용자 삽입 이미지
그래서 심심해서..
10초당 한번씩 리로드 되게 해놓고..
걍 두고 회사갓다 오니까..투데이가 만명이 넘었다 ㄱ-;;

(만명채웟는데 그새 3명이 들어왓네;;)

평소에 끽해야;; 300명? 많이오면 천명정도?엿던것을;; 그냥.. 10000명..워...참으로 대단하다 ㄱ-;;;

카운터좀 올리려고.. 이상한짓몇번 하긴 했지만;; 이걸로써.. 그냥.. 무의미해져버렷다..
자.. 대략 계산을 해봅시다..
이걸 켜놓고 나간게.. 아침..8시쯤..
끄고 확인한게 9시30분..
1분당..6명이 들어오는 셈이니까..
6x60x13=4,680
대략.. 4천명? 엥?? 계산이 이상한가??? ㄱ-;;
아.. 뭔가.. 셋팅미스인듯..10ㅊ당으로 돌아선 절대 만명이 안되는군;;
그렇다고 설마. 5천명이 하루에 왓다고 할리도 없고;;
뭐; 여튼..
생각해보면.. 1초당한번이면..13시간에 46,800이다.. ㄱ-; 이게 어디 하루치 카운터인가!!!
내 토탈 카운트보다 많다;;
뭐.. 소스를 손보면야.. 한시간안에 만명도 채우겟지만;;

이미 ㄱ-; 후...
file 이 네글자의 위력으로 하루 카운트가 만이 넘는다는게;; 참;; 신기하군하;;

심심한데 2만 넘겨놓을까;; 오늘만? ㅋ


....
해보고 싶으신분은 말씀하삼.. 친히 초당 한방씩 날리는 코드로 써드리겟심 ㄱ-;



신고
Posted by naearu

PHP에서 소수점 버림함수는 floor()입니다.

floor 버림
floor(4.3);  // 4
floor(9.999); // 9

ceil 올림
ceil(4.3);    // 5
ceil(9.999);  // 10

round반올림
round(3.4);        // 3
round(3.5);        // 4
round(3.6);        // 4
round(3.6, 0);      // 4
round(1.95583, 2);  // 1.96
round(1241757, -3); // 1242000
round(5.045, 2);    // 5.05
round(5.055, 2);    // 5.06


신고
Posted by naearu