2009년 7월 21일 화요일

[스타일시트] 특정영역 인쇄하기



특정영역 인쇄하는 것을 자바스크립트로 하다가 먼가 깔끔하지 못한거 같아서 새로운 방법을 찾던중
이번에는 CSS (스타일시트) 로 인쇄영역을 구분하는 방법에 대해 할게 되었다.

이 방법은 media에 따라 스타일을 다르게 주는 방법으로,
이를 이용하면 화면에 보이는 스타일과 인쇄되는 스타일을 다르게 설정할 수 있다.

즉, 단순히 보이지 않는 것을 떠나서 색을 바꾼다던지 배경그림을 넣는 것, 폰트를 변경하는 것도 가능하다.

항상 장점이 있으면, 단점도 있는 법!!
이런 장점만큼이나 안타까운 단점이 있다.

자바스크립트로 구현할 때는 내가 인쇄하기를 원하는 부분만을 묶으면 되지만,
이는 반대로 인쇄를 하지 않을 부분을 묶어야 한다는 것이다.
이 방법이 때로는 장점이 될수도 있는 것이지만, 특정 페이지에서만 인쇄를 하고 홈페이지를 노프레임형태로 Server Side Include (PHP, ASP, Apache 등 서버단에서 Include 하는 것)을 사용한다면 변경해야될 파일이 많아진다.

하지만 모든 페이지에서 인쇄를 해야하고, 항상 특정부분을 제외해야 한다면 장점도 될수 있을 것이다.

이를 사용하는 방법은 아주 간단하다.
핵심코드는 아래 몇줄안되는 코드가 전부다.



이렇게 media="print"를 하면 인쇄할 때만 적용되고, media="screen"은 화면에 출력할 때만 적용이 된다.
위의 코드는 class="noprint" 가 지정되어 있는 영역은 프린트가 되지 않게 만들고,
반대로 class="onlyprint"가 지정되어 있는 영역은 화면에 출력되지 않게 한다.

그렇게 어려운 내용이 아니므로 아래 예제를 보면 충분히 이해할 수 있을 것이다.

예제보기

출처 - http://realmind.tistory.com/198   BSH님 블로그 펌

2009년 7월 10일 금요일

[리눅스] 리눅스를 원격제어 해보자!~

리눅스에서도 윈도우처럼 x-window을 원격제어 할 수 있다.

물론 여러가지 프로그램들이 있지만, 우선 여기에서 VNC를 이용하여 원격제어를

하고자 한다.


1. VNC SERVER가 설치가 되어있는지 확인을 해본다.

#rpm -qa|grep vnc
vnc-server-4.1.2-9.el5

2.  VNC가 설치가 되어 있다면 VNC 설정파일에서 사용자를 추가해준다.

#vi /etc/sysconfig/vncservers

# The VNCSERVERS variable is a list of display:user pairs.
#
# Uncomment the lines below to start a VNC server on display :2
# as my 'myusername' (adjust this to your own).  You will also
# need to set a VNC password; run 'man vncpasswd' to see how
# to do that.
#
# DO NOT RUN THIS SERVICE if your local area network is
# untrusted!  For a secure way of using VNC, see
# <URL:http://www.uk.research.att.com/archive/vnc/sshvnc.html>.
 
# Use "-nolisten tcp" to prevent X connections to your VNC server via TCP.
 
# Use "-nohttpd" to prevent web-based VNC clients connecting.
 
# Use "-localhost" to prevent remote VNC clients connecting except when
# doing so through a secure tunnel.  See the "-via" option in the
# `man vncviewer' manual page.
 

VNCSERVERS="1:user"             #이부분의 주석을 제고하고 사용하고자하는 사용자를 등록한다. 사용자앞은 숫자는 접속할때 필요한 것이므로 유의하여 등록한다.
# VNCSERVERARGS[2]="-geometry 800x600 -nolisten tcp -nohttpd -localhost"

3. VNC를 실행을 위한 준비작업.

  - 환경설정

# vncserver :1
Starting VNC server: 1:user
New 'linux.user:1(user)' desktop is linux.user:1

starting applications specified in /home/user/.vnc/xstartup
Log file is /home/user/.vnc/linux.user:1.log

위 명령을 실행하면 x-windows를 선택할 수 있는 필요 파일들이 생성된다.

= 아래 설정파일에서 빨간색으로 표시된 부분을 주석을 제거해줘야
GUI 원격제어를 할수가 있다.. 이게 주석처리되있으면 터미널모드만 실행가능한
원격제어가 된다..(그럴거면 SSH 접속 프로그램이 오히려 더 편하다..)

#vi ~/.vnc/xstartup

#!/bin/sh
 
# Uncomment the following two lines for normal desktop
unset SESSION_MANAGER
exec /etc/X11/xinit/xinitrc

 
[ -x /etc/vnc/xstartup ] && exec /etc/vnc/xstartup
[ -r $HOME/.Xresources ] && xrdb $HOME/.Xresources
xsetroot -solid grey
vncconfig -iconic &
xterm -geometry 80x24+10+10 -ls -title "$VNCDESKTOP Desktop" &
twm &

   - VNC 실행

실행된 VNC 서버가 있다면 설정을 변경한후 재기동을 해준다. 이때 재기동을 해주어야 변경된 환경설정되로 변경된다.
[root@ ~] service vncserver restart

#vncserver -kill :1             
Killing Xvnc process ID 1234

#vncserver :1
Starting VNC server: 1:user
New 'linux.user:1 (user)' desktop is linux.user:1

starting applications specified in /home/user/.vnc/xstartup
Log file is /home/user/.vnc/linux.user:1.log

이제 모든작업을 완료하였다.

그럼 이제 클라이언트에서 접근해보자.

출처 : http://ggwangs.egloos.com/870506

[리눅스&아파치] 사용자별 대역폭 제한 및 전송량 제한 방법

각 사용자 별로 트래픽을 관리한다는것은 FTP 웹서비스 다 포함하는걸 원하시는건가요?

각 사용자의 모든 서비스 트래픽을 제어하는것은 저도 모르겠습니다.

다만 요즘 트래픽 제한 이라고 하면 거의 대부분이 웹서비스(아파치에서...)를 제어하는

것을 말하기에 대략 설명드리겠습니다.

웹호스팅 사이트를 돌아다니다보면
' 일일트래픽 500M , 혹은 일일 히트수 1000 히트 제한 '
이런 글을 볼 수 있습니다.


트래픽을 제어하는 방법은 mod_bandwidth 와 mod_throttle 두가지가 주로 많이 쓰이는데
mod_bandwidth 는 대역폭을 관리 하는 모듈이며
mod_throttle 은 트래픽을 제어하는 모듈입니다 ( 그게 그 소리 같은가 ? ㅡㅡ;; 하지만 두개의
역할은 분명히 다릅니다 )

예를들어 1M 짜리 파일을 받는다고 하면
mod_bandwidth 모듈을 이용하면 초당 얼마의 속도까지 전송이 가능한지를 관리 하고
mod_throttle 모듈은 1M 파일을 몇번까지 다운받을 수 있느냐를 관리 하게 되겠죠.

mod_bandwidth 모듈은 1M 파일을 다운 받는 속도를 apache 서버 관리자가 마음대로
조절할 수 있으나 다운 받는 횟수, 다시말해 총 다운로드 양은 조절이 안되고

mod_throttle 모듈은 1M 파일을 다운받는 속도를 조절할 수 없으나
다운받는 총 횟수, 즉 총 다운로드 양을 조절할 수 있다는 말입니다.

두개를 함께 쓰면 트래픽, 대역폭 관리에 유용하겠죠.


이번 강좌에서는 mod_throttle 모듈만 설명 하겠습니다.
아파치가 설치된 디렉토리는 /usr/local/apache 라고 가정하고 설명 합니다.

우선 mod_throtte.c 파일을 다운받아 아파치 경로의 특정 디렉토리로 가져다 놓습니다.

이걸 구할 수 있는곳은

http://www.snert.com/Software/mod_throttle/index.shtml

위 웹사이트입니다.

mod_throttle312.tgz 파일을 다운 받을 수 있네요 ( 2003년 10월 25일 현재 )
다운받아 압축을 풀면 여러개의 파일이 나오는데 그 중에서
mod_throttle.c 파일을 /usr/local/apache/src/module/extra 에 가져다 놓습니다.


그리고 아파치를 컴파일을 다시 하는데
아래와 같은 컴파일 옵션을 줘야 합니다.

[root@myserver /]# cd /usr/local/apache
[root@myserver apache]# ./configure --prefix=/usr/local/apache --activate-module=src/modules/php4/libphp4.a --add-module=src/modules/extra/mod_throttle.c


( 여기서 \ 표시는 줄이 바뀌며 라인이 지저분해 지는것을 방지 하기 위해
줄을 넘기면서 명령어를 계속해서 입력하기 위해 사용한 표시입니다 )


기존의 php 연동 옵션 (activate... ) 아래에 모듈을 함께 컴파일 하는것으로 옵션을 주었습니다.

이제 make 그리고 make install 로 컴파일을 합니다. ( 이 부분은 아래글 apache ,PHP 설치하기를
참조하시길 바랍니다 )


컴파일이 완료 되었으면 모듈이 제대로 추가 되었는지 확인해 봅니다.

[root@myserver apache]# /usr/local/apache/bin/httpd -l
Compiled-in modules:
http_core.c
mod_env.c
mod_log_config.c
mod_mime.c
mod_negotiation.c
mod_status.c
mod_include.c
mod_autoindex.c
mod_dir.c
mod_cgi.c
mod_asis.c
mod_imap.c
mod_actions.c
mod_userdir.c
mod_alias.c
mod_access.c
mod_auth.c
mod_setenvif.c
mod_php4.c
mod_throttle.c
suexec: disabled; invalid wrapper /usr/local/apache/bin/suexec


맨 아래쪽에 mod_throttle.c 라는 모듈이 보입니다.
제대로 컴파일이 된 상태입니다.

이제 모듈을 사용해 보겠습니다.

httpd.conf 파일을 열어서 이 있는 위치로 이동합니다.
( 꼭 거기에다 편집할 필요는 없지만 .. 같은 내용은 몰아 넣는것이 관리하기 좋겠죠 )

아래의 내용을 입력합니다.



ThrottlePolicy none


SetHandler throttle-status
Deny from all // 다른접근을 모두 거부하고
Allow from 123.123.123.123 // 특정 아이피에서만 throttle-status 를 확인 하도록



SetHandler throttle-me



Order deny,allow
Deny from all
Allow from all
SetHandler throttle-me




throttle-status 를 확인할 수 있는 아이피를 정해 놓은 부분(Allow from.. )을 주의 하시길 바랍니다.
아무나 서버 상태를 확인하게 하면 좇치 않겠지요 ? ㅋㅋ
위 설정은 123.123.123.123 에서만 서버 전체의 트래픽 상황을 모니터링 하도록 설정한 것입니다.


virtualhost 에서의 설정은 아래와 같습니다.


ServerAdmin dream@praise.co.kr
DocumentRoot /home/dream/public_html
ServerName myserver.co.kr
ServerAlias www.myserver.co.kr
Throttle Policy Volume 1024M 1d // 1일 1G 제한
ThrottlePolicy Request 1000 1d // 하루 히트수 1000회 제한
ErrorLog /var/log/httpd/error_log
CustomLog /var/log/httpd/access_log common



위의 내용대로
서버에서 운영되는 도메인에 대해 throttlepolicy 를 설정한 뒤
아파치를 재시작 하고

http://서버IP/throttle-status 를 확인 하면
서버에 설정된 대역폭의 모든 내용을 확인 할 수 있으며

서버에 설정된 특정 도메인의 트래픽을 확인 하려면
http://domain/throttle-me 를 확인 하면 됩니다.

-----------------------------------------------------------------------
자료출처 : 진우네집 ( http://www.praise.co.kr )
-----------------------------------------------------------------------

2009년 7월 9일 목요일

[자바스크립트] 현재 화면 인쇄, 새창 띄우고 새창 인쇄



경우 1. 새창을 띄우고 현재 창을 인쇄하는 방법

<a href="#" onClick="window.open('새창으로 열릴 주소'); window.print()">누르세요</a>

경우 2. 새창을 띄우고 새창을 인쇄하는 방법

새창이 아닌 현재창에 들어갈 소스: <a href="#" onClick="window.open('새창으로 열릴 주소')">누르세요</a>

새창에 들어갈 소소: <body onLoad="window.print()">

2009년 7월 7일 화요일

[리눅스] APACHE2 가상 호스트 설정하기

NameVirtualHost *

<VirtualHost *>
    DocumentRoot /home/devstar/html/blog
    ServerName lucael.devstar.co.kr
    ServerAlias lucael.devstar.co.kr
    ErrorLog /home/lucael/web_log/error_log   //에러에 대한 로그 기록
    CustomLog /home/lucael/web_log/access_log common   //접근자에 대한 기록
</VirtualHost>

이런 식으로 삽입해주면 된다

2009년 6월 30일 화요일

[PHP] PHP 내 내용을 암호화 혹은 복호화 관련 정보

아래 주소로 가면 PHP보안에 관한 서적에 대한 소개 및 간략한 본문 예제를 담고 있다.
역시 보안이라면 패스워드가 가장 먼저 떠오르는 만큼...
암호화시에는 mcrypt_encoded

로그인을 해야 볼수 있네;;

http://book.naver.com/bookdb/book_detail.php?bid=2103583&menu=dview&dencrt=YSlJ2RiZBwdnltmRTzBDUllWMGcrTFU0YldjWFRJcUwxZ05BRXlxVGFqSzVuVVR2YXdKdGJJN21iVmE3Vm1DLw==&query=php+%BE%CF%C8%A3+%BA%B9%C8%A3%C8%AD&term=php%20%BE%CF%C8%A3%20%BA%B9%C8%A3%C8%AD%20php%BE%CF%C8%A3%BA%B9%C8%A3%C8%AD#middle_tab

[자바스크립트] 자바스크립트를 이용한 웹페이지 웹문서 인쇄하기


홈페이지를 제작하다가 특정영역을 인쇄하는 기능이 필요해서 나름대로 검색도 하고,
수정도 좀 하다가 보니 보통은 많은 인쇄기능을 PHP나 ASP와 같은 Server Script Language로 많이 연동해서 구현하고 있었다.

이런 Server Script Language를 써서 하는 방법이 그리 어려운 것은 아니지만,
이를 사용하지 않고 간단하게 하는 방법을 원했기 때문에 자료가 별로 없었고, 그래서 공유할만한 가치가 있다고 판단했다.

내가 알고 있는 방법을 정리하자면,
자바스크립트로 할 수 있는 방법은 아래와 같이 2가지가 있다.



1. 인쇄하는 동안만 웹사이트를 변형하여 특정내용만 남기는 방법.

이 방법의 경우 새창을 띄우지 않아도 되기 때문에 사용하기는 편하다는 장점이 있는 반면, 일시적으로 웹사이트가 변형될 수 있다.
특히나 포탈같이 웹사이트의 소스가 긴 경우 이를 소화하지 못하여 웹사이트가 자동복구 되지 않고 새로고침을 해야 할 수도 있다. 직접 간단한 테스트를 해봤을 경우는 정상작동하였으나, 소스가 길어지자 변형된 웹사이트가 자동복구되지 않는 현상을 발견할 수 있었다.

 - <head>에 들어갈 자바스크립트 영역
01 var initBody;
02 function beforePrint()
03
04    initBody = document.body.innerHTML; 
05    document.body.innerHTML = print_page.innerHTML;
06
07   
08 function afterPrint()
09
10   document.body.innerHTML = initBody; 
11
12   
13 function pageprint()
14 {
15      window.onbeforeprint = beforePrint; 
16      window.onafterprint = afterPrint; 
17      window.print(); 
18 }


 - <body>에 들어갈 영역지정 방법
1 <div id='print_page'>
2 인쇄내용
3 </div>


 - 인쇄버튼
1 <input type='button' value='  인 쇄  ' onclick="pageprint()">



2. 특정영역의 내용을 하나의 문서로 만들어서 새창으로 띄우는 방법.

이 방법은 특정영역을 지정해 놓고, 인쇄버튼을 눌렀을 때 새창으로 특정영역을 그대로 복사하는 방법이다.
새문서를 만들어서 저장하지 않고, 자바스크립트로 동적으로 인쇄할 영역을 만들어내기 때문에 따로 저장공간이 필요하지도 않을뿐더러 인쇄미리보기의 효과도 볼수 있다.

하지만, 새창을 띄우는 것을 싫어하는 유저도 많이 있기 때문에 그다지 추천하지는 않는다.

 - <head>에 들어갈 자바스크립트 영역
01 function pagePrint(Obj) { 
02     var W = Obj.offsetWidth;        //screen.availWidth; 
03     var H = Obj.offsetHeight;       //screen.availHeight;
04   
05     var features = "menubar=no,toolbar=no,location=no,directories=no,status=no,scrollbars=yes,resizable=yes,width=" + W + ",height=" + H + ",left=0,top=0"
06     var PrintPage = window.open("about:blank",Obj.id,features); 
07   
08     PrintPage.document.open(); 
09     PrintPage.document.write("<html><head><title></title><style type='text/css'>body, tr, td, input, textarea { font-family:Tahoma; font-size:9pt; }</style>\n</head>\n<body>" + Obj.innerHTML + "\n</body></html>"); 
10     PrintPage.document.close(); 
11   
12     PrintPage.document.title = document.domain; 
13     PrintPage.print(PrintPage.location.reload()); 
14 }


 - <body>에 들어갈 영역지정 방법
1 <div id='print_page'>
2 인쇄내용
3 </div>
 

 - 인쇄버튼
1 <input type='button' value='  인 쇄  ' onclick="pagePrint(document.getElementById('print_page'))">


출처 : bsh님 티스토리 블로그 http://realmind.tistory.com/197