레이블이 PHP인 게시물을 표시합니다. 모든 게시물 표시
레이블이 PHP인 게시물을 표시합니다. 모든 게시물 표시

2016년 2월 23일 화요일

PHPUnit


PHPUnit이란, 단위 테스트를 할 수 있는 PHP용 Unit test 프레임워크이다.

Laravel framework도 PHPUnit으로 단위 테스트를 할 수 있게 구현되어 있다.

PHPUnit 설치방법

      먼저, php가 설치되어 있는 경로를 찾는다.

      필자는, C:\xampp\php이다.

      그 다음, https://phpunit.de/manual/current/en/installation.html 접속한 후
      phpunit.phar을 다운 받는다.

      다운 받은 파일을 C:\xampp\php 로 이동시킨다.


      마지막으로 배치 파일만 만들면 된다.

      배치 파일이란, 확장자가 .bat 또는 .cmd를 가진 텍스트 파일로써
                          문법, 적절한 명령어들의 모음이다.
     
      명령 프롬프트창을 열고, C:\xampp\php로 이동한다.
     
      echo @php "%~dp0phpunit.phar" %* > phpunit.cmd 입력 후, exit.

      새로운 명령프롬프트창을 열고 phpunit --version을 해보자.
      하기의 그림과 같이 설치가 된 것을 확인할 수 있다!

2016년 2월 16일 화요일

Smarty 설치하기


Smarty란, PHP 템플릿 엔진이다.

템플릿 엔진이란, 데이터베이스에 있는 정보들과 웹 템플릿에 있는 텍스트를 합쳐서
                      웹 문서로 만들어주는 역할을 의미한다.

Smarty 설치법

      Smarty를 설치하기 위해선 PHP 5.2 이상의 버전이 필요하다.

      http://www.smarty.net/docs/en/ 접속한 후에, 다운로드를 한다.

      압축을 해제한 후, libs 폴더 안에 있는 파일들을 모두 복사한다.


      다음으로, php.ini 파일을 열어서 include_path를 확인한다.


      빨간 줄이 기본 path인데, 필자는 기본 path에 Smarty라는 폴더를 생성한 후,
      새로 만든 폴더의 경로를 추가해주었다.

      Smarty폴더에 아까 복사한 파일들을 붙어넣기 해준다.

      마지막으로, 붙어넣기 한 폴더에 templates, templates_c, configs, cache 폴더를 생성!


      이것으로 모든 설치는 끝났다.

실제로 실행이 잘 되는 지 테스트를 해보자.

      templates 폴더에 index.tpl 파일을 생성한 후, 하기의 그림과 같이 실행을 하면


      Hello, Smarty! 라고 출력이 되는 걸 확인 할 수 있을 것이다!

2016년 1월 31일 일요일

PHP의 정규표현식(Regular Expression)

PHP의 정규표현식

cheat sheet: http://ult-tex.net/info/perl/

PHP의 정규표현식은 구분자로 시작해서 구분자로 끝난다.

      /php/ --->>> '/'가 구분자이다.
                         구분자는 정규표현식과 정규표현식이 아닌 것을 구분해주기 위함이다.
                         
                         '/'대신, '#', '+', '%' 같은 특수기호도 사용가능

      /jsp/i --->>> 'i'는 대소문자를 구분하지 않겠다는 의미

      /body$/m --->>> '$'은 가장 끝의 경계점을 의미한다.
                              'm'은 멀티라인이다.

                              ex) everybody
                                   body
                                   body
                                   Onebody

                                    'm'이 없었으면, 제일 마지막에 있는 One뒤의 body가
                                    선택되지만, 'm'으로 인하여 행 마다 있는 body가 다 선택된다.

\b: 단어의 경계를 의미한다.

      \bweb\b --->>> 'web'이라는 독립된 단어를 가리킨다. 즉, 'web'을 가리킴
                               'webscript'에서도 'web'이 있지만 선택되지 않는다.

\s: 공백을 의미한다.

preg_match()의 리턴 값은, 해당 패턴을 찾았으면 1
                                   찾지 못했으면 0
                                   문법적 에러는 false

capturing: preg_match함수의 결과 값으로 데이터를 따로 대입시키기 위해 '()'로 감싸는 것.

      ex) http://www.naver.com/index.html

            preg_match('/http:\/\/([^/]+)/', subject, result)

                  ([^/]+)로 감싸진, www.naver.com이 따로 결과 값으로 대입된다.

capturing할 때, 괄호 안에 '?:'를 기입하면 결과 값에 데이터가 따로 대입되지 않는다.

      ex) http://www.daum.net/index.html

            preg_match('/^(?:http://)?([^/]+)/', subject, result)

                  '^'는 행의 시작점을 의미한다. 만약 '[]'안에 있으면 Not을 의미
                  
                  가장 처음에 http://가 있는 지 판단하는 데, '?' 때문에 없을 경우와
                  존재한다면 1개만 등장하도록 한다.

                  서브패턴안에 '?:' 있으므로, 'http://'는 결과 값에 따로 대입하지 않는다.

                  즉, 결과 값은 www.daum.net

      ex) www.php.net

            preg_match('/[^.]+\.[^.]+$/', subject, result)

                  '[^.]+\.[^.]+$'의 의미는 $때문에 행의 끝에서 부터 본다.
                  
                  '[^.]+'는 '.'이 아닌 텍스트가 1개 이상인 경우, 즉 'net'

                  '\.'는 '.'을 가리키니까, 즉 net의 앞에 있는 '.'

                  '[^.]+'는 '.'이 아닌 텍스트가 1개 이상인 경우, 즉 'php

                  결과는 php.net

capturing할 때, 괄호 안에 ?P<key>으로 할 경우, 결과 값이 연관배열로 대입된다.

      ex) foobar: 2008

            preg_match('/(?P<name>\w+): (?P<digit>\d+)/', subject, result)

                  '\d'는 숫자를 의미

                  '?P<name>'로 인해, <name> 키 값에 foobar이 밸류로 대입

                  '?P<digit>'로 인해, <digit> 키 값에 2008이 밸류로 대입

                  결과는, [name] => boobar, [digit] => 2008

2016년 1월 18일 월요일

정규표현식3

수량자

{~~~}: 중괄호 안에 있는 값이 수량을 의미한다.

      ex) '*'는 {0,}과 같다.
         
          '+'는 {1,}과 같다.

          '?'는 {0,1}과 같다.

*?: '*'뒤에 '?'가 오면, 수량자 0을 의미한다.

      ex) One ring to bring them all and in the darkness bind them

          r.*? --->>> 'r' 하나만을 가리킨다.

            결과 First match: r
                   All matches: r, r, r, r ~~

+?: '+'뒤에 '?'가 오면, 수량자 1을 의미한다.

          r.+? --->>> 'r'과 'r'뒤에 문자 하나를 같이 가리킨다.

            결과 First match: ri
                   All matches: ri, ri, rk

??: '?'뒤에 '?'가 오면, 수량자 0을 의미한다.

          r.?? --->>> 'r'하나만을 가리킨다.

탐욕적인 수량자(Greedy quantifier)

      ex) <div>test</div><div>test2</div>

          <div>.+</div> --->>> <div>test</div><div>test2</div> 모두 선택된다.
          이렇게 맨 앞의 <div>와 맨 뒤의 </div>사이에 있는 모든 게 선택되는 것을
          탐욕적인 수량자라고 한다.

게으른 수량자(Lazy quantifier)

          <div>.+?</div> --->>> <div>test</div> 만 선택된다.
          이렇게 맨 앞의 <div>와 처음으로 나타난 </div>까지 선택되는 것을
          게르은 수량자라고 한다.

Character class

      ex) A1 B2 c3 d_4 e:5 ffGG88--__--

          \w --->>> 알파벳, 숫자, 언더라인('_')을 가리킨다
                              (\w를 'word'라고 부름)

            결과 First match: A
                   All matches: A1, B2, c3~~~

          \w* --->>> word를 0개 or 1개 or 2개 이상을 가리킨다.

            결과 First match: A1
                   All matches: A1, B2, c3, ~~~

          [a-z]\w* --->>> word앞에 a~z중 하나가 오는 것을 가리킨다.

            결과 First match: c3
                   All matches: c3, d_4, e, ffGG88
     
          [A-z0-9_] --->>> \w와 같다.

          \W --->>> 대문자 'W'는 word의 반대를 가리킨다.
                              (공백, 특수문자, '.', ',' 등)

          \d --->>> 0~9까지의 숫자를 가리킨다.

          \D --->>> 소문자 'd'의 반대 즉, 숫자가 아닌 것을 가리킨다.
   
      ex) Ere iron was b

          \b: 어떠한 단어를 식별할 수 있다.

          \b\w --->>> word가 시작되는 곳을 가리킨다.

            결과 First match: E
                   All matches: E, i, w, b

          \w\b --->>> word가 끝나는 곳을 가리킨다.

            결과 First match: e
                   All matches: e, n, s, b

          \b\w\b --->>> 단어가 하나인 것을 가리킨다.

            결과 First match: b

      ex) cat concat

          \bcat --->>> 앞에 있는 'cat'을 가리킨다.

          cat\b --->>> 뒤에 있는 'cat'을 가리킨다.

      \A: 시작점을 의미한다.

          \A.. --->>> 앞에 있는 'ca'을 가리킨다.

      \Z: 제일 뒤에 있는 경계를 의미한다.

          ..\Z --->>> 뒤에 있는 'at'를 가리킨다.

Assertions

      ex) AAAX----aaax---111---BBBXCCC

          \w+(?=X) --->>> word가 1개 or 1개 이상이어야 하고,
                                    옵션으로 대문자 'X' 앞까지 선택하라는 의미.

                                    '?='는 특수기호이다.
                                    문자열을 검색하는 데 'X'를 쓰지만, 선택할 때는 'X'를 제외.

          결과 First match: AAA
                 All matches: AAA, BBB

          \w+(?=\w) --->>> word가 1개 or 1개 이상이어야 하고,
                                      옵션으로 word가 아닌 문자가 있을 경우,
                                      word가 아닌 문자 앞에 있는 word를 기준으로,
                                      해당 기준까지 선택하라는 의미(기준을 선택되지 않음)

          결과 First match: AAA
                                 ('AAAX-'에서 'X'뒤에 '-'가 word가 아닌 문자이다.
                                  '-'의 앞 문자인 'X'를 기준으로 해당 기준까지 선택되고
                                  'X'는 선택을 받지 못한다.)
                 All matches: AAA, aaa, 11,  BBBXCC

2015년 12월 8일 화요일

정규표현식2

이어서 정규표현식의 서브패턴에 대해 알아보겠습니다.

|(파이프): 문자열 중에서 원하는 텍스트를 선택하고 싶은 경우 사용

      ex) Monday Tuesday Friday 문자열

           (on|ues|rida) --->>> 문자열 중에서 on이나 ues나 rida 추출하고 싶을 경우
                                      
                                       결과 First match: on 
                                              All matches: on, ues, rida

           (Mon|Tues|Fri)day --->>> 공통되는 부분을 서브패턴으로 빼서 추출하는 경우
                                      
                                       결과 First match: Monday
                                              All matches: Monday, Tuesday, Friday

           ..(id|esd|nd)ay --->>> 패턴 앞에 두개의 문자와 ay가 끝인 문자 추출하는 경우
                                                                                                 
                                       결과 First match: Monday('nd'앞에 'Mo'가 있고, 'ay'로 끝)
                                              All matches: Monday, Tuesday, Friday


수량자: 어떠한 패턴이 얼만큼 등장하는 가 숫자로 나타내는 경우

수량자에는 총 3가지가 있다 --->>> '*', '+', '?'

*(별): '*' 앞에 등장하는 문자가 몇번 등장하는지 판단 (0개 ~ 여러개)

      ex) aabc abc bc 문자열

           a*b --->>> b를 기준점으로 보고, b앞에 a가 있을 수도 있고, 없을 수도 있다.
                           즉, a가 0개, 1개, 여러 개여도 만족!

                           결과 First match: aab
                                  All matches: aab, ab, b

+(더하기): '+' 앞에 문자가 1개 ~ 여러개 인 경우

           a+b --->>> b앞에 a가 오는데, 반드시 1개 이상이여야 한다.

                           결과 First match: aab
                                  All matches: aab, ab

?(물음표): '?' 앞에 문자가 없거나, 1개 인 경우

           a?b --->>> b앞에 a가 없는 경우나 1개 인 경우

                           결과 First match: ab (예문 aabc에서 맨 앞 a가 빠지고 ab가 선택됨)
                                  All matches: ab, ab, b

[]: 선택자 패턴의 후보군을 지정하는 경우

      ex) -@- ***--"*"--***-@- 문자열

           [-@]* --->>> 문자열 중 '-'나 '@' 중 하나만 있더라도 선택된다.
                             
                              결과 First match: -@-
                                     All matches: -@-, --, --, -@-

           [^ ]+ --->>> []안에 '^'는 Not을 의미하므로, 공백이 아닌 것을 가리킨다.
                             즉, 공백이 아닌 것이 1개 이상인 경우

                             결과 First match: -@-
                                    All matches: -@-, ***--"*"--***-@-

{}: 원하는 수량을 정확하게 지정하는 경우

      ex) .{5} --->>> 5가 수량자이다. 어떤 문자건 간에 5개의 문자를 선택한다는 의미

           One ring to bring 문자열에서 .{5}의 결과 값은 One r

           One ring to bring them all and in the darkness 문자열

           [els]{1,3} --->>> 'e'나 'l'이나 's'중 한 글자를 의미하고, 
                                  해당하는 문자가 1개 ~ 3개를 가리키는 의미

                                  결과 First match: e
                                         All matches: e, e, ll, e, ess 
                             
           AB{0,}A --->>> 앞에 A와 뒤 A 사이에 B가 0개 ~ 여러 개를 의미(즉, 0개 이상)

2015년 11월 29일 일요일

정규표현식

정규표현식이란, 어떤 문자를 처리하기 위한 언어.

여기서 처리란, 어떠한 해당 텍스트가 존재하는 지 판단하고, 다른 텍스트로 치환을 의미.

정규표현식은 대소문자를 구분한다.


^(캐럿): 캐럿 뒤에 나오는 문자열이 소스 상에서 시작 위치에 있는 경우.
     
            ex) who is who라는 텍스트가 있으면, ^who --->>> 첫째 who

$: 소스 상의 끝에 위치하는 문자열을 가리키는 경우

            ex) who is who라는 텍스트가 있으면, who$ --->>> 마지막 who

\: 특수문자를 가리키는 경우

            ex) \$ --->>> \뒤에 오는 $를 단순한 문자로 인식하게끔 설정(escape)

.: 어떠한 문자건 상관없이 그 문자, 공백, 특수문자를 가리키는 경우

            ex) ...... --->>> .의 개수만큼인 6개의 문자를 가리킴

                O.K. 라는 텍스트가 있으면, \..\. --->>> K

[]: []안에 해당하는 문자를 가리키는 경우

            ex) How do you do? 라는 텍스트가 있으면, [oyu] --->>> o

                 []를 하나의 문자로 인식하기 때문에, [dH]. --->>> Ho

                 [owy][yow] --->>> ow(첫 대괄호에 o, 두번째 대괄호에 w)

                 [c-k] === [cdefghijk]

                 [C-Ka-d2-6]는 C~K, a~d, 2~6까지를 의미

[]안에 캐럿이 있으면 not을 의미

                 [^CDghi45] --->>> 대괄호 안에 해당하지 않는 문자를 추출

결혼이민비자 신청방법(F-6-1 국민의 배우자)

 제가 일본인 여자친구와 결혼 후, 한국에 귀국하기 위해 신청한 결혼이민비자에 대하여 작성해보도록 하겠습니다. 필자는 일본에서 근무하고 있었으며, 한국에서의 소득은 없었습니다. 결혼이민비자를 신청한 날짜는 2021-04-21 이며, 사증이 발급된 날짜...