2010년 4월 29일 목요일

mysql 바이너리 로그 표시 및 삭제

바이너리 로그 리스트 표시
mysql > show binary logs;
mysql > show master logs;


바이너리 로그 삭제mysql > purge master logs to 'mysql-bin.000001';

지정된 바이너리 로그 보다 작은 숫자 파일이 제거된다.
즉, 000025번으로 한 경우 000001 ~ 000025 까지의 번호 파일이 삭제된다.


바이너리 로그 변환

/usr/local/mysql/bin/mysqlbinlog /usr/local/mysql/data/mysql-bin.000001 > /tmp/1.txt

보통 바이너리 로그는 용량이 큰 경우도 있으므로, 변환하여 저장될 곳은 넉넉한 곳을 지정해주도록 한다.

2010년 4월 28일 수요일

ethtool로 nic 설정 변경하기

[root@XENPBX ~]# ethtool peth0
Settings for peth0:
        Supported ports: [ TP ]
        Supported link modes:   10baseT/Half 10baseT/Full
                                100baseT/Half 100baseT/Full
                                1000baseT/Full
        Supports auto-negotiation: Yes
        Advertised link modes:  10baseT/Half 10baseT/Full
                                100baseT/Half 100baseT/Full
                                1000baseT/Full
        Advertised auto-negotiation: Yes
        Speed: 1000Mb/s
        Duplex: Full
        Port: Twisted Pair
        PHYAD: 0
        Transceiver: internal
        Auto-negotiation: on
        Supports Wake-on: umbg
        Wake-on: g
        Current message level: 0x00000007 (7)
        Link detected: yes
[root@XENPBX ~]# ethtool -s peth0 100 duplex full autoneg on

[root@XENPBX ~]# ethtool peth0
Settings for peth0:
        Supported ports: [ TP ]
        Supported link modes:   10baseT/Half 10baseT/Full
                                100baseT/Half 100baseT/Full
                                1000baseT/Full
        Supports auto-negotiation: Yes
        Advertised link modes:  100baseT/Full
        Advertised auto-negotiation: Yes
        Speed: 100Mb/s
        Duplex: Full
        Port: Twisted Pair
        PHYAD: 0
        Transceiver: internal
        Auto-negotiation: on
        Supports Wake-on: umbg
        Wake-on: g
        Current message level: 0x00000007 (7)
        Link detected: yes

회원중복검사 자바스크립트(펌)

우선 먼저 답변하신 분의 의견이 있기는한데 중요한 부분이 빠져 있어서 추가적으로

 

글을 남깁니다.

 

프로그램의 순서를 알아보면

 

<input name="chk_Id" id="_chk_id" type="hidden" value="0">

 

을 만들어 두시고요 회원가입 버튼을 클릭하면 체크하는 자바스크립트 함수에다가

 

if(document.getElementById("_chk_id").value=="0"){

       alert("아이디 중복 체크를 해주세요.");

       return;

}

 

위의 루틴을 적어 줍니다. 여기까지는 전에 답변 하신 분하고 비슷하구요.

제일 중요한 아이디 중복 체크 프로그램을 넣어야 합니다.

 

<input name="chk_dup_id" type="button" value="중복체크" onclick="check_id();">

 

이렇게 버튼을 만들고 온클릭 이벤트에 위와 같은 함수를 집어 넣습니다.

그리고 함수를 제작 하는데 함수의 내용은 다음과 같습니다.

 

function check_id(){

       // ex : <input name="id" id="_id" type="text" /> 만약에 아이디를 적는 인풋창이 왼쪽과 같다면

       //  밑에와 같이 적어줍니다. 만약 id="" 속성이 없다면  id="_id" 부분을 추가한다음 아래와 같이 적어줍니다.

 

      document.getElementById("_chk_id").value="0";

       var userid = document.getElementById("_id").value;

       window.open("./check_id.php?userid="+userid,"아이디 중복체크","width=0,height=0;");

}

 

그런 다음 check_id.php 파일을 만듭니다. 여기서는 실제 DB에 접속해서 중복되는 아이디가 있는지

없는지를 검사합니다.

 

check_id.php

<?

       $userid = $_REQUEST["id"];

       $ret = 0;

       //DB접속을 합니다.

       //쿼리문은 이렇게 만드세요. "select count(*) as `id_count` from 테이블이름 where userid=$userid"

       //그런다음 DB에서 $res[id_count]; 값을 불러옵니다. 위의 쿼리문 내용은 같은 아이디가 있으면 1을

       //리턴 할것이고 없다면 0을 리턴 할겁니다. $ret = $res[id_count]; 왼쪽과 같이 DB에서 나온값을

       //$ret 변수에다가 담습니다.

     

?>

<script type="text/javascript">

        //이제 이부분에서는 여기에서 검사한 정보를 회원가입 페이지로돌려줍니다.

        var ret = "<?=$ret ?>";

        if(ret=="1"){

          opener.document.getElementById("_chk_id").value="0";

        }else{

          opener.document.getElementById("_chk_id").value = "1";

        }

</script>

 

 

위의 스크립트는 같은 아이디가 있을 경우에는 젤처음 만들었던 hidden속성의 chk_id 부분의 값을

0으로 만들어서 회원가입을 못하게 만듭니다.

같은 아이디가 없을경우에는 chk_id 의 값을 1로 만들어 회원가입을 할수있도록 만듭니다.

 

이게 기본적인 오퍼레이션 입니다. 이런식으로 하시면 실제 DB에 접속해 현재 회원가입이 되어 있는가

없는가 하는 부분을 알수가 있습니다. 그리고 실제 서버스크립트를 실행해 회원가입을 할때역시 한번더

아이디가 있는지를 중복체크 해주시면 완벽한 프로그램이 되겠습니다.

 

그럼 성공 하시길 ^^*

2010년 4월 26일 월요일

phpmyadmin 설치 세팅

[출처] [MYSQL] PHPMyadmin 설치 및 간단한 사용방법|작성자 홍이얌

 

아래의 설정파일에대한 설명은 원본문서를 번역한것입니다.
저의 영문번역 실력이 미약한 관계로 잘못 번역된것이 있을수도있습니다.
이 글을 보는 분들은 이점을 유의하시고, 영문메뉴얼을 기초로해서 아래의 내용은참고로 하시기 바랍니다.

../phpmyadmin/config.sample.inc.php 파일을

config.inc.php 로 복사

$cfg['blowfish_secret'] = '';
''안에 값 입력(도메인이름 넣어주면 될듯)




phpMyAdmin Project Homepage : http://www.phpwizard.net/projects/phpmyadmin/
Sourceforge phpMyadmin download page : http://phpmyadmin.sourceforge.net/


[ 소 개 ]

phpMyadmin 으로 MYSQL-server 의 전반적인것을 관리할수있다.

- 데이타베이스의 생성 및 삭제
- 테이블의 생성,삭제,수정
- 필드의 수정,추가,삭제
- SQL 문의 실행과 batch-queries
- Fields 의 Key 관리
- text 파일을 데이타베이스에 입력하기
- Table 의 Dump
- export(*) and import data to CSV values
- 여러대의 서버와 단 하나의 데이타베이스를 관리할수있다.
- 20여개국의 언어와 호환된다.

[ 설 치 ]

note : phpmyadmin 은 mysql_database server 의 특별한 보안에관한 어떠한것도 지원하지않는다.

Quick Install

[root@angelsoma]# tar xvfz phpMyadmin-2.2.2-rc1.tar.gz

이것으로 phpmyadmin에 대한 설치는 끝이다.
중요한것은 config.inc.php 의 설정이다.

[ 설정하기 - config.inc.php ]

[root@angelsoma phpmyadmin-2.2.2-rc1]# vi config.inc.php

.............................................................................

$cfgPmaAbsoluteUri string

- phpmyadmin 을 설치한 디렉토리의 완벽한 경로를 입력한다.Version 정보까지입
력해야한다.

$cfgPmaAbsoluteUri = 'http://www.angelsoma.com/home/phpMyadmin-2.2.2-rc1/';

.............................................................................

$cfgServers array

- phpmyadmin-1.4.2 버전 이후부터 여러대의 서버에대한 관리가 가능해졌다.
여기에는 여러대의 mysql-server에대한 정보를 설정한다.
$cfgServers[1] 은 Mysql-server의 첫번째 서버에대한 설정내용이고,
$cfgServers[2] 은 두번째 서버에대한 설정이다.
..
..
..
$cfgServers[n] 은 n 번째 서버에대한 설정이다.

$cfgServers[1]['host'] = 'localhost';
- Mysql-server의 hostname

$cfgServers[1]['port'] = '';
- Mysql-server의 port. 공백이면 default port를 의미 = 3306

$cfgServers[1]['socket'] = '';
- Socket 사용시의 path, 공백은 default

$cfgServers[1]['connect_type'] = 'tcp';
- Mysql-server에대한 connection 방법을 설정한다. socket & tcp 두가지 옵션이
있다.기본은 tcp 로 설정되어있다.

$cfgServers[1]['stduser'] = '';
-

$cfgServers[1]['stdpass'] = '';

$cfgServers[1]['adv_auth'] = FALSE;
- Mysql-server를 advanced authentication mode로 사용한건지 basic으로 사용할
것인지를 결정한다.
- authentication mode는 PHP 가 아파치의 MODULE로 사용될때만 사용가능하다.
- cgi 와는 사용할수없다.

$cfgServers[1]['user'] = 'soma';
- Mysql-server에 접속할 사용자를 입력한다.

$cfgServers[1]['password'] = 'test;
- Mysql-server에 접속할 사용자의 패스워드를 입력한다.

$cfgServers[1]['only_db'] = 'testdb';
- user,password 사용자가 사용한 데이타베이스 명을 입력한다.

$cfgServers[1]['verbose'] = '';
- 여러대의 서버를 관리할때 사용된다.만약 이곳에 설정을 하였다면 Menu의 호
스트네임대신에 이곳에 설정한 목록들이 출력된다.

$cfgServers[1]['bookmarkdb'] = '';
$cfgServers[1]['bookmarktable'] = '';
- phpMyadmin-2.2.0 버전 이후부터 bookmark query 가 가능하게되었다.
이 기능은 자주쓰이는 query문에 적용하기 유용한다
- 공백은 bookmark를 지원하지않는다.
- 이 기능은 아래처럼 사용한다.

CREATE TABLE bookmark (
id int(11) DEFAULT '0' NOT NULL auto_increment,
dbase varchar(255) NOT NULL,
user varchar(255) NOT NULL,
label varchar(255) NOT NULL,
query text NOT NULL,
PRIMARY KEY (id)
);

이렇게 table을 만들고 $cfgserver[n]['bookmarkdb']에 해당 db 명을 입력하고
$cfgserver[n]['bookmarktable']에 bookmark를 설정하면 phpmyadmin에서 bomakr
를 선택할수가 있다.

- stduser 은 bookmark table에서 select,insert,delete privileges 해야하며,
여기에서는 privileges 설정을 아래처럼 해야한다.

GRANT SELECT,INSERT,DELETE . to 'stduser'@localhost;

.............................................................................

$cfgServerDefault integer
- 한대이상의 서버를 설정하였다면 여기에 정의된 번호의 서버가 자동으로좁속
된다. integer의 번호는 phpmyadmin에 설정된 서버의 번호값이된다.
- 만약 하나의 서버만 설정이되어있다면, 반드시 그 번호를 정의해야한다.
- 0 은 기본 서버설정이 아니다.
.............................................................................

$cfgOBGzip boolean
- gzip output buffering을 사용할것인지 여부를 결정한다.
- 이 설정이 true 이면 http 전송속도를 증가시킨다.
.............................................................................

$cfgPersistentConnections boolean
- 지속적인 mysql_connect를 사용할것인지의 여부
.............................................................................

$cfgExecTimeLimit integer [number of seconds]
- 최대실행시간을 설정한다
- 0 는 제한시간을 두지않는다는 의미이다.
- 이 설정은 PHP가 안전모드로 구동중일때는 효가가 없다.

.............................................................................

$cfgSkipLockedTables boolean
- 사용중인 테이블을 표시하고,Lock이걸린 테이블의 데이타베이스를 보여준다.
.............................................................................

$cfgShowSQL boolean
- phpmyadmin에서의 query 과정을 보여줄것인지 아닌지를 결정한다.
.............................................................................

$cfgAllowUserDropDatabase boolean
- administrator를 제외한 일반 사용자들이 자기자신의 데이타베이스를 삭제를할
수있게 할것인지 아닌지에대한 설정
- FALSE 로 설정된다면, Drop Database 라는것을 보여주지않을뿐더러
DROP DATABASE mydatabase 을 reject한다.
.............................................................................

$cfgConfirm boolean
- 테이블이나,데이타베이스를 삭제할때 메시지를 출력할것이냐 아니냐를 설정.

.............................................................................

$cfgShowTooltip boolean
- 왼쪽 프레임에 tooltip를 보여줄것인지 아닌지를 결정한다.

.............................................................................

$cfgShowMysqlInfo boolean
- Mysql runtime 정보를 출력할것인지,아닌지를 설정한다.
.............................................................................

$cfgShowMysqlVars boolean
- Mysql system variables 정보를 출력할것인지 아닌지를 설정한다.
.............................................................................

$cfgShowPhpInfo boolean
- Php information를 출력할것인지 아닌지를 결정한다.
.............................................................................

$cfgShowStats boolean
- database의 세밀한부분과 table의 속성에대한 페이지의 사용밥법 및 통계치를
보여줄것이지에대한 설정.
.............................................................................

$cfgNavigationBarIconic boolean
- navigation bar 버튼을 text 보여줄것인지,상징으로만 사용할것이지결정.
.............................................................................

$cfgShowAll boolean
- 모든 레코드를 보여줄것인지 아니지를 설정.
.............................................................................

$cfgMaxRows integer
- 결과값에대한 출력의 한계를 설정한다.

.............................................................................

$cfgOrder string [DESC|ASC|SMART]
- 정열방법을 결정한다.
.............................................................................

$cfgProtectBinary boolean
- BLOB or BINARY fields가 수정시에 보호되어지는것에대한 설정.

- FALSE to allow edition of all fields;
- blob to allow edition of all fields except BLOBS;
- all to disallow edition of all BINARY or BLOB fields.
.............................................................................

$cfgZipDump boolean
$cfgGZipDump boolean
$cfgBZipDump boolean
- 데이타를 dump 받을때 위의 압축형식을 지원할것인지 아닌지를 결정.
.............................................................................

$cfgManualBase string
- Mysql 문서메뉴얼이있는 URL 정보를담고있다.
.............................................................................

$cfgDefaultLang string
- 기본언어를 설정한다.
.............................................................................

$cfgLang string
- 강제로 사용할 언어를 설정한다.
.............................................................................
Customization & design

$cfgLeftBgColor = '#D0DCE0'; // background color for the left frame
$cfgRightBgColor = '#F5F5F5'; // background color for the right frame
$cfgBorder = 0; // border width on tables
$cfgThBgcolor = '#D3DCE3'; // table header row colour
$cfgBgcolorOne = '#CCCCCC'; // table data row colour
$cfgBgcolorTwo = '#DDDDDD'; // table data row colour, alternate
$cfgPointerColor = '#CCFFCC'; // color of the pointer in browse mode
$cfgTextareaCols = 40; // textarea size (columns) in edit mode
$cfgTextareaRows = 7; // textarea size (rows) in edit mode
$cfgLimitChars = 50; // max field data length in browse mode
$cfgModifyDeleteAtLeft= TRUE; // show edit/delete links on left side of browse
$cfgModifyDeleteAtRight= FALSE // show edit/delete links on right side of browse
$cfgLeftWidth = 150; // left frame width

.............................................................................

$cfgColumnTypes array
- Mysql 에사 사용가능한 칼름에대한 정의.
.............................................................................

$cfgAttributeTypes array
- 사용가능한 필드에대한 속성
.............................................................................

$cfgFunctions array
- Mysql에 지원대는 함수에대한 정의
.............................................................................

많은 설정들이있지만 가장단순하게 사용하려면 아래의 사항만 입력하시고 확인할수있습니다.

$cfgServers[1]['host'] = 'localhost';
$cfgServers[1]['port'] = '';
$cfgServers[1]['socket'] = '';
$cfgServers[1]['connect_type'] = 'tcp';
$cfgServers[1]['stduser'] = '';
$cfgServers[1]['stdpass'] = '';
$cfgServers[1]['adv_auth'] = FALSE;
$cfgServers[1]['user'] = 'soma';
$cfgServers[1]['password'] = 'password';
$cfgServers[1]['only_db'] = 'somadb';
$cfgServers[1]['verbose'] = '';
$cfgServers[1]['bookmarkdb'] = '';
$cfgServers[1]['bookmarktable'] = '';


이상으로 설정에대한 간단한 설명을 마치겠다.
이 문서는 phpMyadmin 소스에대한 압축을 풀면 html / txt 라는 두가지 유형으로메뉴얼이 만들어져있다. 이부분을 꼭 참고하기 바랍니다. 

VI 단축키

Vi 시작하기

  • $ vi : vi 시작하기
  • $ vi aaa.txt : aaa.txt 파일을 편집하면서 vi 시작
  • $ vi -R aaa.txt : 읽기 전용으로 열기
Esc : 또는 /
편집상태
명령대기상태
(Esc모드)

명령줄상태
삽입명령어
i,a,A,I,o,O
Esc 또는 Enter
  • 명령대기상태 → 편집상태 : 삽입명령어 (아래참조.)
  • 편집상태 → 명령대기상태 : Esc글쇠.
  • 명령대기상태 → 명령줄상태 : : 또는 / (아래참조)
  • 명령줄상태 → 명령대기상태 : Esc 또는 Enter (아래참조)

커서의 이동

  • h, l, j, k : 왼쪽(←, Back space), 오른쪽(→, space), 위(↑), 아래(↓)
  • b, w : 이전 단어의 첫 글자로 / 다음 단어의 첫 글자로 이동.
  • B, W : 이전 단어의 첫 글자로 / 다음 단어의 첫 글자로 이동. (문장부호 무시)
  • e : 다음 단어의 끝 글자로 이동.
  • E : 다음 단어의 끝 글자로 이동. (문장부호 무시)
  • H, M, L : 화면의 맨 위/ 중간 / 맨 아래로
  • 0 : 그 줄의 맨 처음으로 (숫자 0이다.)
  • $ : 그 줄의 맨 끝으로
  • + : 다음 줄의 처음으로
  • - : 윗 줄의 처음으로
  • 3| : 현재 줄의 3번째 열로
  • 4H : 화면 상의 처음 줄부터 4줄 밑으로
  • 4L : 화면 상의 마지막 줄부터 4줄 위로
  • (, ) : 이전 문장의 시작으로 / 다음 문장의 시작으로
  • {, } : 이전 문단의 시작으로 / 다음 문단의 시작으로
  • [[, ]] : 이전 섹션의 시작으로 / 다음 섹션의 시작으로

편집 버퍼를 통한 이동

  • ^F, ^B : 한 화면 앞으로 / 뒤로 (^는 Ctrl글쇠를 의미.)
  • ^D, ^U : 반 화면 앞으로 / 뒤로
  • 4^B : 4화면 위로 이동
  • 4^F : 4화면 아래로 이동
  • 7^U : 7줄 위로 이동
  • 7^D : 7줄 아래로 이동
  • ^Y : 커서는 현재 위치 그대로 화면만 한 줄씩 아래로 이동
  • ^E : 커서는 현재 위치 그대로 화면만 한 줄씩 위로 이동

행 단위 이동

  • :0 : 파일의 첫 번째 행으로 가기 (숫자 0)
  • :10 : 10번째 행으로 가기
  • :$ : 파일의 마지막 행으로 가기
  • G : 파일의 마지막 행으로 가기
  • 10G : 10번째 행으로 가기

삽입명령어

  • i : 커서 위치부터 삽입 시작
  • a : 커서 위치 오른쪽부터 삽입 시작
  • A : 현재 줄의 맨 끝 부터 삽입 시작
  • I : 현재 줄의 맨 처음 부터 삽입 시작
  • o : 커서 아래에 행 삽입
  • O : 커서 위에 행 삽입

삭제명령

  • x : 현재 커서위치의 한 문자 삭제
  • X : 현재 커서 왼쪽의 한 문자 삭제
  • dd : 한 줄 지우기
  • 4dd : 4 줄 지우기
  • dw : 한 단어 지우기
  • d2w : 2 단어 지우기
  • D : 커서 오른쪽 행 삭제
  • :5 d : 5 째 행 삭제
  • :5,10 d : 5-10 째 행 삭제

파일의 저장 및 종료

  • :wq : 저장 후 vi 종료
  • :w : 저장 (종료는 하지 않고 계속 편집)
  • :q! : 저장하지 않고 vi 빠져나가기
  • :w filename : filename으로 저장 후 계속 편집
  • ZZ : 변경사항 저장 후 vi 종료

내용의 복사 및 이동

  • yy : 현재의 행 복사
  • 5yy : 현재의 행 위치부터 5행 복사
  • p : 아래(오른쪽)에 붙여넣기
  • P : 위(왼쪽)에 붙여넣기
  • f4yy : 현재의 행 위치부터 4행을 'f'라는 이름의 버퍼에 복사
  • fp : 'f'라는 이름의 버퍼에 복사된 내 용을 현재 행 위치에 붙여넣기
  • :3 co 7 : 3 행을 7행 다음으로 복사
  • :1,3 co 7 : 1-3 행을 7행 다음으로 복사
  • :3 m 7 : 3 행을 7행 다음으로 이동
  • :1,3 m 7 : 1-3 행을 7행 다음으로 이동

내용 고치기

  • J : 현재 행과 아래 행 결합
  • 3J : 3줄 합치기
  • u : 이전 명령 취소
  • cw : 단어 변경
  • cc : 행 변경
  • C : 커서 오른쪽의 행 변경
  • s : 커서가 위치한 문자열 대체
  • r : 한 글자만 변경 (입력 모드로 바뀌지 않음)
  • R : 입력하는 대로 겹쳐써서 변경
  • xp : 커서 위치 문자와 오른쪽 문자 교환
  • - : 문자형(대,소문자) 변경
  • U : 행 변경사항 취소
  • :u : 이전의 최종행 취소

명령 취소 및 반복

  • . : 마지막 명령 반복
  • 2. : 마지막 명령 2회 반복
  • u : 마지막 명령 취소
  • U : 현재 줄을 저장

행 번호 설정 및 화면표시

  • :set nu : 행 번호 표시
  • :set nonu : 행 번호 숨기기
  • := : 현재 줄번호 보여주기
  • :/pattern/ = : pattern이 위치한 줄번호 보여주기

시스템이 다운된 후에 파일 되살리기

  • vi -r : 되살릴 수 있는 모든 파일 이름 보여주기
  • vi -r file.txt : vi를 시작하여 지정한 파일 되살리기

다른 파일을 파일 내로 삽입

  • :r filename : 커서 다음에 파일 삽입
  • :20 r filename : 파일을 20번째 행 다음에 삽입

새로운 파일 편집하기

  • :e fine.txt : file.txt 편집하기
  • :e! : 현재의 편집중인 내용 무시하고 가장 최근에 편집한 내용 다시 편집하기

다중 편집하기

    % vi file1 file2 file3
    혹은
    :e file1 file2 file3
    했을 때,
  • :args : 편집 중인 파일목록 보여주기
  • :n[ext] : 다음 파일로 넘어가기
  • :prev[ious] : 이전 파일로 넘어가기 (단 편집 중인 파일이 저장되지 않으면 다음 파일로 넘어갈 수 없다.)

문자열 탐색

  • /aaa : 'aaa' 찾기 (현재 위치부터 뒤로)
  • ?aaa : 'aaa' 역방향 찾기 (현재 위치부터 앞으로)
  • / : 가장 최근에 검색한 문자열 다시 검색
  • ? : 가장 최근에 검색한 문자열 다시 역방향 검색
  • :set noh : 문자열 검색 후 문자열 강조 끄기

치환

vi에서 치환은 정규표현식이 이용된다. (실제로 이 상태에서 실행하는 명령어는 ed나 ex라는 프로그램이 처리하게 된다. 그래서 보통 이 상태를 "ed-모드"라고 한다.) 문서에서 원하는 패턴을 찾으려면 바로 위에 '문자열 탐색'에서 설명된 바와 같이 /문자열 이나 ?문자열 을 사용한다. 문자치환 명령은 다음과 같다.

[형식] :범위s/변경전/변경후/수정자

'범위'는 명령이 실행될 범위(예: 10,20 이면 10행 부터 20행 까지)를 나타낸다. 's'는 치환(substitute)의 약자이며 '수정자'는 치환 명령의 세부사항을 결정한다. 필요한 것만 뒤에 적어주면 된다. (중복 가능)

  • g (global) - 한 줄에서 일치하는 부분을 여러개 찾았을 때 전부 치환한다. 이것을 사용하지 않으면 처음 것만 치환.
  • c (confirm) - 만족하는 정규표현식을 찾았을 때 치환하기 전에 확인한다.
  • i (ignore-case) - 대소문자를 구별하지 않는다.

"변경전"과 "변경후"에 치환할 내용을 입력한다. "변경전"에 정규표현식을 적는다. 정규표현식으로 ., *, ^, $, [], \(...\), \<...\>, POSIX.2 단축 표현을 사용할 수 있다. 여기서 여러 문자를 묶여서 단위를 만들고 찾은 내용을 기억하는 특수문자가 \(, \)임을 주의해야 한다. 반대로 (, )가 일반문자이다. vim(VI iMproved)에서는 vi에 추가로 |, +, (?와 같은) =, {n,m}을 사용할 수 있지만, 앞에 \ 를 붙여야 한다. 또, vim에는 \i, \k, \p, \s 등의 단축 표현들이 있다.

"변경후"에 \n & 를 사용할 수 있다. \n 는 "변경전"에서 n번째 \(...\) 에 대응하는 부분이고, & 는 "변경전"에 만족한 전체를 나타낸다. 예를 들어,
:%s/\([0-9][0-9]*\) \([Cc]hapter\)/\2 \1/
는 문서에서 12 Chapter같은 부분을 Chapter 12와 같이 치환하고,
:%s/F[1-9][12]*/&/g
는 HTML 문서에서 "F1" ~ "F12"란 단어 모두를 굵은 체로 바꿉니다. (주의! &는 정규표현식의 특수문자는 아니지만 vi의 특수문자이므로, 문자그대로의 &를 사용하려면 대신 \& 를 사용해야 한다.) 이외에도 (뒤를 모두 대문자로) \u 나 (뒤를 모두 소문자로) \l 같은 기능이 있다.

    :%s/aaa/bbb/g - 파일 전체(g)에서 'aaa'을 'bbb' 로 치환
    :%s/^M//g - 파일 전체(g)에서 ^M 을 삭제. ^M은 Ctrl+V+Enter로 입력한다.
    :s/aaa/bbb/ - 현재 행에서 'aaa'을 'bbb' 로 치환
    :1,10 s/aaa/bbb/ - 1행부터 10행 까지 'aaa'을 'bbb' 로 치환
    :1,. s/str/rep/ - 1부터 현재행까지 'aaa'를 'bbb' 로 전부 바꾸기
    :g/감자/s//바위/gc - 각 발생 확인 후 대체

주의할 점은 치환명령어가 / 문자로 각 부분을 구분하기때문에 "변경전"이나 "변경후"에 / 문자를 사용하려면 \/ 같이 써야한다.
필요하다면 / 대신 다른 문자를 사용해도 된다. 예를 들어,
:%s/\/usr\/local\/bin\//\/usr\/bin\//g
대신
:%s#/usr/local/bin/#/usr/bin/#g
가 알아보기 더 쉽다.

0426 퇴원후 첫출근

오늘 드디어 사이비같은 병원을 빠져나왔다.

사기꾼들만 드글 거리고 나이롱 환자만 득실거리는 병원....

 

월차도 없었지만 정말 있기 싫은 병원이다.

벌써월차가 3일이나 까였구나..

 

나의 일주일이 홀라당....... 허무하게 지나갔다...

 

후유증이 더 무섭다는 교통사고... 다시는 일어나지 않게 조심하자. -_-치여도 횡단보도에서 치여야겠다

거지같은 동네... 뭔놈의 교통사고가 이렇게 많아.

 

아침부터 사이비같은 병원 원무과장한테 쓸데없는 소리 들어서 짜증나고 소장한테 쿠사리 먹어서 짜증나고

월욜부터 짜증만 난다...

 

다 그만두고 싶다.....

2010년 4월 20일 화요일

0420 내 인생 최초의 교통사고 T-T

삼재가 아직 안끝났나....

아침에 출근길에 교통사고가 났다....

아침에 늦잠을 자서 좀 늦게 나왔더니 시간이 간당간당 하길래 버스에서 내리자 마자

반대편 차선을 보고 건너려 했을때.

 

순간.쿵........

흠... 치였으땐 진짜 암생각이 안난다....

아침이라 사람도 많았고... 웃음밖에 안나오더라..

 

근데 치이고 나니 마티즈라 다행이다 싶다...

 

 

2010년 4월 19일 월요일

0419 올해의 다짐을 되새기자

30대의 첫해

다짐들만 가득했다.

 

하지만 역시나 금방 무너져 버리는 다짐들.

 

마음을 다잡고 다시 시작해야한다... 올해 이렇게 무너질순 없는거야.올해 아무것도 하지못하면

앞으로도 못할꺼고 평생 그럴것 같은 느낌.

 

내가 행복해야 내 가족이 행복하고 내가 사랑하는 사람이 행복하니깐.

 

조금 힘들어도 힘내자. 니가 생각했던 계획 했던것들을 실행해 옮기자. 아자!!

 

 

 

 

어쩌면 나는
발만 담그고 있는지 몰라요
물이 깊진 않을까
물이 차갑진 않을까

이렇게
난 시도해보지도 않은채
미리 겁부터내고 있네요

2010년 4월 16일 금요일

CentOS5,Fedora7 네임서버 설정법

CentOS5.0/Fedora7 에서 네임서버 설정법

 

 최근OS에서 DNS관련 설정부분에 변화가 있어 간단히 정리합니다.

 

설정하면서 확인한  CentOS 5.0에서 변경된 부분   (fedara 7도 동일)

1. OS설치시 DNS설치를 선택하여 설치했는데 named.conf 및 Zone File들이 안보여 당황하셨을거 같습니다. - -

2. 이번버전은 기본이 View사용으로 바뀌어서 처음접하시는분은 혼란스러울거 같습니다. - -

3. 최근의 버전은 chroot를 기본으로 사용됩니다.  zone file이 /var/named/chroot/var/named에..

4. named.conf 파일은 include기능을 이용하여 기본 zone정보는 named.rfc1912.zones 파일 안에 있습니다.

 

아래는 CentOS5.0 , Fedora 7 에서 DNS설정하는 법을 간략히 정리해봤습니다.

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

1. 버전 및 라이블러리 정보
[root@localhost ~]# more /etc/redhat-release
CentOS release 5 (Final)

[root@localhost ~]# rpm -qa |grep glibc
glibc-2.5-12

 

2. OS설치시 Firewall mode로 설치한경우 우선 iptables해제함.
# service iptables stop

firewall mode로 설치시 , DNS53번포트가 막혀서, 서버자체에서는 되는데 외부에서는 포트가 막혀있음 서비스가 안되거든요. TCP,UDC 53만 열어주셔도 됩니다


3. named.conf 및 Zone file들  복사하기
[root@localhost ~]# locate named.conf
/usr/share/doc/bind-9.3.3/sample/etc/named.conf


# cp -rf /usr/share/doc/bind-9.3.3/sample/etc/*  /var/named/chroot/etc/
# cp -rf /usr/share/doc/bind-9.3.3/sample/var/named/* /var/named/chroot/var/named/


4. ddns_key 우선 주석처리
# vi /etc/named.conf
//key ddns_key
//{
//      algorithm hmac-md5;
//      secret "use /usr/sbin/dns-keygen to generate TSIG keys";
//};

 

5. acl과 match-clients  설정

 # vi named.conf

 

acl "localarea" {
        127.0.0.1;
        59.6.177.1;
};

view "local" {
       match-clients           {  localarea; };
        recursion yes;

zone "." IN {
        type hint;
        file "named.ca";
};

계속..

 

view    "external"
{
/* This view will contain zones you want to serve only to "external" clients
 * that have addresses that are not on your directly attached LAN interface subnets:
 */
        match-clients           { any; };

        recursion no;
//      match-destinations      { !localnets; !localhost; };

          
 

6. 네임데몬 시작
# service named restart

[root@localhost etc]# ps -ef |grep named
named     3610     1  0 06:22 ?        00:00:00 /usr/sbin/named -u named -t /var/named/chroot

root      3620  2794  0 06:23 pts/1    00:00:00 grep named


7. 서비스 도메인추가시

etc]# vi named.rfc1912.zones 에 추가

 

zone file 만들기

[root@localhost named]# cp localdomain.zone yahooms.com.zone

[root@localhost named]# vi yahooms.com.zone
$TTL    10
@               IN SOA  localhost root (
                                        42              ; serial (d. adams)
                                        3H              ; refresh
                                        15M             ; retry
                                        1W              ; expiry
                                        1D )            ; minimum
                IN NS           ns1.yahooms.com.
                IN NS           ns2.yahooms.com.
localhost       IN A            59.6.177.172
ns1             IN A            59.6.177.172
ns2             IN A            59.6.177.172
www             IN A            59.6.177.172
~

 

8.적용
# rndc reload

 

 

기타 정보
#  도메인 등록  또는 네임서버 정보변경하는법

1) GTLD에 등록확인

C:\Documents and Settings\thseo.SS>dig @a.gtld-servers.net serverchk.com ns +short
ns1.serverchk.com.
ns2.serverchk.com.

 

2) 도메인등록기관에 ns3추가할경우 호스트를 추가, 네임서버변경

확인

C:\Documents and Settings\thseo.SS>dig @a.gtld-servers.net serverchk.com ns +short
ns1.serverchk.com.
ns2.serverchk.com.
ns3.serverchk.com.

 

 

9.4.2 이상 버전 설치시 다음 내용도 참고해주시기 바랍니다. http://cafe.naver.com/dnspro/8955

 

#  IPTABLES 로 포트허용하기

최근 linux OS는 기본설치시 Firewallmode로 설치되어 iptables로 53번포트가 막혀있어 허용해야합니다. 

bind zone파일 세부설명

모든 zone파일은 SOA 레코드로 zone파일의 시작을 알린다.
꼭 다음과 같은 형식을 지켜야 된다.

@               IN         SOA              ns1.rootman.co.kr.      yunil.rootman.co.kr.  (
                                            20010504            ; serial
                                            10800               ; refresh
                                            3600                ; retry
                                            3600000             ; expire
                                            43200  )            ; mininum

SOA 레코드의 data 부분은 여러개의 요소로 구성된다. 각 data 부분의 설명은 다음과 같다.

ns1.rootman.co.kr.    

1차 네임 서버를 정의하고 있다.

yunil.rootman.co.kr.  
관리자 메일 주소를 정의하고 있다. @는 zone파일에서 특별한 의미를 갖고 있기 때문에 yunil@rootman.co.kr.
yunil.rootman.co.kr. 로 표기 해야 된다.

주의 : bind 9 (bind 8.2.3 이후) 부터는 SOA 레코드의  2차 네임 서버와 관련된 data 설정을 시작하는  여는 괄호 " ( " 는
꼭 SOA 레코드의 첫행의 마지막에 위치 해야 된다. 다른 곳에 위치 할 겨우 bind 9에서 error을 발생시킬 수 있다.

20010504               ; serial
zone 파일의 버젼을 의미한다. 보통 zone파일을 수정하거나 생성한 날을 숫자로 설정한다.
2차 네임  서버는 정기적으로 1차 네임 서버의 이 값을 확인하고 2차 네임 서버의 사본을 나타내는 일련 번호보다 크면
1차 네임 서버로 부터 zone파일을 전송해서 2차 네임 서버 정보를 갱신한다.
즉 1차 네임 서버의 정보가 갱신 되었는지를 2차 네임 서버는 이 값을 통해서 확인한다.

10800                  ; refresh
2차 네임 서버가 1차 네임 서버의 갱신 내용을 확인하기 위해 주기적으로 체크하는 시간을 초(s)로 설정한다.

3600                   ; retry
2차 네임 서버가 refresh값에 의해 1차 네임 서버로 접속시도 때 1차 서버의 문제가 접속을 못한 경우 다시 접속 시도할
시간을 설정한다. (예 : 1차 네임 서버의 정전, 네트웍 과부하 등)


3600000                ; expire
2차 네임 서버가 1차 네임 서버의 정보를 얼마나 오랫동안 신임 할 것인가를 설정한다.
만약 1차 네임 서버가 오랫동안 다운 된다거나 시스템 파괴로 인해 2차 네임 서버가 1차 네임 서버에 접속할 수 없을 때
전에 백어 받아온 1차 네임 서버 정보를 이 값이 초과 할때 까지 신임한다.
루트맨의 설정은 1000일(3년)동안 1차 네임 서버가 소식이 없더라도 그 전에 백업 받아온 파일로 2차 네임서버를 운영하라는것이다. 보통 한달 정도를 설정해서 쓴다.
즉 위의 설정값이 초과하면 2차 네임 서버는 자신이 가지고 있는 1차 네임 서버 정보를 파기한다.  
루트맨이 3년으로 설정한 것은 저의 특이한 성격 때문에 설정한 값으로 말도 않되는 값이기 때문에 따라 하는 사람이 없기를 바란다..  저처럼 특이한 성격의 소유자라면 상관 없지만.


43200                  ; mininum
TTL 값 설정 부분이다. TTL 설명을 참고

::NS 레코드의 데이타 설정
NS 레코드는 해당 호스트의 네임서버 호스트를 지정하는 레코드이다.
루트맨의 네임 서버 호스트는 ns1.rootman.co.kr. 이다.

rootman.co.kr.                 IN                NS                 ns1.rootman.co.kr

::HINFO 레코드의 데이타 설정

HINFO 레코드는 시스템의 정보를 제공하기 위해 사용하느 레코드이다.

rootman.co.kr.                 IN                HINFO                "Inter Pentium" "RedHat"
HINFO 레코드의 데이터 부분인 문자열은 사용자 마음대로 설정하면 된다.

::A 레코드의 데이터 설정
A 레코드는 host_name의 IP 주소를 지정하는 레코드이다.

linux.rootman.co.kr.           IN                 A                  203.241.205.91
rootman.co.kr의 서브 도메인인 linux.rootman.co.kr의 IP 주소를 203.241.205.91로 지정했다.
A 레코드로 하나의 호스트에 대해서 여러개의 IP 주소를 지정할 수도 있다.
예를 들어 호스트 linux.rootoman.co.kr 에 대해 zone 파일에서 A 레코드로 203.241.205.91 과 203.241.205.92 로 설정했을 경우 클라이언트에서 linux.rootman.co.kr 로 접근 시도할 때 클라이언트는 IP 주소 203.241.205.91 과 203.241.205.92 를 랜덤으로 접속하게 된다. 즉 사용자가 상황에 따라 203.241.205.91에 접속될 수도 있고 203.241.205.92에 접속될 수도 있다.
이러한 설정은 방문자수가 많은 웹 사이트에서 부하를 줄이기 위해 종종 사용하는 방법이다.
실예로
www.daum.net은 총 14개의 IP로 랜덤하게 접근하도록 설정되어 있다.

::MX 레코드의 데어터 설정
MX 레코드는 Mail Exchange 설정을 해준다.
host_name에 해당하는 주소로 오는 메일을 다른 호스트로 exchange 한다.
실제로는 이 설정만으로는 Mail Exchange를 완벽하게 할 수 없다.
실제 메일이 들어오는 서버를 큐잉 서버로 만들어야 되고 MX 레코드에 의해 설정된 메일의 최종 도착지에서는 메일 수신
자를 설정해야 되는데 이에 대한 자세한 설명은 sendmail 강좌중에 독립 메일 서버 만들기를 참고하기를 바란다.
host_name에 해당하는 IP 주소와 Mail Exchange 될 호스트의 IP 주소가 같을 경우 이 설정을 사용하지 않도록 한다.  
가끔 쓸데없이 같은 IP 주소에 mail 호스트를 설정하고 MX 레코드로 지정해 주는 분들이 있는데 이런 설정은 시스템에
아무런 도움도 주지 못한다.  zone 파일을 최대한 줄일수 있는것이 시스템 리소스를 절약하는 방법이다.

::CNAME 레코드의 데이터 설정
CNAME 레코드는 host_name에 대한 alias 기능을 한다.

linux.rootman.co.kr.              IN                  A                      203.241.205.91
ftp.rootman.co.kr.                IN                  CNAME                  linux.rootman.co.kr.


위의 경우는 linux.rootman.co.kr. 이라는 호스트에 A 레코드를 이용하여 IP 주소 203.241.205.91을 설정하고 ftp.rootman.co.kr은 A 레코드가 아닌 CNAME 레코드로 linux.rootman.co.kr로 alias 설정을 한 것이다.
쉽게 생각하면
ftp.rootman.co.kr을 linux.rootman.co.kr에 링크를 시켰다고 생각하면 된다.
물론 CNAME 레코드 부분을 A 레코드로 바꾸고 IP 주소를 지정해도 똑같은 효과를 줄 수 있다.

제가 많은 네임서버를 수정해 주면서 느낀 것인데 Inverse Domain을 보유하고 있지 않으면서도 Inverse Domain을 설정하고reserve zone 파일을 설정한 경우를 많이 보았다. 이유를 물어 보니 남들이 설정하니까 설정했다고 말하는 사람이 대부분이었다. 항상 얘기하는 것이지만 네임 서버 뿐만이 아니라 리눅스에서의 모든 설정들은 남들이 설정한 것을 그냥 아무 생각없이 따라 하면 절대 리눅스에 대해서 깊이 알지 못할 것이다.
왜 그런 설정들이 필요한 것인지 .. 또 이런 설정들이 본인의 시스템에 필요한 것인지를 알고 설정했으면 한다. 제가 바로 설명을 시작하지 않고 이런 얘기를 따분하게 늘어 놓는 이유는 네임서버를 설정함에 있어서 Inverse Domain을 운영할 권한이
없는 시스템에서 Inverse Domain을 설정한 경우를 너무 많이 보았고 지금도 제 글을 읽고 바로 이해하지 못하고 쓸데없이 시스템에 Inverse Domain에 대한 설정을 하는 분들이 분명히 있을 것이기 때문이다.
루트맨을 이용하는 방문자들만은 리눅스를 운영함에 있어서 올바른 이해를 가지고 서버를 운영했으면 하는 바램이다.
물론 저도 아직까지 실수 투성이 운영자이다.

Reverse Mapping이란 무엇인가?
우리가 흔히 생각하는 네임서버는 Forward Zone 기능을 하는 네임서버를 말한다. 즉 도메인을 IP 주소로 변경해 주는 네임 서버를 말하는데 Reverse Zone은 Forward Zone과 반대로 IP 주소를 도메인으로 변경하는 역활을 한다.
특정 도메인을 운영할 목적으로 네임서버를 설정할 때 Reverse Mapping에 대한 설정 부분은 필수 조건은 아니다. 분명히 말해서 도메인의 소유권과 Inverse Domain과는 아무런 상관이 없다. Inverse Domain은 도메인을 신청할 때 받는 것이 아니라
ISP로 부터 IP주소를 부여 받을 때 같이 부여 받는 것이다. 학교에서 아이피를 부여 받아 사용하는 사용자는 학교 전산실에서 관리하는 C클래스 주소에 대한 Inverse Domain을 보유하고 설정하기 때문에 reverse zone을 설정할 필요가 없다.
ISP 업체로 부터 몇개의 도메인을 부여받아 사용하는 경우에도 대부분 reverse zone을 설정할 필요가 없지만 ISP 업체에 문의해 보기 바란다.

DNS 의 Cache Poisoning 취약점

■ DNS 의 Cache Poisoning 취약점

   DNS 프로토콜에 Cache Poisoning 취약점으로 공격자는 취약한 DNS 를 사용하는 시스템에 조

   작된 DNS 쿼리를 전송하여 캐쉬의 정보를 변경, 정상적인 사이트에 접속 시 다른 사이트의 ip로

   변조시키는 방법입니다.

 

■ 대상

   DNS 프로토콜이 적용된 소프트웨어

 

■ 취약점 내용

   공격자는 조작된 DNS 쿼리를 다량으로 전달하여 DNS 캐쉬서버의 내용을 임의로 변경할 수 있습

   니다. 요청한 주소의 원래 주소가 아닌 공격자가 지정한 주소로 변경하여 캐쉬를 변경할 수 있으

   므로 악성코드가 설치된 임의의 주소 등으로 변경이 가능합니다.
  

  이 취약점은 특정 DNS 소프트웨어에 한정되지 않고 DNS 프로토콜을 따르는 모든 소프트웨어에

  영향을 줍니다. DNS(Domain Name System)는 인터넷 인프라의 중요한 요소로 호스트 이름을 IP

  주소로 변경해 주거나 또는 반대의 역할을 수행합니다. 공격자는 조작된 DNS 정보를 전달하여 조

  작된 DNS 정보가 캐쉬 네임서버에 기록될 수 있도록 합니다. 이 공격기법은 Cache Poisoning 으

  로 불리며 다음과 같은 경우에 이번 취약점 영향을 받을 수 있습니다.

 

   DNS 프로토콜은 Transaction ID 라는 16비트의 필드를 가지고 있습니다. 쿼리 요청시 이 ID 번호

  가 임의로 선택되어 지는것을 예측하여 캐쉬 조작이 가능하고, ID 값은 32,768 개의 값이 존재하

  여 추측하기 힘들지만 취약점을 내포한 DNS 의 경우는 이보다 더 작은 번호로 예측하여 공격시도

  가 가능해 집니다.
  

  또한, 요청된 쿼리에 대해 응답되는 쿼리는 같은 소스포트 번호를 사용하여 스푸핑이 더욱 쉽게

  가능해 집니다. 요청한 DNS 쿼리에 대해 응답을 주는경우 출발지와 목적지 포트가 동일하고 트랜

  젝션 ID 까지 같은 경우는, 올바른 것으로 판단되어 캐쉬에 잘못된 정보를 기록할 수 있게 됩니다.

 

  현재 이 취약점의 공격코드가 7/24일(한국시간) 공개되어 각별한 주의가 필요합니다.

 

■ 취약점 확인방법

  - 다음 명령 실행
    $dig @localhost +short porttest.dns-oarc.net TXT 또는 아래와 같이 IP로 조회
    $dig @해당서버IP +short porttest.dns-oarc.net TXT

 

  - 취약한 경우 응답 내용
     porttest.y.x.w.v.u.t.s.r.q.p.o.n.m.l.k.j.i.h.g.f.e.d.c.b.a.pt.dns-oarc.net.
     "해당서버IP is POOR: 26 queries in 3.6 seconds from 1 ports with std dev 0"  

  - 취약하지 않은경우 DNS 확인 결과
     z.y.x.w.v.u.t.s.r.q.p.o.n.m.l.k.j.i.h.g.f.e.d.c.b.a.pt.dns-oarc.net.
     "IP-of-GOOD is GOOD: 26 queries in 2.0 seconds from 26 ports with std dev 17685.51"
 
■ 패치방법

   - 업그레이드

    캐시 DNS 서버로 사용되는 시스템을 운영 중이라면, 패치가 된 버전으로 업그레이드 합니다.
    패치버전: BIND 9.3.5-p1, BIND 9.4.2-p1, BIND 9.5.0-p1

   - 업그레이드 외에 recursive query 제한
    
     $ vi /etc/named.conf

      acl xxx { 127.0.0.1; 해당서버IP; };

      options { version "unknown";
       .
       .
       .
      allow-recursion { xxx; };
      };
 
       acl 리스트에 있는 IP에만 recursive query 허용하도록 설정합니다.


■ windows OS 사용자의 경우 아래 URL을 참조하여 해당 DNS취약점 패치를 업그레이드 하시기

   바랍니다.

   - 마이크로소프트
     http://www.microsoft.com/korea/technet/security/bulletin/ms08-037.mspx
   - ISC BIND
     http://www.isc.org/index.pl?/sw/bind/bind-security.php

 

■ 언급되지 않은 소프트웨어는 사용하는 해당 DNS의 확인 후 취약점 여부를 반드시 확인할 것을

    권고합니다.

 

■ 참고정보

- CVE 정보 : CVE-2008-1447
http://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2008-1447
- US-CERT 취약점 노트, VU#800113
http://www.kb.cert.org/vuls/id/800113

DNS 포워더 설정

DNS 포워더 설정

포워더 설정법

options {

forwarders { 203.255.112.34; 203.255.117.34; };

도메인 질의에 대한 포워딩

1) 캐시 데이터베이스에 있다면 이 정보를 대답한다.

2) 캐시에 없으면, 네임서버는 질의를 포워더에 보내고 대답을 기다린다.

3) 응답이 오지 않으면, 정상적인 동작을 다시 개시해 원격서버에 접속하게 된다.

 

options {

forwarders { 168.126.63.1; };

forward only;

도메인 질의에 대한 포워딩

1) 캐시 데이터베이스에 있다면 이 정보를 대답한다.

2) 캐시에 없으면, 네임서버는 질의를 포워더에 보내고 대답을 기다린다.

3) 응답이 오지 않으면, 응답을 하지 못한다.

 

 

4.7.2  영역포워드 설정법 (BIND 8.2부터, BIND 9.1.0부터)

1) yejin.pe.kr사이트만 정상적으로 레졸루션 되지 않을시 우선조치

해당 사이트 질의시 다른 네임서버에게 포워드하여 해당 네임서버가 응답하도록함.

zone " yejin.pe.kr " IN {
type forward ;
forwarders { 168.126.63.1; };
forward only ;
};

 

2) Yahoo.com등 특정사이트가 접속이 안될때 -  Name:    www.yahoo.akadns.net

네임서버에서 yahoo의 네임서버인 akaff 찾을땐 특정 IP로 포워드 한다.

Forward하는법.

zone "akadns.net" IN {
        type forward ;
        forwarders { 65.203.234.27; 193.45.1.103; 63.209.170.136; 80.67.67.182; 63.241.73.214; 206.132.100.108; };
        forward only ;
};

 

3) 설정 파일 전체에 영향을 미치는 options구문속의 forwarder설정을 무력화시키기.

   로컬에 있는 도메인을 forwarder인 외부에 질의하게 되는 부분을 해결.

options {

type forward ;
forwarders { 203.255.112.34; 203.255.117.34; };

zone " yejin.pe.kr " IN {
type forward ;
forwarders { };
};

xferlog 의 각각의 항목

출처 : 어드민플레이

 

간단하게나마 xferlog 의 각각의 항목에 대해 조사해봤습니다.

Xferlog형식 ->  [current-time][transfer-time][remote-host][file-size][filename][transfer-type][special-action-flag][direction][access-mode][username]
[ser-vice-name][authentication-method][authenticated-user-id][completion-status]


아래의 로그가 고객이 index.html 파일을 지운 흔적이며 간단하게 분석을 하자면 아래와 같습니다.

Mon May  9 23:05:55 2005 0 222.100.7.122 740 /home3/speechkorea/public_html/index.html a _ d r speechkorea FTP 0 * c



(1) Mon May  9 23:05:55 2005 0 222.100.7.122  -> 접근 날짜와 시간, 그리고  접속 IP 입니다.

(2) 740 ->파일사이즈를 의미합니다.

(3) /home3/speechkorea/public_html/index.html -> 작업한 파일명을 의미합니다.

(4) a -> ascii mode 를 의미하며 b가 나올수도 있는데  b는 binary 를 의미합니다.

(5) _ -> 아무런 action이 발생하지 않은 것을 의미하며
기타로 올수 있는 항목은 아래와 같습니다.
C는  file 은 압축되어져 있는 것을 의미 
U 는file은 압축이 되어 져있지 않은것을의미
      T  는file 이  tar로 묶여져 있는 것을 의미합니다.

(6) d -> 이부분이 고객이 파일을 지운 것을 알수 있는 부분입니다. Delete 의 앞자 d 입니다.
기타로 올수 있는 항목은 아래와 같습니다
o 는 파일을 받을 때 ( outgoing 의 약자 )
i 는 파일을 올릴 때 나올수 있습니다. (incoming 의 약자)

(7) r -> 사용자가 어떤방식으로 접근했는지 알수 있는부분으로 r 은 real 의 약자로 인증된 사용자란 뜻입니다.
기타로 올수 있는 항목은 아래와 같습니다
a ->  anonymous 의 약자로 익명유저를 의미

(8) speechkorea -> 고객이 로그인한 ID 를 의미합니다.

(9) ftp -> man 페이지를 보면 발생되어지는 service 이름이며 보통은 FTP 라고 나와있습니다.

(10) 0 -> man 페이지를 보면 인증에 사용된 방법이라고 나와있습니다.
기타로 올수 있는 항목은 아래와 같습니다
1 -> RFC931 Authentication 이 있다고 합니다.
(11) * -> 이부분은 authenticated-user-id 부분으로 인증 방법에 의해 돌려지는 user id 라고 합니다. * 은 인증되어진 사용자 id 가 이용될수 없으면 사용된다고 man페이지에 명시되어 있습니다.

(12) c -> 전송상태를 나타내며 c 는 complete transfer 의 약자이며

기타로 올수 있는 항목은 아래와 같습니다

I  -> incompete transfer (불완전한 전송) 를 의미합니다.

-> 정리하고 나니 man 페이지 해석한 수준밖에 되지 않네요..  그래도 한번쯤 읽어보시면 도움이 될 듯 싶습니다. ^^

PHP 언어디코딩

php에서 UTF-8을 EUC-KR로 혹은 base64를 euc-kr 이런걸로 바꿔야할 경우가 종종있습니다.

iconv로 바꾸면 된다고들 하시는데 iconv는 짧은 단어만 바꿀때는 강력한데 길어지면 힘들어하더군요..

iconv("UTF-8", "EUC-KR", "동수야놀자"); //euc-kr
mb_convert_encoding("동수야 놀자","EUC-KR", "UTF-8"); //euc-kr

위에 두 함수 둘다 같은 결과를 뱉어냅니다..

그래도 좀 더 길어진 문자열이라면 상황은 다르죠... iconv는 결과를 못내줍니다.

웹메일의 본문 사용시에 mb_conver_encoding() 함수를 써봤는데 유용하더라구요..

mb_convert_encoding()함수는 변수도 " " 을 붙여합니다.

그다음 소개 해드릴건 mb_detect_encoding() 함수인데 이 함수는 현재 받아온 인자값이

어떤타입의 인코딩으로 되어있는지 보여주는겁니다.

예제) 아래 소스는 utf-8일경우 euc-kr로 바꾸는 소스입니다.

  if('utf-8' == strtolower(mb_detect_encoding($fromdecode, 'euc-kr, utf-8')))
    {
     $From = mb_convert_encoding("$fromdecode","EUC-KR", "UTF-8");
    }

php.ini 옵션 한글설명

;;;;;;;;;;;;;;;;;;;;;;;
; 이 파일에 대해
;;;;;;;;;;;;;;;;;;;;;;;
;
; 이것은 추천 되는 설정을 기술한 PHP 4 스타일의 php.ini-dist 파일 이다.
; 이 안에는 PHP 를 보다 유용하고 안전하게 해
; 그를 지원하기 위한 약간 비표준의 설정이 있다.
;
; 이러한 설정을 실시하는 일에 의해, 몇개의 어플리케이션에 대해
; PHP 의 호환성이 없어지거나 또 개발이 곤란하게 되는 일도 있을 지도 모르다.
;
; 그런데도 이 파일의 설정을 추천하고 싶다.
;
; 표준 설정으로부터 변경하는 곳은 모두 자세하게 설명하고 있으므로,
; 각각의 엔트리에 대해서 채용해야할 것인가 어떤가를 심사숙고해 주었으면 한다.
;
; php.ini 파일에 관한 일반적인 설정에 대해서는
; PHP 의 배포물에 포함되어 있는 php.ini-dist 파일을 참조.
;
; 이 파일은 php.ini-dist 파일에 비해, 몇개의 지시문의 값이 차이가 난다.
; 이것은 퍼포먼스를 개선하는 반면 이미 동작 하고 있던 PHP3 베이스의
; 표준과는 호환성이 없어질 수도 있다.
; 이 파일을 채용한다면, 뭐가 바뀌었는지를 제대로 인식해,
; 거기에 따라서 스크립트를 고쳐 쓰는 것이 필요하다.
;
; - register_globals = Off         [시큐리티, 퍼포먼스]
;
;   입력 데이터(POST, GET, 쿠키, 환경 변수 그 외의 서버 변수)에 관해서
;   이미 글로벌 변수로서 등록하지 않게 한다.
;   $foo 대신에 $_REQUEST["foo"] 를 사용할 필요가 있다.
;   (request, namely, POST, GET, cookie 변수도 마찬가지)
;   특정의 $_GET["foo"], $_POST["foo"], $_COOKIE["foo"],
;   $_FILES["foo"] 의 형식으로 지정해도 괜찮다.
;   게다가 import_request_variables()도 참조하면 좋을 것이다.
;
;   주의:register_globals 는 시큐리티 관련의 버그를 유발할 가능성이 있다
;   모아 두어 다음의 버젼의 PHP 에서는 추천 되지 않게 되고 있다.
;   (즉, 디폴트로 Off 가 될 방향)
;   상세한 것에 대하여는
;   http://php.net/manual/en/security.registerglobals.php 를 참조.
;
; - display_errors = Off           [시큐리티]
;
;   이 지시문을 off 로 하면 스크립트의 실행중에 에러가 발생 하여도
;   스크립트의 출력으로서의 에러 표시를 하지 않게 되어
;   접속 사용자에게 에러가 발생한것을 모르게 한다.
;   에러가 발생하면 에러 메세지안에 그 스크립트나 웹서버,
;   데이터 베이스 서버 등에 관한 정보가 표출 되는 일이 있어 문제가 발생 할 수 있다.
;   실제 운영중이 환경에서는 이 지시문을 off 로 하는 것이 좋다.
;
; - log_errors = On                [시큐리티]
;
;   이 지시문은 위의 display_errors 를 보완한다.
;   스크립트의 실행중에 발생해 모든 에러는 로그로 남게 된다.
;   (전형적으로는 서버의 에러 로그에 저장 되지만, 그 이외의 방법도 있다)
;   (위의 설정과 함께 다루는 것으로 접속 사용자에 정보를 표출될 일이 없이
;   장해에 관한 상세 정보를 얻을 수가 있다. )
;  
; - output_buffering = 4096        [퍼포먼스]
;
;   출력 버퍼를 4KB 로 설정한다.
;   출력 버퍼링을 유효하게 하면 일반적으로는
;   기입 회수나 가끔 패킷의 송출 횟수가 줄어들어 퍼포먼스의 향상으로 연결된다.
;   이 지시문에 의해 어느 정도 퍼포먼스를 향상 시키지만
;   사용하고 있는 웹서버나 스크립트에 크게 의존한다.
;
; - register_argc_argv = Off       [퍼포먼스]
;
;   $argv 및 $argc 글로벌 변수의 등록을 하지 않는다.
;
; - magic_quotes_gpc = Off         [퍼포먼스]
;
;   입력 데이터가 backslash로 이스케이프 되지 않게 되기 때문에
;   이 SQL을 데이타베이스에 보낼 수가 없게 된다.
;   이 설정으로 데이타베이스에 보내고 싶은 경우는
;   그때마다 addslashes() 함수를 사용하도록 한다.
;
; - variables_order = "GPCS"       [퍼포먼스]
;
;   환경 변수를 $HTTP_ENV_VARS[] 에 등록 하지 않게 한다.
;   환경 변수에 사용하려면 getenv()를 사용하도록 한다.
;
; - error_reporting = E_ALL        [코드의 정리, 시큐리티]
;
;   디폴트에서는 PHP 는 E_NOTICE 형의 에러를 억제한다.
;   이러한 에러 메세지는 중대하지 않는 에러에 대해서도 표출 되지만
; 그것들은 보다 큰 문제의 징조일 수도 있다.
;
; - allow_call_time_pass_reference = Off     [코드의 정리]
;
;   함수 사용시에, 변수를 강제적으로 참조 하는 것을 금지한다.
;   이것을 PHP4 스타일로 실시하기 위해서는, 함수 정의 시에 관련하는 인수를 참조 하도록 한다.

;;;;;;;;;;;;;;;;;;;;
; 언어 옵션
;;;;;;;;;;;;;;;;;;;;

; Apache 상에서 PHP 의 스크립트 언어 엔진을 유효하게 한다
engine = On

; <? 태그의 사용을 허가한다.
; 허가하지 않는 경우는 <?php 와 <!-- script 태그만 인식되고 <? 태그는 인식하지 않는다.
short_open_tag = On

; ASP 스타일의 <% %> 태그를 허가한다.
asp_tags = Off

; 부동 소수점을 표시할 때의 유효 자리수를 설정한다.
precision    =  14

; 강제적으로 2000 년 문제를 대응하게 한다.
; (대응하고 있지 않는 브라우저의 경우는 문제를 일으킨다)
y2k_compliance = Off

; 출력 버퍼링을 사용하면 PHP 의 출력 층에 있어서의 몇 안 되는 지연되는 곳에
; 바이 부분을 송출한 다음에도(쿠키 포함) 헤더행을 송출할 수 있다.
; 실행시에 출력 버퍼링용 함수를 콜 하는 것으로, 출력 버퍼링을 유효하게 할 수가 있다.
; 또 이 지시문을 On 으로 하면, 모든 파일에 대해 출력 버퍼링이 유효가 된다.
; 버퍼를 특정의 사이즈에 제한하고 싶은 경우는
; 이 지시문의 값으로 'On'대신에 최대의 바이트수를(output_buffering=4096 와 같이) 설정한다.
output_buffering = 4096

; implicit_flush를 On 으로 설정하면 출력 층에 대해 각 출력 블록마다 자동적으로 플래시를 하게 된다.
; 이것은 즉, print(), echo() 및 각 HTML 블록의 뒤에 PHP 함수의 flush()를 부르는 것과 같은 내용이다.
; 이 옵션을 유효하게 하면 퍼포먼스의 문제와 밀접하게 관계되므로,
; 일반적으로는 디버그 용도만의 사용에 한정해야 할 것이다.
implicit_flush = Off

; 함수 사용 시에, 변수를 강제적으로 참조 하는 것을 금지한다.
; 이것을 PHP4 스타일로 실시하기 위해서는, 함수 정의 시에 관련하는 인수를 참조 하도록 한다.
allow_call_time_pass_reference = Off

;
; 세이프 모드
;
safe_mode = Off

; 세이프 모드의 디폴트에서는 파일을 오픈할 때에 UID 를 비교한다.
; 이 제한을 풀고 싶은 경우는 safe_mode_gid 를 On 로 한다.
safe_mode_gid = Off

; safe_mode 가 On 의 경우 파일을
; 이 디렉토리 및 그 하위로부터 include 하는 경우는 UID/GID 의 체크가 스킵 된다.
; (이러한 디렉토리는 include_path 에 포함되도록 하거나
; 또는 include 시에 절대 경로를 사용해야 한다.)
safe_mode_include_dir =

; safe_mode 가 On 의 경우 exec 관련의 함수를 통해 실행할 수 있는 권한을
; safe_mode_exec_dir 에 있는 실행 파일만으로 설정 한다.
safe_mode_exec_dir =

; open_basedir 이 설정 되었을 경우 모든 파일 조작은
; 해당 디렉토리 및 그 하위 디렉토리로 제한된다.
;open_basedir =

safe_mode_allowed_env_vars = PHP_
safe_mode_protected_env_vars = LD_LIBRARY_PATH

; 이 지시문에서는 특정의 함수를 시큐리티적인 이유로써 사용할 수 없게 할 수 있다.
; 이것은 인수로서 fopen,fwrite 의 , 단락의 리스트로 설정한다.
; 이것은 safe_mode의 On/Off 에 관계없이 항상 유효하게 된다.
disable_functions =

; 문법의 하이라이트 표시할 때의 색의 지정.
; <font color="??????"> 의 것이라면 설정 가능하다.
highlight.string  = #CC0000
highlight.comment = #FF9900
highlight.keyword = #006600
highlight.bg      = #FFFFFF
highlight.default = #0000CC
highlight.html    = #000000

;
; 그 외
;
; PHP 가 해당 서버에 인스톨 되고
; 사용되고 있다는 내용을 알려주거나 알려주지 않도록 설정한다.
expose_php = On

;;;;;;;;;;;;;;;;;;;
; 자원 제한
;;;;;;;;;;;;;;;;;;;
max_execution_time = 30     ;   각 스크립트의 최대 실행 시간을 초단위로
memory_limit = 8M           ;   스크립트 마다의 최대 메모리 소비량


;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
; 에러 핸들링과 로그
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;

; error_reporting 는 비트 필드에서, 지정한 수치까지의 에러가 보고된다.
;
; E_ALL             - 모든 에러와 경고
; E_ERROR           - 치명적인 실행시 에러
; E_WARNING         - 실행시의 경고(치명적이지 않는 것)
; E_PARSE           - 컴파일시의 퍼스 에러
; E_NOTICE          - 실행시의 공지 사항(이러한 경고는 작성한 코드의 버그
;                     에 기인하는 것이 많지만, 고의의 경우도 있다(즉,
;                     초기화되어 있지 않은 변수를 사용하거나 자동적으로 공문자열
;                     에 초기화된다고 하는 사실에 의존했을 경우).
; E_CORE_ERROR      - PHP 의 초기화시에 발생한 치명적 에러
; E_CORE_WARNING    - PHP 의 초기화시에 발생한 치명적이지 않은 경고
; E_COMPILE_ERROR   - 치명적인 컴파일시의 에러
; E_COMPILE_WARNING - 컴파일시의 경고(치명적이지 않는 것)
; E_USER_ERROR      - 유저가 생성한 에러 메세지
; E_USER_WARNING    - 유저가 생성한 경고 메세지
; E_USER_NOTICE     - 유저가 생성한 통지 메세지
;
; 사용예:
;
;   - 통지를 제외한 모든 에러를 표시한다
;
;error_reporting = E_ALL & ~E_NOTICE
;
;   - 에러만을 표시한다
;
;error_reporting = E_COMPILE_ERROR|E_ERROR|E_CORE_ERROR
;
;   - E_NOTICE 를 제외한 모든 에러를 표시한다
;
error_reporting  =  E_ALL

; 에러를 표시한다. 실제 운영 환경에서는 이 기능은 오프로 해 두고
; error_log 기능을 사용하는 것을 추천한다.
; 이것은 실제 운영 환경에서 display_errors 를 유효하게 해 버리면
; 당신의 웹사이트의 파일 정보나 데이타베이스 schema등의 시큐리티 정보를
; 접속 사용자에게 표출 될 수 있기 때문이다.
display_errors = Off

; display_errors 가 On 의 경우여도 PHP 의 시작시의 에러는 표시되지 않는다.
; 디버그시를 제외해 display_startup_errors 는 Off 인 채로 설정해 두는 것을 추천한다.
display_startup_errors = Off

; 로그 파일에 에러 로그를 기록 한다.
; 전에 얘기 한것과 같이 실제 운영 환경에서는 에러 표시 기능 대신에
; 에러 로그 기능을 사용하는 것을 추천한다.
log_errors = On

; 마지막 에러/경고 메세지를 $php_errormsg 에 저장한다.
track_errors = Off

; 에러 메세지중에 HTML 태그를 넣지 않게 한다.
;html_errors = Off
 
; 에러 메세지의 전에 출력하는 캐릭터 라인
;error_prepend_string = "<font color=ff0000>"

; 에러 메세지의 뒤에 출력하는 캐릭터 라인
;error_append_string = "</font>"

; 지정된 파일에 에러를 기록한다
;error_log = filename

; syslog 에 에러를 기록한다. (NT 에서는 이벤트 로그, Windows 95 에서는 무효)
;error_log = syslog

; 캐릭터 라인에 + 연산자가 사용되고 있으면 경고
warn_plus_overloading = Off

;;;;;;;;;;;;;;;;;
; 데이터·핸들링
;;;;;;;;;;;;;;;;;
;
; 주의 - track_vars 는 PHP 4.0.3 현재는 *항상* 유효하다.

;arg_separator.output = "&amp;"

; 입력 URL 를 퍼스 해 변수로 하기 위해서 PHP 로 사용되는 단락 문자의 리스트.
;arg_separator.input = ";&"

; 이 지시문은 PHP 가 등록하는 GET, POST, Cookie 환경 변수
; (순서에 G, P, C, E, S, 자주 EGPCS 나 GPC 등으로 불린다)에 있어서의 순서를 규정한다.
; 등록은 왼쪽에서 오른쪽을 향해 행해져 새로운 값은 낡은 값을 덮어 쓴다.
variables_order = "GPCS"

; EGPCS 변수를 글로벌 변수로서 등록할지 말지를 설정한다.
;
; register_globals 를 Off 한 채로도 움직이는 PHP 스크립트를 쓰도록 평소부터 노력해 두면 좋다.
; 코드의 불편함을 그다지 자주 생각하지 않은 채 변수를 글로벌로서 액세스를 가능하게 하면
; 잠재적으로 세큐리티를 발생시킬 수 있다.
register_globals = Off

; argc 및 argv 변수
; (GET 의 정보에 포함될 가능성이 있다.)를 선언할지 말지를 규정한다.
; 이러한 변수를 사용하지 않으면 퍼포먼스를 개선한다.
register_argc_argv = Off

; PHP 가 받아들이는 일을 할 수 있는 POST 데이터의 최대 사이즈
post_max_size = 8M

; 이 지시문은 추천 되지 않는다. 대신에 variables_order 를 사용하라.
gpc_order = "GPC"

; Magic quotes
;

; GET/POST/Cookie 의 입력 데이터에 관해서 특수 문자를 이스케이프
magic_quotes_gpc = Off

; 실행시에 생성된 데이터
; (즉 SQL 로부터의 데이터, exec()로부터 등)에 관한 특수 문자 이스케이프
magic_quotes_runtime = Off   

; sybase 스타일의 특수 문자 이스케이프( '를 \' 대신에 '' 로 변환한다.)
magic_quotes_sybase = Off

; PHP 문서의 전후에 파일을 자동적으로 추가한다.
auto_prepend_file =
auto_append_file =

; PHP 의 4.0b4 현재의 디폴트에서는,
; Content-type: 헤더로 항상 문자 인코딩을 출력한다.
; charset 의 송신을 시키고 싶지 않으면, 설정값을 비운다.
;
; 디폴트는 text/html 이다.
default_mimetype = "text/html"
;default_charset = "iso-8859-1"

; 항상 $HTTP_RAW_POST_DATA 변수를 발생시킨다
;always_populate_raw_post_data = On

;;;;;;;;;;;;;;;;;;;;;;;;;
; 패스와 디렉토리
;;;;;;;;;;;;;;;;;;;;;;;;;

; UNIX: "/패스1:/패스 2" 
;include_path = ". :/php/includes"
;
; Windows: "\패스1;\패스 2"
;include_path = ". ;c:\php\includes"

; PHP 페이지의 root 디렉토리
doc_root =

; /~username 로 액세스 되었을 경우에 PHP 가 스크립트를 실행한다
user_dir =

; 확장 모듈이 있는 디렉토리
extension_dir = . /

; dl() 함수를 유효하게 할지를 설정한다.
; dl() 함수는 IIS 나 Zeus 라고 하는
; 멀티 thread 서버에서는 올바르게 동작 하지 않고 자동적으로 무효가 된다.
enable_dl = On

;;;;;;;;;;;;;;;;
; 파일의 업 로드
;;;;;;;;;;;;;;;;

; 파일의 업로드를 허가할지를 설정한다.
file_uploads = On

; HTTP 로 파일을 업 로드할 때의 임시 작업 디렉토리
; (지정되지 않는 경우는 시스템의 디폴트(TEMP 디렉토리)가 사용된다)
;upload_tmp_dir =

; 업 로드하려는 파일의 최대 사이즈
upload_max_filesize = 2M

;;;;;;;;;;;;;;;;;;
; Fopen 의 설정
;;;;;;;;;;;;;;;;;;

; URL(http:// 나 ftp:// )을 파일로서 취급할지를 결정한다
allow_url_fopen = On

; anonymous ftp 의 패스워드 지정(당신의 메일 주소)
;from="john@doe.com"

;;;;;;;;;;;;;;;;;;;;;;
; 동적인 확장 기능
;;;;;;;;;;;;;;;;;;;;;;
;
;   자동적으로 로드 되는 확장 기능을 사용하고 싶은 경우는 아래에서 지정한다:
;
;   extension=modulename.extension
;
; 예를 들어, Windows 라면:
;
;   extension=msql.dll
;
; 혹은, UNIX 라면,
;
;   extension=msql.so
;
;   지정하는 것은 모듈명에만 해야 한다.
;   여기에서는 디렉토리명을 지정할 필요는 없다.
;   확장 기능의 장소는 extension_dir 디렉토리로 지정한다.
;
; Windows 의 확장 기능
;   주의:MySQL 와 ODBC 의 기능은 표준으로 짜넣어지고 있으므로, dll 는 불필요하다.
;
;extension=php_bz2.dll
;extension=php_ctype.dll
;extension=php_cpdf.dll
;extension=php_curl.dll
;extension=php_cybercash.dll
;extension=php_db.dll
;extension=php_dba.dll
;extension=php_dbase.dll
;extension=php_dbx.dll
;extension=php_domxml.dll
;extension=php_dotnet.dll
;extension=php_exif.dll
;extension=php_fbsql.dll
;extension=php_fdf.dll
;extension=php_filepro.dll
;extension=php_gd.dll
;extension=php_gettext.dll
;extension=php_hyperwave.dll
;extension=php_iconv.dll
;extension=php_ifx.dll
;extension=php_iisfunc.dll
;extension=php_imap.dll
;extension=php_ingres.dll
;extension=php_interbase.dll
;extension=php_java.dll
;extension=php_ldap.dll
;extension=php_mbstring.dll
;extension=php_mcrypt.dll
;extension=php_mhash.dll
;extension=php_ming.dll
;extension=php_mssql.dll
;extension=php_oci8.dll
;extension=php_openssl.dll
;extension=php_oracle.dll
;extension=php_overload.dll
;extension=php_pdf.dll
;extension=php_pgsql.dll
;extension=php_printer.dll
;extension=php_shmop.dll
;extension=php_snmp.dll
;extension=php_sockets.dll
;extension=php_sybase_ct.dll
;extension=php_w32api.dll
;extension=php_xslt.dll
;extension=php_yaz.dll
;extension=php_zlib.dll

## 에러 메세지 관련

error_log String

String 은 스크립트에 의해(PHP 자체가 아닌) 생성된 오류들을 기록하는 파일을 지정한다.
만약 특정값 syslog 가 사용되었다면 오류들은 대신 시스템의 로거(logger)로 보내진다.

error_reporting Integer

오류 롷고 레벨을 설정한다.
매개변수인 Integer 는 하나 또는 다음 펴에 있는 비트값들의 합을 나타내는 정수이다.

예를 들어, 만약 일반 오류들, 일반 경고들 그리고 스타일과 연관된 경고들만 원한다면
Integer 값이 11이라고 계산을 할 수 있다. (즉, 1+2+8)

기본값은 7이다. 즉, 일반 오류, 일반 경고 그리고 파서 오류 등이 보고된다.

비트값 설명
1 일반 오류
2 일반 경고
4 파서 오류
8 스타일 관련 경고(심각하지 않은)


display_errors Boolean

오류들이 HTML 출력 형식으로 화면상에 인쇄되어야 하는지 여부를 결정한다.
만약 False로 설정되어 있다면 PHP로부터 비밀스런 오류 메세지를 브라우저로 보내는 것 대신
어떤 오류 핸들링을 수행할 수 있다.

또한, @으로 시작되는 오류메세지들의 표시를 중지시킬 수도 있다.

error_prepend_string String
error_append_string String

오류 출력할때 사용하는 HTML 스트링 이다.
화면에 표시되는 오류 메세지를 HTML 로 꾸미고 싶을떄 사용한다.

PHP 의 ini_set 명령으로 사용할때는 다음과 같은 형식으로 사용할 수 있다.

<XMP><? ini_set("error_prepend_string", "
PHP 메세지 :: "); ini_set("error_append_string", "
"); // ERROR foreach($test As $aa); ?></XMP>



출력 결과는

에러 표시

와 같이 표현 할 수 있다.

## 전자메일 관련 구성

PHP 는 수많은 메일 엑세스 지원 기능들을 가지고 있다.
약간의 노력만 하면 IMAP(Interactive Mail Access Protocol)과 POP3(Post Office Protocol) 서버에 있는 전자메일을
엑세스하는 프로그램들을 작성할 수 있다.
그 기능들을 API 들을 통해 사용할 수 있지만, 행동을 설정하는 몇 가지 구성 파일 명령어들을 사용할 수도 있다.

SMTP String

이 명령어는 Windows 플랫폼상에 PHP를 설치한 경우에만 적용된다.

여기서 String 은 mail() 함수를 사용하여 메일을 전달하기 위해서 PHP 가 사용하는
SMTP 서버의 DNS 이름이나 IP 주소이다.

사용하는 서버(자신의 컴퓨터)에 SMTP 서버를 설치하였을 경우에는 localhost 를 입력하시고
그렇지 않을 경우에는 각각 사용하는 인터넷 라인의 ISP 업체의 SMTP 서버 주소를 입력합니다.

ISP별 SMTP서버는 다음과 같습니다.

하이텔(Hitel):
smtp.hitel.net

코넷(Kornet):
soback.kornet.net
mail.kornet.net
ppp.kornet.net

천리안(Chollian):
mail.chollian.net 

유니텔(Unitel):
203.241.132.90 

나우누리(Nownuri):
mail.nownuri.net 

아이프리(IFree):
mail.ifree.net 

아이넷(I-net):
mail.nuri.net 

두루넷(Thrunet):
smtp.korea.com 

넷츠고(Netsgo):
netsgo.com 

채널아이(Channel-i):
mail.channeli.net 

신비로(Shinbiro):
mail.shinbiro.com 

엘림넷(Elimnet):
elim.net 

인터피아(Interpia):
pop3.interpia.net 

키스코(Kisco):
203.233.144.1 

미래텔(Miraetel):
miraetel.kornet.nm.kr 

경기넷:
mail.kg21.net 

하나로통신:
mail.hananet.net 

에듀넷(Edunet):
edunet4u.net 

보라넷:
mail.bora.net 

드림라인:
mail.dreamx.net 

해당 되는 ISP 업체가 없거나 해당되지 않을 경우에는 공개 SMTP 서버를 사용하셔도 됩니다.

공개 SMTP 서버:
203.252.32.3
211.40.177.184
211.45.135.11
210.182.173.132
211.32.116.33
210.119.132.13
163.152.3.17
sun.ms98.net 

메일 동작 확인 방법은 간단한 mail() 함수를 사용하는 프로그램을 이용해서 할 수 있습니다.

<XMP><? $to_mail = "메일주소"; $to_title = "제목"; $to_message = "메세지"; $ret = mail($to_mail, $to_title, $to_message); if( $ret ) { echo "메일 전송 성공"; } else { echo "메일 전송 실패"; } ?></XMP>



sendmail_from String

이 명령어는 Windows 플랫폼 상에서 PHP 를 설치한 경우에만 적용된다.

String 은 PHP 스크립트로부터 전달되는 메일에 사용되어야 하는 "From:" 메일 주소를 결정한다.

sendmail_path String

이 명령어는 UNIX 플랫폼 상에서 PHP 를 설치한 경우에만 적용된다.

String 은 시스템상에서 실행할 수 있는 sendmail 의 경로를 결정한다.
일반적으로, sendmail의 위치는 /usr/sbin/sendmail 이나 /usr/lib/sendmail (UNIX 상에서)이지만,
그 밖의 다른 위치에 설치한 경우에는 sendmail의 경로를 지정해야 한다.
sendmail과 유사한 qmail 도 이 명령어로 경로를 지정할 수 있다.

sendmail_path = "/usr/sbin/sendmail -t -i"


## 일반적인 구성

PHP 의 일부 일반 기능 및 내장된 기능들에 영향을 미치는 몇 가지 구성 매게변수들에 대하여 알아보기로 하겠습니다.

auto_append_file String

메인 파일 다음에 자동으로 분석되는 파일 이름을 String 에 지정한다.
이렇게 지정된 파일은 include() 함수로 호출된 것 처럼 포함된다.
특수값인 none 은 자동 추가 기능을 중지 시킨다.
만약 스크립트가 exit() 로 종료된다면 auto-append 작업이 수행되지 않는다.
이 명령어는 특정 웹 사이트에 정형화된 모습과 느낌을 주고자 PHP가 페이지를 생성할 때 유용하다.
이 스크립트는 각 페이지마다 꼬리말을 포함할 때 사용할 수 있다.

<XMP>auto_append_file = "/path/to/script/footer.php"</XMP>



auto_prepend_file String

메인 파일보다 먼저 자동으로 분석되는 파일 이름을 String 에 지정한다.
이렇게 지정된 파일은 include() 함수로 호출된 것 처럼 포함된다.
특수값인 none 은 auto-prepend 기능을 중지 시킨다.

이 명령어는 앞서의 스크립트에서처럼 동일한 종류의 시나리오에서 유용하다.
단지, 차이점이라면 모든 페이지에 표준 머리말을 생성하는 데 사용할 수있다는 점이다.

doc_root String

가상 파일 트리의 루트를 정의하며,
그 루트의 하위에 있는 파일들은 안전 모드에서 실행될때 PHP에 의해서만 서비스된다.
이 매개변수는 빈 값이 아닌 값을 가져야 하며, 그렇지 않은 경우에는 무시된다.

웹 서버의 실제 파일 시스템 트리의 특정한 하위 트리로 PHP를 제한하는 것은
보안상의 관점에서 본다면 매우 차이점이 많다.

engine Boolean

PHP가 아파치 모듈 버전인 경우에만 실제로 유용한 명령어이다.

디렉토리 단위로 또는 가상 서버 기반 단위로 PHP Paser 기능을 켜고 끄는 사이트에서 사용된다.
httpd.conf 파일의 적당한 위치에서 engine 를 On, Off 로 설정하면 PHP는 가능하게 되거나
불가능 하게 된다.

httpd.conf

<XMP> ServerName www.sample.com DocumentRoot /home/sample/public_html php_value engine Off </XMP>



위와 같은 형식으로 사용할 수 있다.

open_basedir String

PHP 스크립트들이 특정한 디렉토리 트리나 디렉토리 트리 세트에 있는 파일들로만
엑세스 하도록 제한하기를 원하는 경우가 있을 것이다.
인수 String 은 엑세스를 허용하는 디렉토리나 디렉토리들의 리스트를 지정한다.
모든 상징적인 링크들이 사라지므로 이러한 제한 사항을 피하기 위해 symlink를 사용하는 것이 불가능하다.

특수값 '.' 은 스크립트가 저장되어 있는 디렉토리가 기본 디렉토리로 사용될 것이라는 의미한다.
Windows 의 경우에 String 에 여러개의 디렉토리들을 입력할때에는
각각의 디렉토리들을 콜론(:)으로 구분한다.
아파치 모듈인 경우, 상위 디렉토리들로부터의 open_basedir 경로는 이제 자동적으로 상속된다.
기본은 모든 파일들이 열리는 것을 허용하는 것이다.

gpc_order String

HTML 서식을 처리하는 PHP 스크립트들은 이러한 서식으로부터 변수들을 엑세스할 수 있다.
서식들은 GET, POST 메소드에 의해 제출될 것이다.
또한, 쿠키들도 변수들을 스크립트로 전달한다.
GET, POST 그리고 쿠키들로부터변수들이 분석되는 순서는 hpc_order 명령에 의해 주어진다.
인수 String 은 G, P 그리고 C 중에서 하나나 둘, 또는 셋 모두의 조합으로 이루어진다.

예를 들어, 만약 gpc_order = GCP 라면 COOKIE 변수와 동일한 이름의 POST 변수는 COOKIE 변수로서
더높은 우선순위를 가지게 되며, POST 변수는 무시된다.
이러한 순서는 GET,POST,COOKIE 변수 분석의 순서를 결정한다.

이 명령의 기본 설정값은 "GPC" 이다.

예를 들어, "GP" 로 설정되는 경우에 PHP는 쿠키들을 완전히 무시하고
어떤 GET 메소드 변수들을 동일한 이름의 POST 메소드 변수들을
동일한 이름의 POST 메소드 변수들로 겹쳐쓰기할 것 이다.

include_path String

require(), include(), fopen_with_path() 함수들이 파일들을 찾는 디렉토리들의 리스트를 지정한다.
대부분의 시스템에서 String 의 형식은 PATH 환경 변수와 유사하다.

즉, UNIX에서는 콜론(:)으로, Windows 에서는 세미콜론(;)으로 디렉토리들을 구분한다.

기본값은 현재 디렉토리를 의미하는 '.' 이다.

UNIX: "/path1:/path2"

include_path = ".:/php/includes"

Windows: "\path1;\path2"

include_path = ".;c:\php\includes"



max_execution_time Integer

파서에 의해 종료되기 전, 스크립트의 작업 허용 최대 시간을 초 단위로 설정한다.
이것은 무한 루프를 돌고 있는 스크립트들에 의해 서버가 다운되는 것을 방지한다.

memory_limit Integer

Integer 인수는 스크립트가 할당할 수 있는 메모리의 최대 용량을 바이트 단위로 설정한다.
이것은 잘못 작성된 스키립트가 서버의 메모리를 모두 잠식하는 것을 방지한다.

short_open_tag Boolean

PHP 스크립트들은 원래 <?php 와 ?> 태그 사이에 들어가지만,
단축 형식인 <? 와 ?> 태그 사이에 입력할 수도 있다.

만약 XML 지원기능을 사용한다면 이 옵션을 Off 로 설정해야 한다.
단축 태그가 XML 파서를 혼동하게 만드므로 XML 지원 기능을 사용하려면
원래의 형식으로만 스크립트를 사용해야 한다.

upload_tmp_dir String

인수 String 은 파일 업로드가 수행될 때 파일들을 저장하는 데 사용되는 임시디렉토리를 지정한다.
이 디렉토리는 사용자 PHP가 어떤 형식으로 수행되든지 간에 기록 가능해야 한다.
PHP 가 아파치 모듈인경우 아파치의 사용자 권한을 상속하며, 일반적으로 nobody 이다.

user_dir String

웹 서버는 일반적으로 각 사용자들이 자신의 홈 디렉토리들 아래에 자신의 웹 페이지들을
유지하는 것을 허용한다. (UNIX인 경우)
인수 String 은 PHP파일들을 위한 사용자의 홈 디렉토리에서 사용되는 디렉토리의 기본이름을 나타낸다.

예를 들어, 홈 디렉토리가 /home/okstart 인 사용자 okstart 가 있다고 가정하자.
만약 String 이 public_html 로 설정되었다면 그 사용자는 개인적인 스크립트들이나 페이지들을
/home/okstart/public_html 아래에 저장할 수있다.

## PHP.INI 위치와 설정방법

PHP.INI 파일은 일반적으로

/etc/php.ini

디렉토리에 존재 하게 됩니다.

PHP 컴파일시

--bindir=/usr/local/php4

라고 지정했다면

/usr/local/php4/etc/php.ini

로 지정 됩니다.

만약 OS 가 Windows 일 경우에는

Windows 디렉토리의 php.ini 가 됩니다.

정확한 php.ini 의 위치를 아는방법은.

<XMP><? phpinfo(); ?></XMP>



를 확인시에 Configuration File (php.ini) Path 을 확인하시면 됩니다.

PHP.INI 설정시에 사용하는 형식은

Integer , String , Boolean , PHP 지정 변수 등이 있습니다.

Integer 은 그냥 정수 형식을 사용하시면 됩니다.
String 은 문자열 형식입니다.

다만 문자열 중간에 빈 값이 들어갈 경우에는 "문자열" 이렇게 " 로 묶어 주셔야 정상작동 합니다.

Boolean 형식은

1, On, True, Yes
0, Off, False, No

으로 표현 됩니다.

참고 도서 :: PROFESSIONAL PHP Programming