세이박스

자바스크립트를 이용해서 여러장의 이미지 롤링하기

웹프로그램
쇼핑몰 사이트 메인 페이지에 여러 이미지들을 롤링해서 지정된 시간(초) 간격으로 바뀌도록 하는 기능을 만들어 보고자 합니다.

먼저 예제 이미지는 총 4장 입니다.
현재 운영중인 달인쿠폰(http://dalincoupon.com)을 예를 들어 보겠습니다.

1. 이미지 넘버
이미지 넘버는 이미지 상단에 현재 몇번째 이미지 인지 표시해주는 버튼 이미지로써 클릭시 바로 원하는 이미지로 이동할수 있습니다.

<!-- 이미지 넘버링 -->
<div style="Z-INDEX: 1; LEFT: 0px; WIDTH: 0px; POSITION: relative; TOP: 0px; HEIGHT: 0px; display:block;">
 <div style="Z-INDEX: 1; LEFT: 800px; WIDTH: 135px; POSITION: absolute; TOP: 15px; HEIGHT: 0px">
  <table border=0 cellpadding=0 cellspacing=0 align=right>
   <tr>
    <!-- 이미지 넘버 1 -->
    <td width=20><a href="#none"><img id='num_1' src="http://dalincoupon.com/images/group/ico1_on_.gif" border=0 onclick="clickImg(1,'/mall/updir/products/99fed6c0.jpg')"></a></td>
    <td width=5></td>
    <!-- 이미지 넘버 2 -->
    <td width=20><a href="#none"><img id='num_2' src="http://dalincoupon.com/images/group/ico2_off_.gif" border=0 onclick="clickImg(2,'http://dalincoupon.com/mall/updir/products/1239dae0.jpg')"></a></td>
    <td width=5></td>
    <!-- 이미지 넘버 3 -->
    <td width=20><a href="#none"><img id='num_3' src="http://dalincoupon.com/images/group/ico3_off_.gif" border=0 onclick="clickImg(3,'http://dalincoupon.com/mall/updir/products/76acc690.jpg')"></a></td>
    <td width=5></td>
    <!-- 이미지 넘버 4 -->
    <td width=20><a href="#none"><img id='num_4' src="http://dalincoupon.com/images/group/ico4_off_.gif" border=0 onclick="clickImg(4,'http://dalincoupon.com/mall/updir/products/94a63cd0.jpg')"></a></td>
    <td width=5></td>
    <!-- 이후 이미지를 추가 하셔도 됩니다 -->
   </tr>
  </table>
 </div>
</div>
<!-- //이미지 넘버링 -->

이미지를 추가 할때 이미지 넘버도 같이 추가 하셔야 합니다.
"num_4" , clickImg(4,'이미지경로') 부분을 변경하시면 됩니다.


2. 대표 이미지 출력
기본적으로 출력된 첫번째 이미지를 적용 합니다.
img 태그에 id값을 "mainImage"로 적용합니다.

<!--상품 메인이미지-->
<img id="mainImage" src="http://dalincoupon.com/mall/updir/products/99fed6c0.jpg" width="950">




3. 자바스크립트 소스

<script type="text/javascript">
<!--
var numIdx = 1; //첫 이미지 배열 번호
var nextimg = 2; //다음 바뀔 이미지 배열 번호
var timerchecker = null; //롤링 시간을 초기화 하기 위한 선언

var imgs = new Array(); //이미지 URL을 배열로 담아두기
imgs[1] = "http://dalincoupon.com/mall/updir/products/99fed6c0.jpg";
imgs[2] = "http://dalincoupon.com/mall/updir/products/1239dae0.jpg";
imgs[3] = "http://dalincoupon.com/mall/updir/products/76acc690.jpg";
imgs[4] = "http://dalincoupon.com/mall/updir/products/94a63cd0.jpg";

/* 이미지 넘버를 클릭시 호출하는 함수 */
function clickImg(idx,img) {
 clearTimeout(timerchecker); //시간 초기화
 btnNew = document.getElementById("num_"+idx);
 btnOld = document.getElementById("num_"+this.numIdx);
 btnOld.src = btnOld.src.replace("_on_","_off_");
 btnNew.src = btnNew.src.replace("_off_","_on_");
 document.getElementById("mainImage").src = img;
 this.numIdx = idx;
 if(nextimg < 4) {
  nextimg += 1; //마지막 이미지가 아니면 다음 +1 이미지로 이동
 } else {
  nextimg = 1; //이미지가 마지막 장이면 다음 이미지는 첫장으로 이동
 }
 /* 이미지 롤링 호출, 이용자가 클릭해서 보는 이미지 이므로 20초 지연 */
 timerchecker = window.setTimeout("changeImg(nextimg,imgs[nextimg])",20000);
}

/* 이미지 롤링 함수 */
function changeImg(idx,img) {
 clearTimeout(timerchecker);
 btnNew = document.getElementById("num_"+idx);
 btnOld = document.getElementById("num_"+this.numIdx);
 btnOld.src = btnOld.src.replace("_on_","_off_");
 btnNew.src = btnNew.src.replace("_off_","_on_");
 document.getElementById("mainImage").src = img;
 this.numIdx = idx;
 if(nextimg < 4) {
  nextimg += 1;
 } else {
  nextimg = 1;
 }
 timerchecker = window.setTimeout("changeImg(nextimg,imgs[nextimg])",5000);
}
timerchecker = window.setTimeout("changeImg(nextimg,imgs[nextimg])",5000);
//-->
</script>

자바스크립트 내부에 주석을 달아 놨지만 다시 설명을 덧붙이겠습니다.
먼저 페이지 로딩시 지정한 이미지를 배열로 담습니다.
var imgs = new Array();

그리고, timerchecker 라는 변수에 window.setTimeout(); 함수를 담습니다.
이때 적용되는 함수로는 5000 -> 5초 지연후 changeImg() 함수를 호출 됩니다.
이때 nextimg값을 전달 하므로 처음엔 changeImg(2,http://dalincoupon.com/mall/updir/products/1239dae0.jpg);
두번째 이미지 정보를 changeImg() 함수에 전달합니다.

이미지 롤링 함수에서는 전달 받은 idx와 img 값을 이용해서 다음 이미지로 변경 그리고 이미지 넘버역시 함께 변경 합니다.

만약 사용자가 이미지 넘버를 클릭시엔 이용자가 원하는 이미지를 바로 볼수 있도록 clickImg() 함수를 호출합니다.
해당 함수 역시 changeImg() 함수와 동일하지만 단, 지연시간을 20000 -> 20초로 지정하여 사진을 볼수 있는 시간을 지연해 줍니다.
20초가 지나면 다시 원래되로 changeImg() 함수가 5초 간격으로 반복 처리 됩니다.


여기서 한가지 더 응용한다면 이미지 전환할때 슬라이드 효과를 적용할수도 있지만 그럴경우 소스가 매우 복잡해져서 이정도록 적용해 봤습니다.
위 소스를 그대로 적용시 달인쿠폰 상품 이미지가 롤링 되는것을 보실 수 있을겁니다.
달인쿠폰 반값 할인 사이트 참조하세요!
김병만의 달인쿠폰 : http://dalincoupon.com


 ▶ 최신영화, 최신 미국드라마 무료 다운로드... 

리눅스 서버 시간을 date 명령어로 손쉽게 변경하기

서버,보안
리눅스(linux) 서버에서 날짜를 보는 명령어는 다음과 같다.

[root@ ~]# date
2010. 04. 13. (화) 14:37:05 KST

위와 같이 현재 시간을 표시하게 되는데 위 시간에서 1분만 더 늦추거나 1시간 더 빠르게 등
특정 분,시간 단위로 +,- 하는 방법을 알려 드립니다.

date --set='-30 minutes'
date --set='-1 hours'
date --set='+1 hours'

[root@ ~]# date --set='-2 minutes'
2010. 04. 13. (화) 14:35:06 KST
[root@ ~]# date
2010. 04. 13. (화) 14:35:07 KST

위 예처럼 -2 minutes 경우 현재 시간보다 -2분전으로 변경 됩니다.

하지만 주의 사항으로 crontab 설정에 아래와 같이 특정 시간에 날짜를 받아 와서 갱신 하도록 해 두셨다면
해당 시간에 원래 시간으로 돌아오게 되니 crontab 설정을 확인 하시기 바랍니다.
00 05 * * * /usr/bin/rdate -s time.bora.net

ezRenamer ver 1.07 파일 및 폴더명 손쉽게 한번에 일괄 변경시 유용한 프로그램

기타
사용자 삽입 이미지

파일이나 폴더를 한번에 일괄 변경 하고자 할 때가 간혹 생기죠 이럴때 exRenamer 프로그램을 이용시 아주 손쉽게 바꿀수 있도록 해줍니다.

ezRenamer ver 1.07정식(11/20)


1. 프로그램 특징

  • 프로그램 파일 이름을 한번에 바꿀수 있다.
  • 오른쪽 창의 내용을 카피하여 다른 창에서 편집후 다시 붙여 사용가능.
  • 화일 이름 바꾸기를 문서편집기처럼 편하게 사용가능.
  • 설치할 필요없구 그냥 실행.
  • 사이즈 변환 가능
  • 이전에 바꾼 내용 기억.
  • 안 바꿔지던 버그를 수정(6/7update)
  • 화일 앞부분에 앨범이름등을 넣을 수 있다.(6/7update)
  • 이전에 바꿨던 내용은 리스트에 더이상 추가하지 않음.(6/7update)
  • 되돌리기 기능으로 100번까지 가능.(단, 화일 이름을 바꾸면 되돌릴수 없음)(6/7update)


    2. 사용법

    1) 왼쪽 뷰에서 바꿀 디렉토리를 선택한다. 오른쪽 화면에 파일 이름이 생성된다.
    2) 화일 이름을 입맛에 맞게 편집한다.
    3) "이름 바꾸기" 버튼을 눌러 바꾼다.
    4) 탐색기를 통하여 보면 이쁘게 이름이 바껴있을 것이다.
    5) "임시 바꾸기"는 같은 문자를 한꺼번에 다른 문자로 바꿀경우 사용.
    6) "처음에 넣기"를 이용하여 앨범이름을 일괄적으로 넣을수 있다.(6/7update)
    7) "이전으로"기능으로 이름 되돌리기 기능이 가능하다.(6/7update)
    8) "확장자바꾸기"를 이용하여 확장자를 무조건 바꿀수 있다.(11/20update)
    9) 키보드의 "Enter"는 "이름바꾸기" 또는 "처음에 넣기"버튼을 자동으로 눌러줍니다.(11/20update)


    * 개발자 : ezrenamer
    http://ezmuz.com
  • 보안 윈도우 서버 원격데스크탑 접속 포트 변경 및 접속하기

    서버,보안
    사용자 삽입 이미지
     

    보안상 원격데스크탑의 기본 포트인 3389포트를 다른 포트로 변경 할 필요성이 있습니다.
    원격 데스크탑 포트를 변경하기 위해선 레지스트리에서 변경 해주시면 됩니다.

    먼저 시작 > 실행 에서 regedit 르고 실할한뒤

    HKEY_LOCAL_MACHINE\System\CurrentControlSet\Control\TerminalServer\WinStations\RDP-Tcp\PortNumber

    사용자 삽입 이미지



    클릭후 10진수 체크하신뒤 3389 를 다른 포트로 변경 해주세요.
    물론 사용하지 않는 포트로 바꾸셔야 겠죠 이왕이면 5~6자리로 만드세요!


    사용자 삽입 이미지



    적용 할려면 재부팅 하셔야 합니다.

    원격 접속을 하실려면 서버 IP주소:변경한 포트 번호 로 접속 하셔야 합니다.
    예로 127.0.0.1:9999 이런식으로 ^^

    사용자 삽입 이미지

    mssql 전체 테이블 문자 검색 변경

    데이타베이스
     
    어느날 갑자기 DB에 "<script src=http://...></script>" 와 같은 내용이 삽입 된경우는 스크립트 삽입 공격을 받으신 겁니다.
     
    참고로, 구글(http://www.google.co.kr) 에서 "<script src=http://...></script>" 내용을 검색해보세요.
    국내 사이트중 어마어마 하게 많이 공격받은걸 확인 하실 수 있을겁니다.
     
    MSSQL 을 사용중인 서버들이 공격 대상입니다.
    항상 느끼는거지만 윈도우 관련 서버들이 취약점이 많다 보니 이런 문제가 생기는 것 같네요 저도 더 자세히 관련 공격 원인과 방어를 찾아봐야겠지마 끝이 없는듯 ㅡㅡ;
     
    그럼, 테이블 마다 일일이 삽입된 스크립트를 일일이 지우는것도 끝이 없죠 그래서 다음과 같이 쿼리를 실행 해주시면 문제의 스크립트가 있는 테이블, 컬럼을 일일이 자동으로 찾아서 삭제 해줍니다.
     
     
    DECLARE @T varchar(255), @C varchar(255);
    DECLARE Table_Cursor CURSOR FOR
    SELECT a.name, b.name
    FROM sysobjects a, syscolumns b
    WHERE a.id = b.id AND a.xtype = 'u' AND
    (b.xtype = 99 OR
    b.xtype = 35 OR
    b.xtype = 231 OR
    b.xtype = 167);
    OPEN Table_Cursor;
    FETCH NEXT FROM Table_Cursor INTO @T, @C;
    WHILE (@@FETCH_STATUS = 0) BEGIN
      EXEC(
        'update ['+@T+'] set ['+@C+'] = left(
                convert(varchar(8000), ['+@C+']),
                len(convert(varchar(8000), ['+@C+'])) - 6 -
                patindex(''%tpircs<%'',
                          reverse(convert(varchar(8000), ['+@C+'])))
                )
          where ['+@C+'] like ''%<script src=http://...></script>'''
          );
      FETCH NEXT FROM Table_Cursor INTO @T, @C;
    END;
    CLOSE Table_Cursor;
    DEALLOCATE Table_Cursor;
     
     
    위 진하게 표시된 부분을 삽입된 스크립트 내용으로 넣어 주시면 됩니다.
    만약 여러 종류의 스크립트가 삽입된경우 ''%<script%</script>''' 처럼 넣어 주셔도 됩니다. 하지만 정상적인 스크립트가 사라지는 경우가 발생하겠죠! 주의!
     
    하지만, 안타깝게도 위 쿼리로 100% 복구 안될 가능성 있습니다.
    가장 좋은 방법은 백업해두신거 복구하는게 가장 좋겠죠!
     
    아무튼 행운을 빌며 해당 공격에 대해 더 자사한 정보 찾으면 올리겠습니다.