RSS구독하기:SUBSCRIBE TO RSS FEED
즐겨찾기추가:ADD FAVORITE
글쓰기:POST
관리자:ADMINISTRATOR
'분류 전체보기'에 해당되는 글 379
2006/09/20  골프를 느껴봐 ~  
2006/09/16  PHP 훑어보기  
2006/09/13  문자열 변환함수 .  
2006/09/13  배열 함수  
2006/09/12  파일시스템함수  
2006/09/12  크레이지 아케이드  
게임  2006/09/20 14:20
2006/09/20 14:20 2006/09/20 14:20
이 글에는 트랙백을 보낼 수 없습니다
Web_developing/PHP  2006/09/16 22:04
출처 블로그 > 행복이네 집
원본 http://blog.naver.com/prebetty79/100028415343

폼변수 다루기

  폼변수

   PHP 스크립트에서 폼 필드 값은 PHP 변수처럼 접근 할수 있다.

   3가지 방법이 있다.

     ex)

          $tireqty                                  //짦은 스타일

          $_POST['tireqty']                   // 중간 스타일

          $HTTP_POST_VARS['tireqty']  // 긴 스타일

    1. 짧은 스타일 : register_globals를 활성화 시켜야 쓸수 있다. (비추천)

                            지역변수와 혼란을 야기 한다. 4.2.0이후로 비활성화 되어있다.

    2. 중간 스타일 : 추천되는 방식(4.1.0이후에서만 가능)

    3. 긴 스타일 : 지양되어 왔다. 모든 버전에서 사용할수 있어 이식성은 높다.

                        성능에 좋지 않다. registre_long_arays로 비활성화 할수 있다.

식별자(Identifier)

dfe

  - 식별자는 변수의 이름을 말한다.

 - 길이 제한은 없으며 문자,숫자,'_', '$'로 만들 수 있다.

  - '$'는 가변변수때문에 조심해서 사용해야 한다.

  - 숫자는 매 앞에 올수 없다.

  - 대소문자를 구분한다.

변수형

: 변수의 형(type)은 저장된 데이터의 종류에 따라 정해진다.

   기본데이터형

     ■ Integer : 모든 숫자

     ■ Float

     ■ String

     ■ Boolean

     ■ Array

     ■ Object

     이 외에 NULL형과 resource형(외부자원 ex DB연결)이 있다.

형 강도(Type Strength)

PHP는 형 강도가 매우 약한다. 변수에 저장된 값에 따라 형이 결정된다.

     $a = 0;

     $a = 0.00;

       // $a는 처음엔 정수형이였다가 실수형으로 바뀐다.

     $a = 'Hello';  // 이것도 가능하다 이제 $a는 문자열이다

가변 변수(variable varialbes)

:  가변변수를 사용하면 변수의 이름을 동적으로 바꿀수있다.

  ex)

   $varname = 'b';

   $$varname = 5;

 

  위는 $b = 5 와 하는 것과 동일하다.

  

상수

  - 상수는 define 함수를 사용하여 상수를 정의한다.

    ex)

        define('TIREPRICE' , 100);

        define('OILPRICE', 10);

        define('SPARKPRICE', 4);  

  - 상수의 사용

     : 변수는 $를 붙이지만 상수는 상수의이름만 적어주면 된다.

    ex)

      echo TIREPRICE;


변수의 범위(scope) 6개의 범위를 가지고 있다.

- 수퍼글로벌 변수는 스크립트 전역에서 사용할 수 있다.

- 한번 선언된 상수는 스크립트 전역에서 사용할 수 있다. 즉 함수의 안과 밖 모두에서 사용할 수 있다.

- 전역변수는 스크립트 내에서 정의된 변수로 스크립트 내에서 사용할 수 있지만, 함수 안에서는 사용할 수 없다.  

- 함수 안에서 정의된 변수는 함수 내에서만 사용할 수 있다.

- 함수 안에서 전역으로 정의된 변수는 함수 밖에서는 사용할 수 없지만 매 사용 시마다 값이 저장되어 다음에 사용할 수 있다 ???

- 함수 안에서 사용된 변수는 함수가 끝나면 삭제된다.


수퍼글로벌 전체 리스트

  - $GLOBALS

  - $_SERVER

  - $_GET

  - $_POST

  - $COOKIES

  - $_FILES

  - $_ENV

  - $_REQUEST

  - $_SESSION



Operation(연산자)

대부분 C, Java랑 비슷하고 틀린부분만 정리

- 문자열 연산자   '.' : 문자열을 앞뒤로 붙여서 새로운 문자열을 만든다.

  ex)

     $a = "Bob's";

     $b = 'Auto Parts';

     $result = $a.$b;


   결과 $result에 저장된 값은 "Bob's Auto Parts"이다.

  - 산술 연산자

   : 산술 연산자의 operand(피연산자)는 정수와 실수형으로만 쓰일 수 있다. 만약 문자열로 산술연산을 시도한면 문자열을 숫자로 바꾸어서 실행한다. 문자열에 "e"나 "E"가 들어있다면 실수형으로 변화 한다. 그 외에는 정수형으로 변환. PHP는 문자열 처음에서 숫자를 찾아서 그것을 값으로 인식하는데, 만약에 문자열에 숫자가 없다면 문자열의 값은 0이 된다.


 - 참조 연산자(Reference)

   : C의 &연산자와 같음..

    ex) $a = 5

          $b = $a; --> $a, $b 서로 다른 메모리 영역을 가진다.


          $a = 5;

          $b = &a; 

          &b = 7    // $a, $b 서로 같은 메모리영역을 가진다 즉 $a, $b가 7


           unset($a)  : 서로의 참조를 다르게 한다 (관계를 떼어놓을 수 있다)


- 비교연산자(Comparison Operatiors)

     identical operator (===) : 두 피연산자가 값이 같고 같은형일 때만 true를 리턴한다.

     Not Identical (!==)  : != 와는 다르다

     Not Equal (<>) : 같지 않다. (!=) 와 같이 동일한 의미로 쓰인다.

- 에러 억제 연산자(error suppression operator) : @

    : '@'은어떠한 표현식에도 쓸수 있다.

    ex) $a = @(57/0)

     '@'가 없다면 위 문장은 "0으로 나누기"에 의한 에러가 발생하지만 '@'를 앞에 써주어서 에러는 무시하고 넘어간다. 만약 이런 방식으로 억제한다면 에러를 처리하는 코드를 작성해야 한다. 만약 PHP에서 track_error를 설정해 놓았다면 에러메시지를 전역변수인 $PHP_erromsg에 저장한다.


- 실행 연산자(execution operation)

 :  '`' 와 '`'로 이루어진 한 쌍의 연산자로 '`'는 홑따옴표(')와는 다른 키보드 ~아래에 있다.

   PHP에서 서버의 커맨드 라인에서 실행하고 싶은 것이 있다면 `` 사이에 명령어를 쓰면된다.

   그러면 ``의결과값이 표현식의 리턴값이 된다.

   EX)

      유닉스 환경

        @out = `ls -la`;

        echo '<pre>'.$out.'</pre>';

     그러면 시 디렉토리의 파일 리스트가 보이게 된다.


    

- 배열 연산자

   +       |    $a + $b    |  $a와 $b가 가지고 있는 모든값을 반환한다(합집합)

  ==       : $a, $b가 같은 요소를 가지고 있으면 true

  ===     | $a, $b가 같은 요소를 같은 순서로 가지고 있으면 true

  !=

  <>

  !==


변수와 관련된 함수

- 변수의 데이터 형을 검사하고 설정하기

 

      string gettype(mixed var);

         : 'boolean", "integer", "double", "string", "array", "object", "resource", 혹은 NULL을 반환한다. 표준 데이터 형이 아니면 "unknown"을 반환


      bool settype(mixed var, string type);


       ■ is_array()

       ■ is_double(), is_float(), is_real() (모두 같은 함수)

       ■ is_long(), is_int(), is_integer() (모두 같은 함수)

       ■ is_string()

       ■ is_object()

       ■ is_null()

       ■ is_scalar() - 변수가 스칼라 변수인지 확인한다. 즉 정수형, 불리어형, 문자열이나 실수형인지 확인한다.

       ■ is_numeric() - 변수가 숫자나 혹은 숫자 문자열인지 확인한다.

       ■ is_callable() - 변수에 저장된 값이 호출할 수 있는 함수의 이름인지 확인한다.


- 변수 상태 검사

   boolean isset(mixed var);

     : 이 함수는 변수의 이름을 인자로 받아서 만약 이 변수가 존재한다면 true를 반환한다.

      , 로 연결된 변수들을 주면 모든 변수가 존재해야 true를 반환

   boolean unset(mixed var);

    : 인자로 받은 변수의존재 자체를 없애고 true를 반환한다.

  empty(mixed var);

    : 변수가 존재하고, 비어 있지 않으며, 0이 아닌값을 가지고 있다면 true를 리턴

   

 - 변수형 변환

   int intval(mixed var[, int base]);  base :진수 (10, 2, 16)

   float floatval(mixed var);

   string strval(mixed var);

     

== 제어문 ==

 대부분 C와 비슷하지만, 틀린점만 요약하면

 

  1.  else if    -->  elseif  와 같이 붙여서 쓴다   

  2. 루프를 빠져나갈때 'continue', 'break' 이외에 'exit' 라는 제어문이 있다.

     'exit' : 루프를빠져나가 PHP 스크립트를 완전히 끝낸다.

  3. 대체 제어 구조

      { } 로 구역을 정하는 것이 아니라

        '{' 대신에 ':' 를 쓰고,

        '}' 대신에 사용한 제어구조에 따라, endif, endswitch, endwhile, endfor, endforeach를 쓸수있다.

     ex)

      if( $totalqty == 0 )

      {

           echo 'You did not ... ';

           exit;

      }

        를 아래와 같이 쓸수 있다.

      if( $totalqty == 0 ) :

           echo 'You did not ... ';

           exit;

      endif

   4. declare

     declare (directive)

     {

           // block

     }

       이 구조는 코드 블록에서 실행 지침(execution directive)를 설정하기 위해 사용된다.

       단 하나의 실행 지침인 tricks 만이 구현되어있는데 tricks=n이라는 방식으로 지침을 삽입할 수 있다. 코드 블록내에 있는 특정 함수 중 n개의 코드 행을 실행 시킬 수 있어 디버깅에 매우 유용한다.

2006/09/16 22:04 2006/09/16 22:04
이 글에는 트랙백을 보낼 수 없습니다

인터넷 서비스를 계획하다 보면 차후에 많은 양의 데이터를 각각의 서버별로 어떻게 동기화를 실행할것인지 걱정이 될것이다. 물론 많은 자금을 들여서 스토리지를 구입을 하면 좋지만, 웹서버 3-4대분량이나 소량의 데이터를 위해서 스토리지를 구입하기에는 가격이 만만하지 않다.

이런 중소형의 미러링을 위해서 생각해 볼수 있는 방법중에 하나가 rsync다. rsync는 파일크기의 변화나 시간의 변화등을 이용 동기화를 한다. 테스트 결과 적은량의 리소스로 빠른동기화의 효과를 볼수 있었다. 물론 원격에서 접근해서 미러링을 한다는 것 자체가 보안에 문제가 있기는 하지만, 매우 유용한 프로그램인 것은 확실하다. 어떻게 사용하느냐는 사용자들의 선택일 것이다.

+Rsync의 주요 특징

/ 링크, device, 소유자, 그릅, 허가권 복사를 지원

/ GNU tar와 비슷한 exclude, exclude-from 옵션 지원

/ RSH 또는 SSH등 사용가능

/ root 권한이 필요없음

/ anonymous 또는 인증 rsync 서버 지원(미러링에 유용함)

+Install #1 소스 설치

Rsync의 설치는 매우 간단하다. 설치라고 할것도 없다. 요즘 리눅스 플랫폼에는 거의 기본으로 들어있기 때문이다. 혹시 모르니 간단하게 설치를 해보자. 설치는 소스설치와 RPM설치로 진행하겠다. 될수 있으면 RPM으로 설치하는것을 권장한다. rsync홈페이지에 가보면 리눅스 플랫폼 외에도 다양한 플렛폼에서 사용할수 있도록 바이너리 화일이 제공된다.

먼저 소스 설치를 해보자. 아래 링크에서 Rsync소스 파일을 다운로드 받는다. 적당한 디렉토리로 이동후 압축을 해제하고 설치해 보자. configure옵션은 별다른게 없다. install화일에도 아래와 같이 나와있었다.

/ 소스 다운로드 : rsync-2.5.6.tar.gz

[root@localhost]#
[root@localhost]# tar xvfz rsync-2.5.6.tar.gz[root@localhost]# ./configure[root@localhost]# make[root@localhost]# make install

위와 같이 소스로 설치할 경우 rsync실행화일은 /usr/local/bin/rsync에 생성이 되었다. 혹시라도 패스 설정이 안돼 있다면 /usr/local/bin을 넣어주기 바란다.

+Install #2 RPM 설치

RPM설치는 기본적으로 리눅스에서 제공이 되기 때문에 간단히 설명하겠다. 그냥 up2date로 설치하거나, 패치지 구해서 설치하면 된다. rpm패치지는 아래 링크에서 받으면 된다.

/ RPM 다운로드 : rsync-2.4.6-1.i386.rpm

[root@localhost]#
[root@localhost]# up2date rsync실행전에 rhn에 등록이 되어있어야 한다.[root@localhost]# rpm -Uvh rsync-2.4.6-1.i386.rpm

rpm설치시 rsync실행화일 경로는 /usr/bin/rsync이다.

+Rsync의 설정

rsync는 xinetd기반으로 동작한다. 아래와 같이 설정화일을 만들어 준다. 아래 파일은 TCP 837포트를 이용해 미러링을 시킬 때 설정하면 된다. 만약 SSH를 사용할 것이라면 별도의 설정화일은 필요하지 않다.

[root@localhost]#
[root@localhost]# vi /etc/xinetd.d/rsyncservice rsync {         disable = no         socket_type = stream         wait = no         user = root         server = /usr/bin/rsync         server_args = --daemon         log_on_failure += USERID }[root@localhost]# /etc/rc.d/init.d/xinetd restart

xinetd를 재시작 시키면 아래와 같이 873번 포트가 열릴 것이다.

[root@localhost]#
[root@localhost]# nmap localhost873/tcp    open    rsync

이제 rsyncd.conf 설정화일을 작성해 보자. rsyncd.conf화일은 TCP 837포트를 사용할 때 설정해줘야 된다. 필자는 백업용도의 미러링 설정을 할 것이다.

[root@localhost]#
[root@localhost]# vi /etc/rsyncd.conf[/home/backup]path = /home/backupcomment = www.nasord.comuid = nobodygid = nobodyuse chroot = yesread only = yeshosts allow = 192.168.0.2max connections = 3timeout 600

설정화일 옵션이다. 옵션은 간단하며, 기본적으로 위의 옵션들만 있으면 동작이 된다. 나머지 옵션들은 man을 참고 하기 바란다.

[/home/backup] 서비스명
path : 미러링 경로
comment : 설명
uid : 파일전송하는 사용자의 id. 기본값은 nobody
gid : 파일전송하는 사용자의 그룹 id. 기본값은 nobody
use chroot : 위의 path를 root 디렉토리로 사용. 보안상 필요함.
read only : 읽기전용
hosts allow : 호스트별 접속허용. 기본값은 all host이므로 보안을 유지하려면 반드시 설정함
max connections : 동시접속자수
timeout : 클라이언트에서 접근시 타임아웃시간. anonymous 로 운영하는 경우 설정을 해야 클라이언트가 죽었을 때 서버에서 접속을 해체할 수 있음.

보안상 hosts allowuse chroot는 설정을 해줄 것을 권장한다.

+클라이언트 실행

위의 설정으로 서버측 설정은 모두 끝났다. 이제 실제로 동기화를 시켜보자. 실행방법은 TCP 873포트를 이용한 실행과 SSH를 이용한 실행으로 나눠서 설명하겠다.

/ 873 포트를 이용한 미러링

[root@localhost]#
[root@localhost]# rsync -avz hostname(IP)::서비스명 /백업받을 경로ex) [root@localhost]# rsync -avz 192.168.0.1::/home/backup /home/admin

/ ssh를 사용한 미러링

ssh를 사용할때는 위에서 설정한 xinetd설정화일과 rsyncd.conf화일이 필요없다. 사용자 인증만되면 동기화를 시킬수 있다.

[root@localhost]#
[root@localhost]# rsync -avz -e ssh hostname(IP):/타겟 경로 /백업 받을 경로ex) [root@localhost]# rsync -avz -e ssh 192.168.0.1:/home/backup /home/admin

rsync의 실행옵션은 무지 많다. 다 알려면 복잡하고, 아래 옵션만 알아도 사용하는데 지장없다. 나머지 옵션이 궁금하면 man을 참고 바란다.

/ -a는 archive mode (심볼릭 링크, 속성, 퍼미션, 소유권등 보존).

/ -v verbose(상세하게 보여움).

/ -z compress(전송시 압축을 함).

/ -u update only(새로운 파일을 덮어쓰지 않음)

/ --delete 서버쪽에 없고 클라이언트쪽에만 있는 파일을 지움

위의 실행 예제를 보면 호스트 설정다음에 : "콜론"이 보일것이다. : 는 ssh나 rsh를 이용할 때 사용하고 ::는 TCP 873포트를 이용할때 설정해 주면 된다. 타겟경로를 지정해줄 때도 경로뒤에 /가 붙는 것과 안붙을 경우 차이가 난다. 타겟경로를 /home/backup라고 해주면 backup폴더가 생성되고 자료들이 backup폴더 안으로 들어가고 타겟 경로를 /home/backup/라고 해주면 백업 경로에 바로 저장이 된다. 주의 하기 바란다. 주기적인 미러링을 위해서는 cron을 이용하여 동기화 시키면 된다.

+설치 후기

Rsync는 상당히 유용한 도구임에는 틀림없다. 하지만 보안상 취약하니 설정에 주의해서 사용해야 된다. 2002년 rsync의 취약점을 이용한 exploit이 나왔다. 2.5.1버전이나 이전 버전들에 한해서 적용이 되는 것이니 2.5.1버전 이상을 사용해야 된다. 마지막으로 rsync영문 매뉴얼을 링크 걸어 놓겠다. 참고 하기 바란다.

2006/09/16 16:54 2006/09/16 16:54
이 글에는 트랙백을 보낼 수 없습니다
형태소  2006/09/13 13:16
chunk_split = 문자열을 작은 조각으로 나눕니다
string chunk_split ( string body [, int chunklen [, string end]] )

예제 :
<?php
// RFC 2045 의의에 맞게 $data를 형식화
$data = "형태소공부하자";
$new_string = chunk_split($data , 4);
echo $new_string;
?>


AddCSlashes [한글]  --  C 형식으로 문자열에 슬래쉬를 덧붙입니다.
addslashes [한글]  --  문자열에 슬래쉬를 덧붙입니다.
autoLink [한글]  --  자동으로 링크를 걸어줍니다
bin2hex [한글]  --  바이너리 데이터를 16진수 표현으로 바꿉니다.
chop [한글]  --  rtrim()의 별칭.
chr [한글]  --  특정 문자를 반환합니다.
chunk_split [한글]  --  문자열을 작은 조각으로 나눕니다.
convert_cyr_string [한글]  --  키릴 문자셋을 다른 것으로 변환합니다.
count_chars [한글]  --  문자열 안에 사용한 문자에 대한 정보를 반환합니다.
crc32 [한글]  --  문자열의 crc32값을 계산합니다.
crypt [한글]  --  단방향 문자열 암호화(해슁).
echo [한글]  --  하나 이상의 문자열을 출력합니다.
explode [한글]  --  문자열을 주어진 문자열을 기준으로 분리합니다.
fprintf [한글]  --  문자열을 형식화하여 스트림에 기록합니다.
get_html_translation_table [한글]  --  htmlspecialchars()와 htmlentities()에서 사용하는 변환표를 반환합니다.
hebrev [한글]  --  논리적인 헤브루 텍스트를 알아볼 수 있는 텍스트로 변환한다.
hebrevc [한글]  --  개행 문자를 포함하여 논리 헤브라이어 텍스트를 표시 텍스트로 변환합니다.
htmlentities [한글]  --  해당하는 모든 문자를 HTML 엔티티로 변환합니다.
htmlentities [한글]  --  해당하는 모든 문자를 HTML 엔티티로 변환합니다.
htmlspecialchars [한글]  --  특수 문자를 HTML 엔터티로 변환합니다.
html_entity_decode [한글]  --  모든 HTML 엔티티를 해당하는 문자로 변환합니다.
implode [한글]  --  문자열로 배열 요소를 결합합니다.
join [한글]  --  implode()의 별칭.
levenshtein [한글]  --  두 문자열 사이의 Levenshtein distance를 계산합니다.
localeconv [한글]  --  숫자 형식화 정보를 얻습니다.
ltrim [한글]  --  문자열 시작 부분의 공백을 제거합니다.
md5 [한글]  --  문자열의 md5 해쉬를 계산합니다.
md5_file [한글]  --  주어진 파일명의 md5 해쉬를 계산합니다.
metaphone [한글]  --  문자열의 메타폰 키를 계산합니다.
money_format [한글]  --  통화 형식에 맞게 포맷한다.
nl2br [한글]  --  문자열의 모든 줄바꿈 앞에 HTML 줄바꿈 태그를 삽입합니다.
nl_langinfo [한글]  --  언어와 로케일 정보를 얻습니다.
number_format [한글]  --  숫자를 천단위로 묶어서 표현한다.
ord [한글]  --  문자의 아스키 값을 반환합니다.
parse_str [한글]  --  문자열을 처리하여 변수를 생성합니다.
print [한글]  --  문자열을 출력합니다.
printf [한글]  --  형식화한 문자열을 출력합니다.
quoted_printable_decode [한글]  --  인용되어 있는 출력 가능 문자열을 8비트 문자열로 변환합니다.
quotemeta [한글]  --  메타 문자를 인용합니다.
rtrim [한글]  --  문자열 끝 부분의 공백을 제거합니다.
setlocale [한글]  --  지역정보를 지정한다.
sha1 [한글]  --  문자열의 sha1 해쉬를 계산합니다.
sha1_file [한글]  --  파일의 sha1 해쉬를 계산합니다.
similar_text [한글]  --  두 문자열 간의 유사성을 계산합니다.
soundex [한글]  --  문자열의 soundex 키를 계산합니다.
sprintf [한글]  --  형식화한 문자열을 반환합니다.
sscanf [한글]  --  문자열을 형식에 따라 처리합니다.
strcasecmp [한글]  --  대소문자를 구별하지 않는 바이너리 호환 문자열 비교
strchr [한글]  --  strstr()의 별칭.
strcmp [한글]  --  바이너리 호환 문자열 비교
strcoll [한글]  --  로케일 기반 문자열 비교
strcspn [한글]  --  마스크에 매칭하지 않는 처음 세그먼트의 길이를 찾습니다.
stripcslashes [한글]  --  addcslashes()로 처리한 문자열을 되돌립니다.
stripos [한글]  --  대소문자를 구별하지 않고 문자열이 처음 나타나는 위치를 찾습니다.
stripslashes [한글]  --  addslashes()로 처리한 문자열을 되돌립니다.
stripTags [한글]  --  문자열 중 특정한 태그를 제거한다
strip_tags [한글]  --  문자열에서 HTML과 PHP 태그를 제거합니다.
stristr [한글]  --  대소문자를 구별하지 않는 strstr()
strlen [한글]  --  주어진 문자열의 길이를 구해서 돌려준다.
strnatcasecmp [한글]  --  "natural order" 알고리즘을 이용한 대소문자를 구별하지 않는 문자열 비교.
strnatcmp [한글]  --  "natural order" 알고리즘을 이용한 문자열 비교
strncasecmp [한글]  --  대소문자를 구별하지 않는 처음 n 문자의 이진 호환 문자열 비교
strncmp [한글]  --  처음 n 문자의 이진 호환 문자열 비교
strpos [한글]  --  문자열이 처음 나타나는 위치를 찾습니다.
strrchr [한글]  --  문자열에서 가장 마지막의 어커런스를 찾는다.
strrev [한글]  --  문자열을 뒤집는다.
strripos [한글]  --  대소문자를 구별하지 않고 문자열에서 어떤 문자열의 마지막 위치를 찾습니다.
strrpos [한글]  --  문자열 안에서 문자의 마지막 출현 위치를 반환한다.
strspn [한글]  --  마스크에 매칭되는 초기 세그먼트의 길이를 찾는다.
strstr [한글]  --  문자열의 처음 어커런스를 찾는다
strstr [한글]  --  문자열의 처음 어커런스를 찾는다
strtok [한글]  --  문자열을 토큰화한다.
strtolower [한글]  --  문자열을 소문자로 만든다.
strtoupper [한글]  --  문자열을 대문자로 만든다.
strtr [한글]  --  특정 문자를 번역한다.
str_ireplace [한글]  --  대소문자를 구별하지 않는 str_replace().
str_pad [한글]  --  문자열을 주어진 길이로 만든다.
str_repeat [한글]  --  문자열을 반복합니다.
str_replace [한글]  --  발견한 모든 검색 문자열을 치환 문자열로 교체합니다.
str_replace [한글]  --  발견한 모든 검색 문자열을 치환 문자열로 교체합니다.
str_rot13 [한글]  --  문자열에 rot13 변환을 수행합니다.
str_shuffle [한글]  --  문자열을 랜덤하게 섞습니다.
str_split [한글]  --  문자열을 배열로 변환합니다.
str_word_count [한글]  --  문자열에서 사용한 단어에 대한 정보를 반환합니다.
substr [한글]  --  문자열의 일부를 반환한다.
substr_compare [원문]  --  Binary safe optionally case insensitive comparison of 2 strings from an offset, up to length characters
substr_count [한글]  --  부분문자열의 수를 센다
substr_replace [한글]  --  문자열의 일부를 치환한다.
trim [한글]  --  문자열의 처음과 끝에 있는 공백을 제거한다.
ucfirst [한글]  --  문자열의 처음 글자를 대문자로 만든다.
ucwords [한글]  --  문자열에 있는 각 단어의 처음 글자를 대문자로 바꾼다.
vprintf [원문]  --  Output a formatted string
vsprintf [원문]  --  Return a formatted string
wordwrap [한글]  --  정지문자를 이용해 주어진 수 만큼의 문자를 래핑한다.
2006/09/13 13:16 2006/09/13 13:16
이 글에는 트랙백을 보낼 수 없습니다
Web_developing/PHP  2006/09/13 12:21
array_change_key_case -- 모두 대문자나 소문자화된 문자열 키를 갖는 배열로 반환한다
array_chunk -- 배열을 여러 덩어리로 분산시킨다
array_combine --  키를 위한 배열과 값을 위한 배열을 각각 사용하여 배열을 생성한다
array_count_values -- 배열내의 중복된 키값의 개수를 배열로 리턴한다. [배열값]=>중복된갯수
  ::array array_count_values(array input)
array_diff_assoc -- 인덱스 검사와 함께 배열간의 차이를 계산한다
array_diff_uassoc --  Computes the difference of arrays with additional index check which is performed by a user supplied callback function
array_diff -- 배열간의 차이를 계산한다
array_fill -- 배열을 특정값으로 채운다
array_filter --  배열에서 두번째인자로 지정한 함수리턴값(TRUE,FALSE)에 맞는(TRUE)키값을 가진 키와키값을 골라 배열로 리턴.
  ::array array_filter(array input [,mixed callback]) 
array_flip -- 배열안의 모든 키를 각 키의 연관값으로 바꾼다.
array_intersect_assoc -- 인덱스 검사과 함께 배열의 중복을 계산한다
array_intersect -- 배열의 중복을 계산한다
array_key_exists -- 주어진 키와 인덱스가 배열에 존재하는지 확인한다
array_keys -- 배열의 모든 키를 반환한다
array_map --  Applies the callback to the elements of the given arrays
array_merge_recursive -- 두개 이상의 배열을 재귀적으로 병합한다
array_merge -- 인자로 주어진 배열들을 합한 배열을 리턴한다.
  ::array array_merge(array array1, array array2 [,array ..])
array_multisort -- 여러개의 배열 또는 다차원 배열을 정렬한다
array_pad --  설정된 길이만큼 특정 값으로 배열을 채운다
array_pop -- 배열 끝의 요소를 뽑아낸다
  :: mixed array_pop (array array)
array_push --  배열의 끝에 하나 이상의 원소를 넣는다.첫번째 인자인 배열끝에 두번째이후의 인자들을 추가한다.
  :: int array_push (array array, mixed var [, mixed ...]) 
array_rand --  배열안에서 하나 이상의 임의 원소를 뽑아낸다. srand()와 함께 사용하여 난수테이블을 초기화 해주는것이 좋다.
  리턴타입은 두번째 인자가 1일 경우 int 이고 2이상일경우에는 배열이다.
  :: mixed array_rand (array input [, int num_req]) 
array_reduce --  콜백 함수를 사용하여 배열을 반복적으로 단일 값으로 축소시킨다
array_reverse --  배열 원소를 역순으로 반환한다
  :: array array_reverse (array array [, bool preserve_keys])
array_search --  배열에서 주어진 값을 검색하고 성공하면 해당 키를 반환한다.존재하지 않으면 false(널문자)를 돌려준다.
  :: mixed array_search (mixed needle, array haystack [ , bool strict]
  예) $array = array(1,2,3,4,5,6); echo array_search(3, $array) ;
array_shift --  array_pop()과 반대되는 기능을 가지고 있고 배열에서 맨처음값을 삭제하고 삭제한 값을 리턴한다.
  :: mixed array_shift ( array array)
array_slice -- 배열에서 특정부분만 추출한 배열을 리턴한다. 두번째 인자는 시작할 인덱스이고 세번째 인자는 길이이다. 세번째인자가
     음수로 지정될 경우에는 역으로 진행된다. (0부터 시작한다)
  :: array array_slice ( array array, int offset [, int length])
array_splice --  배열의 일부를 삭제하고, 그 위치에 다른 내용을 대체한다
array_sum --  배열내의 값들의 합을 계산한다
  :: mixed array_sum (array arr)
array_udiff_assoc -- Computes the difference of arrays with additional index check. The data is compared by using a callback function.
array_udiff_uassoc -- Computes the difference of arrays with additional index check. The data is compared by using a callback function. The index check is done by a callback function also
array_udiff -- Computes the difference of arrays by using a callback function for data comparison.
array_unique -- 배열에서 중복된 값을 제거한다
array_unshift --  배열의 맨 앞에 하나 이상의 원소를 첨가한다.array_push()와 반대되는 기능을 하는 함수로서,두번째 이하 인자값을 배열에 추가하는데 기존 배열의 키는 뒤로 밀리게 된다.
  :: int array_unshift(array array, mixed var [, mixed ...])
array_values -- 배열의 연관배열을 스칼라 배열로 리턴하는 함수이다. 문자열키나 정수키는 무시되고 0 부터 순서대로 정수 인덱싱됨.
  :: array array_values (array input)
array_walk_recursive --  Apply a user function recursively to every member of an array
array_walk --  배열의 각 키와 값에 대해 두번째 인자로 지정한 함수를 실행케 한다. 세번째 인자는 이때 실해되는 함수의 인자로 쓰인다.
  ::int array_walk( array arr, string func [, mixed userdata])  (예제)
array --  배열을 생성한다
arsort --  배열을 내림차순 정렬하고 인덱스의 상관관계를 유지한다.
  :: void arsort(array array [, int sort_flags]) (예제) 
asort -- 배열을 오름차순 정렬하고 인덱스 상관 관계를 유지한다.즉 배열을 값에 따라 순서대로 정렬시키고 인덱스는 유지.
  :: void  asort(array array [, int sort_flages]) (예제)
compact --  주어진 인자를 변수명으로 갖는 연관배열을 리턴한다.변수명으로 배열변수명을 쓸수도 있다.
  :: array compact (mixed varname[,mixed ..]) (예제)
count -- 변수의 원소 갯수를 구한다
  :: int count(mixed var);
current -- 배열의 현재 원소를 반환한다.배열의 범위를 넘어서면 false를 리턴한다.
  :: mixed current(array array) 
each --  배열에서 현재의 키와 값 쌍을 반환하고 배열 커서를 전진시킨다
  :: array each (array array)
end --  내부 배열 포인터를 마지막 원소를 가리키게 한다
  :: mixed end( array array)
extract --  배열의 현재 심볼 테이블로 변수들을 입력한다
in_array -- 첫번째 이자가 두번째 인자로 주어진 배열의 원소로서 존재하는지 여부를리턴한다. 세번재 인자를 TRUE로 줄경우 데이타타입의 일치 여부까지 검사하게 된다. 리턴값을 false/true로 리턴하지 않고 true일경우 "1"을 false 일경우 널스트링""을 리턴한다.
  :: bool in_array(mixed needle, array haystack [, bool strict])
key -- 연관배열에서 현재 포인터의 키를 꺼낸다 . pos()와 current()는 현재 포인터의 값을 꺼낸다.
  :: mixed key (array array)
krsort -- 역순으로 키에 의해 배열을 정렬한다
  :: int krsort (array array [, int sort-flags]);
ksort -- 키에 의해 배열을 정렬한다
  :: int ksort (array array [, int sort-flags]);
list --  배열처럼 변수들을 지정한다.배열의 각 원소를 인자로 지정한 각 값들을 변수명으로 하는 변수값에 할당.
  :: void list (mixed ...)
  (예) $array = array('공부','노래',미술');  list('a','b','c')= $array;  결과) a=공부,b=노래,c=미술  
natcasesort --  대소문자를 구별하지 않고 "natural order" 알고리즘을 사용하여 배열을 정렬한다
natsort --  "natural order" 알고리즘을 사용하여 배열을 정렬한다.sort()와 비슷하나 sort()가 문자의 등장순으로 순서를 단순비교하여 정렬하는데 비해 의미론적 자연어 정렬을 가능케 해주는 특징이 있다.
  :: void natsort (array array) 
next --  배열의 내부 배열 포인터를 전진시킨다
pos -- 배열에서 현재 원소를 꺼내온다. current()의 alias 이다. 
prev -- 내부 배열 포인터를 앞으로 돌린다
  :: mixed prev (array array)
range --  특정 범위의 원소를 갖는 배열을 생성한다. low~high사이의 정수(또는 알파벳)를 원소로 하는 배열을 리턴한다.
  :: array range(mixed low, mixed high)
  (예) $array= range(5,9);  $array값이 {5,6,7,8,9}이다.
reset --  배열의 내부 포인터가 배열의 첫번째 원소를 가리키게 한다
  :: mixed reset (array array) 
rsort -- 역순으로 배열을 정렬한다.배열원소의 값을 기준으로 역정렬시킨다. 연관배열의 경우 스칼라 배열로 바뀌는 점 유의
  :: mixed rsort( array array [, int sort-flags]) (예제) 
shuffle -- 배열을 뒤섞는다.(주)다른 난수관련 함수들과 마찬가지로 srand()를 이용하여 시드의 초기화를 이뤄줘야한다.
  :: void shuffle( array array) 
sizeof -- count()의 별칭
sort -- 배열을 정렬한다.오름차순(0,1,2,3,4,....)
uasort --  사용자-정의 비교함수로 배열을 정렬하고 인덱스 연관성을 유지한다
uksort --  사용자-정의된 비교함수를 사용하여 키에 의해 배열을 정렬한다
usort --  사용자-정의된 비교함수를 사용하여 값들에 의해 배열을 정렬한다
2006/09/13 12:21 2006/09/13 12:21
이 글에는 트랙백을 보낼 수 없습니다
basename --  경로명에서 파일이름만 반환합니다
   :: string basename( string path [, string suffix])
  예) $path= $PHP_SELF ; echo basename($path);
chgrp -- 파일의 그룹을 변환합니다
chmod -- 파일의 모드 변경하고 성공여부를 리턴한다.

   :: int chmod(string filename, int mode);   첫번째인자는 경로명, 두번째인자는 10진수가 아니라 8진수이다.

chown -- 파일의 소유자 변경
clearstatcache -- 파일의 통계(stat) 캐시를 삭제합니다.
   :: void clearstatcache(void) 
     stat(),lstat(),file_exists() 등등의 statcaching-function을 사용후 다시 쓸일이 없다면 이 함수를 사용하여 리소스를 제거. 
copy -- 파일업로드시 많이 쓰이는 함수로 첫번째인자인 파일을 두번째 인자인 파일명으로 복사하고 성공여부 리턴한다.
   :: int copy( string source, string dest)
delete -- 실제로는 없는 명령
dirname -- 경로의 구성요소중에서 디렉토리 이름만 반환합니다.
   :: string dirname(string path)
disk_free_space -- 인자로 지정한 디렉토리의 남은 용량을 리턴한다. (원도우 버전에 오동작)
   :: float disk_free_space( string directory)
disk_total_space -- 해당 디렉토리의 총용량을 바이트 단위로 리턴한다.
   :: float disk_total_space( string directory) 
diskfreespace -- 디렉토리의 사용가능한 공간을 반환합니다. (리눅스,윈도우 정상동작)
   :: float diskfreespace( string directory)
fclose -- 열려있는 파일 포인터를 닫습니다.
feof -- 파일의 끝이 파일포인터에 있는지 테스트합니다.
fflush -- 출력결과를 파일로 보냅니다.
fgetc -- 파일포인터로부터 문자 가져오기. eof를 만나면 false를 리턴한다.
fgetcsv --  fgets()와 비슷한 용법을 가지나,일반 text파일에서 한라인씩 읽어오는데 반해 CVS파일의 한라인을 읽어서 두번째 인자로
    주어진 구분자를 기준으로 한 배열을 리턴하는데 차이가 있다. 두번째 인자 디폴트는 "." 이다.
   :: array fgetcvs(int fp, int length [, string delimiter]) 
fgets -- 파일 포인터에서 개행문자나 eof를 만날때까지 두번째인자인 byte수 만큼 읽어들인다.
   :: string fgets (int fp [, int length])
fgetss --  파일포인터에서 라인을 가져오고 HTML 태그를 없애기
file_exists -- 파일이 있는지 체크
file_get_contents -- Reads entire file into a string
file_put_contents -- Write a string to a file
file -- 파일전체를 한라인씩 배열로 읽어들임
   :: array file(string filename [, int use_include_path]) 
fileatime -- 최근에 파일에 최종 접근한 시간을 가져옴 (리턴형태는 unix_timestamp이다)
   :: int fileatime(string filename)
filectime -- 파일의 아이노드 변경시간을 가져옵니다 (리턴형태 unix_timestamp)
filegroup -- 파일의 그룹을 가져옵니다
fileinode -- 파일의 아이노드를 가져옵니다
filemtime -- 파일이 수정된 시간을 timestamp 값으로 리턴한다.
fileowner -- 파일의 소유자를 가져옵니다
fileperms -- 파일의 권한을 가져옵니다
filesize -- 파일의 크기를 byte단위로 리턴한다.
   :: int filesize( string filename) 
filetype -- 파일의 형식을 가져옵니다 (파일인지 디텍토리인지 구별하는 용도로 쓰일수 있다)
   :: string filetype (string filename)
flock -- 파일 잠김에 관한 간단한 도움말
fnmatch -- Match filename against a pattern
fopen -- 파일이나 URL을 엽니다
   :: int fopen(string filename, string mode [, int use_include_path])
fpassthru --  파일 포인터에 남아있는 모든 데이타를 출력하고 파일을 닫는다.
   :: int fpassthru(int fp) 
fputs -- 파일 포인터에 기록하기. fwrite()동일하다. 참고바람. 
fread -- 파일을 binary로 읽어온다. 모든내용을 읽고 싶다면 filesize()를 이용.
fscanf -- 형식에 따라서 파일로 부터 분석하여 입력하기
fseek -- 파일포인터를 두번째 인자로 지정한 위치로 옮긴다.
   :: int fseek (int fp, int offset [,int whence]) 
fstat --  오픈 파일 포인터를 사용하는 파일에 대한 정보 가져오기
   :: array fstat (int fp)
ftell -- 파일포인터의 읽기/쓰기 위치값을 리턴한다.
   :: int ftell (int fp) 
ftruncate --  주어진 길이로 잘라내기
fwrite -- Binary-safe 파일 쓰기 . fputs()와 동일하게 사용된다.
   :: int fwrite (int fp, string string [,int length])
glob -- Find pathnames matching a pattern
is_dir -- filename 이 디렉토리인지 아닌지 여부를 리턴한다.
   :: bool is_dir (string filename)
is_executable -- filename이 실행가능한 것인지 아닌지 이야기하기
is_file --  filename이 보통 파일인지 아닌지 이야기하기
is_link --  filename이 심볼릭 링크인지 아닌지 이야기하기
is_readable --  filename이 읽기 가능한 것인지 아닌지 이야기하기
is_uploaded_file -- file이 HTTP POST를 통해 업로드된 것인지 아닌지 이야기하기
is_writable -- filename이 쓰기가능한 것인지 아닌지 이야기하기
is_writeable -- Alias of is_writable()
link -- hard link 만들기
   :: int link(string target , string link) 
linkinfo -- 링크 정보 가져오기
lstat --  파일이나 심볼릭 링크에 관한 정보를 제공
mkdir -- 디렉토리 만들기
   :: int mkdir(string pathname, int mode)
move_uploaded_file -- 업로드된 파일을 다른곳으로 이동하기
parse_ini_file -- ini 확장자를 가진 파일을 열어 각 항목을 첨자로 하는 연관배열을 리턴한다.
   :: array parse_ini_file(string filename [,bool process_sections])
pathinfo -- 인자로 주어진 경로+파일명을 각 요소로 하는 연관배열을 리턴한다.
   :: array pathinfo (string path)
   예) [dirname][basename][extension]이와 같은 연관배열 형태로 출력한다.
pclose -- 진행되는 파일 포인터 닫기
popen -- 진행되는 파일 포인터를 열기
readfile -- 파일을 출력합니다
readlink -- symbolic link의 target 반환
realpath -- 웹경로가 아닌 실제 서버의 로컬경로를 리턴한다.
   :: array pathinfo( string path)
rename -- 파일을 새 이름으로 고치기
rewind -- 파일포인터의 위치를 되돌립니다(rewind).
rmdir -- 디렉토리 제거하기
set_file_buffer --  주어진 파일 포인터에 파일 버퍼링 설정하기
stat -- file에 대한 정보 제공
   :: array stat(string filename)
symlink -- 심볼릭 링크 만들기
tempnam -- 유일한 파일 이름 만들기
tmpfile -- 임시 파일 만들기
touch -- 파일의 수정시간을 설정합니다
umask -- 현재의 umask를 변경하기
unlink -- 파일을 삭제하기
2006/09/12 13:12 2006/09/12 13:12
이 글에는 트랙백을 보낼 수 없습니다
게임  2006/09/12 10:32

꽤 재미있다 ! ㅋ....
2006/09/12 10:32 2006/09/12 10:32
이 글에는 트랙백을 보낼 수 없습니다
출처 블로그 > [스케치]
원본 http://blog.naver.com/tripsketch/3703720
=======================================================================
출처 : http://www.ricky.co.kr/jsboard/read.php?table=system&no=17&page=1
=======================================================================
[제목] 아파치 로그 파일 - 특이한 녀석들은 따로 담거나 없애기* 제목이 좀 이상하네요........^.^작성자 : 김칠봉 <san2(at)linuxchannel.net>작성일 : 2001. 04. 30대상자 : 초보- 힌트 URL : 임은재님이 쓴 글을 보고 나서   http://kltp.kldp.org/stories.php?story=00/10/22/9724184- 관련 문서 : 아파치 제공 문서   http://httpd.apache.org/docs/mod/mod_log_config.html   http://httpd.apache.org/docs/mod/mod_setenvif.html목차1. 배경2. 기초지식  2-1. 로그포맷과 CustomLog 지시자  2-2. 아파치 환경변수 설정3. 예제  3-1. 특정 IP 주소만 환경변수로 설정하기  3-2. 특정 타입의 파일만 환경변수로 설정하기  3-3. 특정 User-Agent 만 환경변수로 설정하기  3-4.  종합예제 : 사오정(?) 로그 분석 피하기------------------------------------------1. 배경몇 달 전부터 Webalizer 라는 로그 분석기로 제가(이하 '필자') 운영하는 싸이트의로그를 대충 분석(?)해 봤는데 사오정(?) 분석이 되어 버렸더군요.결정적으로 필자가 운영하는 싸이트의 대부분은 php로 구성되어 있는데, 이는 실제로 - 방문자 외에 localhost에서 php가 실행하는 로그 기록 - 로봇들의 접근 기록 - 운영자(필자)가 접근한 로그 기록 등등이 함께 기록되어 있어 순수 방문자 통계에 약간 덜(?) 정확한 통계가 나오더군요. 따라서 이런 유형들의 로그는 없애거나 따로 로그기록하는 것이 낫을 것 같더군요. 위의 내용이 이하 다루는 내용입니다.2. 기초지식2-1. 로그포맷과 CustomLog 지시자Module mod_log_config 은 아파치 기본 모듈입니다.    로그 포맷 스트링    %a : 원격의 IP 주소    %b : 헤더를 포함한 전송량(bytes)    %{var}e : 환경 변수 "var"    %f : 파일이름    %h : 원격의 호스트    %{hdr}i : 서버에 들어오는(요청) 헤더 값 "hdr"    %l : 원격의 로그인 ID(지원한다면)    %{label}n : 다른 모듈에서 "label" 구성    %{hdr}o : 응답 헤더 값 "hdr"    %p : 서버의 Canonical 포트 번호    %P : 자식 프로세스 ID(PID)    %r : 첫번째 요청 라인    %s : 상태코드    %t : 시간 포맷(CLF 포맷)    %{format}t : "format"으로 구성된 시간 포맷    %T : 서버에 요청하는 시간(초)    %u : 원격의 유저이름(인증시)    %U : 요청한 URL    %v : 클라이언트 요청에 따른 Canonical 서버네임    %V : UseCanonicalName 설정에 따른 서버네임일반적으로 아파치를 설치하고 나면, 다음과 같이 기본설정되어 있을 겁니다.(굳지 수정할 필요없음)    LogFormat "%h %l %u %t \"%r\" %>s %b \"%{Referer}i\" \"%{User-Agent}i\"" combined    LogFormat "%h %l %u %t \"%r\" %>s %b" common    LogFormat "%{Referer}i -> %U" referer    LogFormat "%{User-agent}i" agent    CustomLog /usr/local/apache/logs/access_log common물론 이 정도는 다 알고 계시리라 믿습니다.    로그 기록 지시자    CookieLog    CustomLog    LogFormat    TransferLogCookieLogs는 제외하고 나머지 지시자에 대해서 알아봅시다.LogFormat 지시자Syntax: LogFormat format|nickname [nickname]Default: LogFormat "%h %l %u %t \"%r\" %>s %b"Context: server config, virtual hostStatus: BaseCompatibility: Nickname only available in Apache 1.3 or laterModule: mod_log_configCustomLog 지시자Syntax: CustomLog file|pipe format|nickname [env=[!]environment-variable]Context: server config, virtual hostStatus: BaseCompatibility: Nickname only available in Apache 1.3 or later.Conditional logging available in 1.3.5 or later.Module: mod_log_configTransferLog 지시자Syntax: TransferLog file|pipeDefault: noneContext: server config, virtual hostStatus: BaseModule: mod_log_configLogFormat 지시자는 앞에서 예제가 있으므로 생략하고 비슷한 기능을 가진CustomLog, TransferLog 지지자에 대해서 잠깐 알아봅시다.둘다 file 에 로그를 기록한다는 면에서는 동일한 기능입니다.(pipe 기능도 동일)    같은점    1. 둘다 file에 로그를 기록한다.    2. |pipe 에 설정한 외부 프로그램을 인자로 사용할 수 있다.    3. 둘다 다중 로그를 사용할 수 있다.    다른점    1. CustomLog 지시자는 LogFormat 지시자에서 설정한 nickname이나 Log format을        인자로 사용할 수 있다.    2. CustomLog 지시자는 환경변수를 인자로 가질 수 있다.따라서,이하 다룰 내용은 환경변수를 설정하고 이 환경변수(env)와 동일(=)하거나 그렇지 않은(!=)특정 유형에 대해서 로그에 기록해야하 하므로 당연히 CustomLog 지시자를 사용해야합니다.*주의)환경변수를 인자로 사용할 경우 하나만 가능.이해가 되셨는지 모르겠네요....2-2. 아파치 환경변수 설정아파치에서 환경변수를 설정하는 방법은 몇가지 있습니다.예를 들어,    - mod_env 모듈에 의한       SetEnv       지시자 이용    - mod_setenvif 모듈에에 의한       BrowserMatch       BrowserMatchNoCase       SetEnvIf       SetEnvIfNoCase       지시자 이용등이 있습니다.여기에서 주로 사용할 지시자는 BrowserMatch 지시자와 SetEnvIf 지시자입니다.*참고)xxxxNoCase 지시자는 대소문자를 구분하지 않겠다는 의미입니다.이 두개의 지시자에 대한 사용법만 간단하게 알아봅시다.BrowserMatch 지시자Syntax: BrowserMatch regex envar[=value] [envar[=value]] ...Default: noneContext: server config, virtual host, directory, .htaccessOverride: FileInfoStatus: BaseModule: mod_setenvifCompatibility: Apache 1.2 and above (in Apache 1.2 this directive was found in thenow-obsolete mod_browser module); use in .htaccess files only supported with1.3.13 and laterSetEnvIf 지시자Syntax: SetEnvIf attribute regex envar[=value] [envar[=value]] ...Default: noneContext: server config, virtual host, directory, .htaccessOverride: FileInfoStatus: BaseModule: mod_setenvifCompatibility: Apache 1.3 and above; the Request_Protocol keyword andenvironment-variablematching are only available with 1.3.7 and later; use in .htaccess files only supportedwith 1.3.13 and later   환경변수 지정 및 값 지정 방법   1.varname, or   2.!varname, or   3.varname=value   예 :   BrowserMatch ^Mozilla forms jpeg=yes browser=netscape   BrowserMatch "^Mozilla/[2-3]" tables agif frames javascript   BrowserMatch MSIE !javascript   BrowserMatchNoCase Robot is_a_robot   SetEnvIfNoCase User-Agent Robot is_a_robot   BrowserMatchNoCase mac platform=macintosh   BrowserMatchNoCase win platform=windows   SetEnvIf Request_URI "\.gif$" object_is_image=gif   SetEnvIf Request_URI "\.jpg$" object_is_image=jpg   SetEnvIf Request_URI "\.xbm$" object_is_image=xbm        :   SetEnvIf Referer www\.mydomain\.com intra_site_referral        :   SetEnvIf object_is_image xbm XBIT_PROCESSING=1   SetEnvIfNoCase Host Apache\.Org site=apache   SetEnvIf 지자자에서 attribute 에 올 수 있는 것들 :   Remote_Host - the hostname (if available) of the client making the request   Remote_Addr - the IP address of the client making the request   Remote_User - the authenticated username (if available)   Request_Method - the name of the method being used (GET, POST, et cetera)   Request_Protocol - the name and version of the protocol with which the request                                    was made (e.g., "HTTP/0.9", "HTTP/1.1", etc.)   Request_URI - the portion of the URL following the scheme and host portion   그외   Host, User-Agent, and Referer 가능   see http://www.rfc-editor.org/rfc/rfc2616.txt따라서,BrowserMatch와 SetEnvIf User-Agent 는 서로 동일하다는 것을 알 수 있을 겁니다.*중요)CustomLog 지자자와 다르게 환경변수 인자에 여러 개를 설정할 수 있음.여기까지 이해가 되셨다면 다음은 보지 않아도 될듯 하군요.......^.^3. 예제3-1. 특정 IP 주소만 환경변수로 설정하기- 환경변수 이름 : do_not_log- 목적 : 이 환경변수에 해당되는 특정 IP 주소는 access_log에 기록하지 않는다.    SetEnvIf Remote_Addr "^127.0.0.1$" do_not_log    SetEnvIf Remote_Addr "^211.35.159.12[89]$" do_not_log    SetEnvIf Remote_Addr "^211.35.159.1[345][0-9]$" do_not_log    위에서 설정한 특정 IP 주소는    127.0.0.1 자기자신을 말하는 루프백 주소    211.35.159.128, 211.35.159.129 두개의 IP 주소    211.35.159.130 ~ 211.35.159.139 10개의 IP 주소    211.35.159.140 ~ 211.35.159.149 10 개의 IP 주소    211.35.159.150 ~ 211.35.159.159 10 개의 IP 주소즉 원격의 IP 주소(Remote_Addr)가 위와 일치하면 do_not_log 환경변수에 지정하는 예임.*참고)^ 은 시작을 의미$ 은 마지막을 의미[0-9] 0~9까지의 숫자중 어느 하나3-2. 특정 타입의 파일만 환경변수로 설정하기    SetEnvIfNoCase Request_URI "\.(gif|jpg|png|css|js|java)$" do_not_log    요청 URI(Request_URI) 파일이    *.gif    *.jpg    *.png    *.css    *.js    *.java    로 끝난 파일인 경우(대소문자를 구별하지 않음) do_not_log 환경변수에 지정함3-3. 특정 User-Agent 만 환경변수로 설정하기- 환경변수 이름 : do_not_log 과 is_a_robot- 목적 : 이 환경변수에 해당되는 특정 User-Agent는 access_log에 기록하지 않고,             따로 로그(robot-log)에 기록하거나 기록하지 않기 위함.    BrowserMatchNoCase "ru-robot" do_not_log is_a_robot    BrowserMatchNoCase "Slurp/si" do_not_log is_a_robot    BrowserMatchNoCase "Mercator" do_not_log is_a_robot    BrowserMatchNoCase "Gulliver" do_not_log is_a_robot    BrowserMatchNoCase "SyncIT/" do_not_log is_a_robot    BrowserMatchNoCase "FAST-WebCrawler" do_not_log is_a_robot    BrowserMatchNoCase "Lycos_Spider" do_not_log is_a_robot    BrowserMatchNoCase "^ia_archive" do_not_log is_a_robot    BrowserMatchNoCase "^tv" do_not_log is_a_robot    BrowserMatchNoCase "Scooter" do_not_log is_a_robot    BrowserMatchNoCase "ZyBorg/" do_not_log is_a_robot    BrowserMatchNoCase "KIT-Fireball" do_not_log is_a_robot    BrowserMatchNoCase "Googlebot/" do_not_log is_a_robot    BrowserMatchNoCase "DIIbot/" do_not_log is_a_robot    BrowserMatchNoCase "teoma_agent3" do_not_log is_a_robot    BrowserMatchNoCase "empas_robot" do_not_log is_a_robot모두 로봇으로 맞게 설정되었는지 모르겠네요...............T.T각각의 정규표현식 조건에 맞는 User-Agent 인 경우, do_not_log 환경변수와is_a_robot 이라는 두개의 환경변수에 설정한 예입니다.is_a_robot 이라고 또 하나의 환경변수를 지정한 이유는 앞서 얘기했듯이이 조건게 맞는 User-Agent가 접근할 경우 따로 로그에 기록하기 위함입니다.이 BrowserMatchNoCase 지시자 대신에 SetEnvIfNoCase User-Agent 로 대신할 수 있는데첫번째 부분을 다음과 같이 설정할 수 있습니다.(둘다 똑 같은 결과임)    SetEnvIfNoCase User-Agent "ru-robot" do_not_log is_a_robot3-4.  종합예제 : 사오정(?) 로그 분석 피하기앞의 3개의 예제를 모두 적용하면 다음과 같습니다.목적은 배경에서 설명했듯이 가능한 access_log 파일에 - 방문자 외에 localhost에서 php가 실행하는 로그 기록은 기록하지 않는다. - 로봇들의 접근 기록은 따로 robot-log 파일에 기록한다. - 운영자가 주고 접근할 IP 주소는 로그에 기록하지 않는다. - *.gif, *.jpg, *.png, *.css, *.js, *.java 등과 같은 파일은 로그에 기록하지 않는다. 이 정도의 조건이라면 가능한 어느 정도 수준으로 순수 방문자의 접근 기록만 access_log 파일에 기록할 수 있습니다. -- httpd.conf(실제로 필자가 운영하는 아파치 설정 내용임) --------------------#### 중간 생략##LogFormat "%h %l %u %t \"%r\" %>s %b \"%{Referer}i\" \"%{User-Agent}i\"" combinedLogFormat "%h %l %u %t \"%r\" %>s %b" commonLogFormat "%{Referer}i -> %U" refererLogFormat "%{User-agent}i" agentLogFormat "%h %l %u %t \"%r\" %>s %b \"%{User-Agent}i\"" use_robot#### 중간 생략#### 환경변수 do_not_log에 일치하지 않은 접근만 access_log 파일에 기록함.##CustomLog /usr/local/apache/logs/access_log combined env=!do_not_log## 중간 생략## 로봇들은 따로 robot_log 파일에 user_robot 포맷에 맞게 기록함##CustomLog /usr/local/apache/logs/robot_log use_robot env=is_a_robot## 중간 생략## 특정 IP 주소는 로그에 기록하지 않는다.## 주로 서버 IP 주소와 운영자가 자주 접속하는 IP 주소들##SetEnvIf Remote_Addr "^127.0.0.1$" do_not_logSetEnvIf Remote_Addr "^211.35.159.12[89]$" do_not_logSetEnvIf Remote_Addr "^211.35.159.1[345][0-9]$" do_not_log## 중간 생략## 주로 이미지 파일을 요청했을 경우 로그에 기록하지 않는다.##SetEnvIfNoCase Request_URI "\.(gif|jpg|png|css|js|java)$" do_not_log## 중간 생략## 로봇들의 환경변수 지정##BrowserMatchNoCase "ru-robot" do_not_log is_a_robotBrowserMatchNoCase "Slurp/si" do_not_log is_a_robotBrowserMatchNoCase "Mercator" do_not_log is_a_robotBrowserMatchNoCase "Gulliver" do_not_log is_a_robotBrowserMatchNoCase "SyncIT/" do_not_log is_a_robotBrowserMatchNoCase "FAST-WebCrawler" do_not_log is_a_robotBrowserMatchNoCase "Lycos_Spider" do_not_log is_a_robotBrowserMatchNoCase "^ia_archive" do_not_log is_a_robotBrowserMatchNoCase "^tv" do_not_log is_a_robotBrowserMatchNoCase "Scooter" do_not_log is_a_robotBrowserMatchNoCase "ZyBorg/" do_not_log is_a_robotBrowserMatchNoCase "KIT-Fireball" do_not_log is_a_robotBrowserMatchNoCase "Googlebot/" do_not_log is_a_robotBrowserMatchNoCase "DIIbot/" do_not_log is_a_robotBrowserMatchNoCase "teoma_agent3" do_not_log is_a_robotBrowserMatchNoCase "empas_robot" do_not_log is_a_robot## 이하 생략##------------------------------------------------------END
2006/09/11 14:11 2006/09/11 14:11
이 글에는 트랙백을 보낼 수 없습니다
출처 블로그 > 정신없이 어디로 뛰어야 하는걸까?
원본 http://blog.naver.com/vhfpss/20002975774

* tomcat 4. 대까지 적용


앞으로 test 라는 context에서 작업 하고자 한다면.....

구조는 c:\Tomcat4.1\webapps\test 폴더를 하나 만드시고,
test\WEB-INF\classes 가 되도록 폴더 구조를 만드시면 됩니다.(WEB-INF 반드시 대문자)

그리고, server.xml 에서 268 라인 쯤에


<Context path="/test" docBase="test" debug="0" reloadable="true"/>


<Context path="/test" docBase="webapps/test" debug="0" reloadable="true"/>라고 하니깐 안되더군요...



라고 하시면 끝....reloadable="true"는 무엇이냐 하면, 소스 코드가 바뀌었을 때 Tomcat 를 껐다 켜지 않아도 자동적으로 리로드 되게 하는 것입니다.
그러나, 경험에 의하면 자동적으로 되긴 되는데 빨리빨리는 안된다는 말씀...ㅠㅠ;;

파일들이 가야할 위치는, 앞으로 작업하게 될 jsp, html 등은 test 밑에 있으면 됩니다.
그리고, servlet 이나 기타 .java 파일들, 즉 class 파일들은 test\WEB-INF\classes 밑에 가면 됩니다.

여기까지 하시고, 간단한 html 을 작성하여 test 밑에 두시고,
브라우저에서 호출할 땐, http://localhost:8080/test/hello.html 하시면 됩니다.....



* tomcat 5. 대 적용


1. 톰캣 어드민 페이지를 연다. 예)http://도메인:8080/admin

2. $TOMCAT_HOME/conf/tomcat-users.xml파일을 아래와 같이 수정


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

<?xml version='1.0' encoding='utf-8'?>
<tomcat-users>
  <role rolename="admin"/>
  <role rolename="manager"/>
  <user username="tomcatusername" password="tomcatpassword" roles="admin,manager"/>
</tomcat-users>

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

3. tomcat-users.xml에서 기재했던 사용자아이디와 패스워드를 이용 admin페이지에 로그인한다.

4. 오른쪽 상단에 commitchange버튼을 클릭한다.

5. $TOMCAT_HOME/conf/Catalina/localhost 디렉토리에 기존에 없던 ROOT.xml 파일이 생성된다.

6. ROOT.xml 파일을 자신이 원하는 디렉토리 경로로 변경하면 된다.


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

** default 설정 예)

<?xml version='1.0' encoding='utf-8'?>
<Context displayName="Welcome to Tomcat" docBase="/usr/local/tomcat/webapps/ROOT" path="" workDir="work/Catalina/localhost/_">
</Context>

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

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

** 변경된 설정 예)

<?xml version='1.0' encoding='utf-8'?>
<Context displayName="Welcome to Tomcat" docBase="/usr/local/tomcat/webapps" path="" workDir="work/Catalina/localhost/_">
</Context>

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


2006/09/11 14:07 2006/09/11 14:07
이 글에는 트랙백을 보낼 수 없습니다
  -n, --interval=              seconds to wait between updates
  -v, --version                         print the version number
(번역은 안해도 되겠죠..^.^)
(기본적으로 2초 간격으로 화면 갱신합니다.)

*기본 사용예)
$ watch [-d] [-n seconds] 'command...'


가장 간단한 예부터 봅시다.

예를들어, 실시간(1초간격)으로 바뀌는 시스템의 UPTIME 값을 화면에 계속
출력해 봅시다.

$ watch -d -n 1 'cat /proc/uptime'
Every 1s: cat /proc/uptime              Sat Jan  4 14:41:18 2003

11554.91 11516.56

종료는 [Ctrl + C]입니다.
(눈이 아프다면, -d 옵션을 끄는것이 좋겠군요.)

/proc/uptime 외에,
/proc/loadavg (시스템 부하량 모니터링, `top`으로 가능)
/proc/meminfo (메모리 정보)
...(기타)

이번에는 (`top`처럼) uptime과 loadavg를 한꺼번에 출력해 봅시다.

(2초간격으로)
$ watch 'cat /proc/{loadavg,uptime}'
....
(생략)


이번에는 `tail -f`와 같이 실시간으로 변화는 파일의 내용을
확인해 봅시다.

(예:/var/log/messages,
root 권한 필요)
$ watch -n 1 'tail -n 20 /var/log/messages'
....
(생략)


이번에는 실시간으로 사용자를 확인해 봅시다.
(명령어: w, 2초 간격)
$ watch -d w
....
(생략)


이왕 시작했으니 시스템 프로세스도 실시간으로 확인해 봅시다.

(아파치 프로세스만 보기)
$ watch -d -n 1 'ps -ef | grep httpd | grep -v grep'
....
(생략)


이번에는 netstat 명령어를 사용해서 실시간으로 열려있는
포트(tcp/udp)와 해당 프로그램을 모니터링해 봅시다.

(시스템에 따라서 root 권한 필요함)
# watch -d -n 3 'netstat -atnup'
....
(생략)


마지막으로 앞의 여러가지 명령어를 조합해 봅시다.

- 현재 접속한 모든 사용자 출력
- httpd 프로세스 최근 20개 출력
- /var/log/messages 최근 10 줄 출력
- 추기 2초 간격
- (root 권한이 필요하겠군요)

# watch -d 'w; echo; ps -ef | grep httpd | grep -v grep | tail -n 20;
  echo; tail -n 10 /var/log/messages'
(명령어들을 ';'로 구분함, echo는 공백줄을 출력하기 위해서)


(나머지는 스스로 응용해 보세요..)
(자기만의 쉘스크립트로 작성해 놓으면 편하겠군요..물론 좀 응용해서..)

EOF

출처 http://www.linuxchannel.net/board/read.php?table=alpha&no=15&page=1

2006/09/11 13:38 2006/09/11 13:38
이 글에는 트랙백을 보낼 수 없습니다
웅쓰:웅자의 상상플러스
웅자의 상상플러스
전체 (379)
게임 (5)
영화 (2)
기타 (23)
맛집 (5)
영어 (2)
대수학 (3)
형태소 (5)
Hacking (9)
Linux (112)
HTML (48)
Application_developing (48)
Web_developing (102)
Window (11)
«   2024/11   »
          1 2
3 4 5 6 7 8 9
10 11 12 13 14 15 16
17 18 19 20 21 22 23
24 25 26 27 28 29 30
  1. 2016/01 (1)
  2. 2015/12 (3)
  3. 2015/10 (3)
  4. 2015/03 (2)
  5. 2015/01 (4)