RSS구독하기:SUBSCRIBE TO RSS FEED
즐겨찾기추가:ADD FAVORITE
글쓰기:POST
관리자:ADMINISTRATOR
'2006/09/16'에 해당되는 글 2
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
이 글에는 트랙백을 보낼 수 없습니다
웅쓰:웅자의 상상플러스
웅자의 상상플러스
전체 (379)
게임 (5)
영화 (2)
기타 (23)
맛집 (5)
영어 (2)
대수학 (3)
형태소 (5)
Hacking (9)
Linux (112)
HTML (48)
Application_developing (48)
Web_developing (102)
Window (11)
«   2006/09   »
          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)