다음 이전 차례

8. PHP 함수들과 예제

8.1 PHP 함수

PHP 함수는 900여가지 이상이 현재 존재합니다.    여기서는 모두를 다루지 않고 자주 사용하며 꼭 필요한 함수 부분만 설명 하겠습니다.    이 장에서 사용하는 소스는 대부분 간단한 소스입니다.    하지만 조금 난해한 소스의 경우 cd에 포함시켰습니다.

수학함수

1. Abs(x)

    절대값을 리턴해 주는 함수입니다. 실수 값을 입력하면 실수 값을 리턴합니다. 
    나머지의 경우 int로 리턴합니다.

그림. 8-1 abs( )의 예
    9행의 abs() 함수를 출력해 줍니다. 이 예는 Form문을 사용했는데요 앞으로의 설명에도 이form문을 자주
    사용하게 됩니다.

그림.8-2 abs( ) 결과
    음의 실수형으로 입력 했을 경우 양의 실수로 리턴하는 걸 볼 수 있습니다.


2. Acos(x)

    아크 코사인 값을 리턴해 줍니다. 대입하는 값이 (-1 ~ 1) 사이가 아니면 NAN 값을 리턴합니다. (X는 라디안 값)

그림. 8-141 Acos, Asin, Atan 함수 예

그림. 8-142 Acos, Asin, Atan 함수 결과
    위에서 입력란에 "1"을 입력 했을 경우 Acos, Asin, Atan 함수의 수행 결과를 볼 수 있습니다.

  
3. Asin(x)

    아크 사인 값을 리턴해 줍니다. 대입하는 값이 (-1 ~ 1) 사이가 아니면 NAN값을 리턴합니다. (X는 라디안 값)

           
4. Atan(x)

    아크 탄젠트 값을 리턴합니다. (X는 라디안 값)

                     
5. Atan2(x,y)

    x와 y사이의 아크 탄젠트 값을 리턴합니다. 이것은 Atan(y/x) 한 것과 같습니다.(X는 라디안 값)

그림. 8-143 Atan2 함수 예

그림. 8-144 Atan2 함수 결과


6. base_convert(string num, int fromnum, tonum)

    string num을 fromnum에서 tonum으로 변환한 후 출력합니다.

     
7. bindec(string bin_string)

    바이너리를 10진수로 전환해서 출력해 줍니다. 반대의 경우는 decbin(int num)입니다.

그림. 8-145 bindec 함수 예

그림. 8-146 bindec 함수 결과

    위에서 2진수 "1010"을 입력하면 10진수 "10"을 출력 하는 것을 확인 할 수 있습니다.

  
8. ceil(float num)

    float num보다 작지않은 최소 정수를 출력해 줍니다.

    유사한 반대 함수는 floor(x)입니다.

그림. 8-147 ceil 함수 예

그림. 8-148 ceil 함수 결과

9. Cos(x)

    코사인 값을 리턴해줍니다 (X는 라디안 값입니다.)

      
10. Dechex(int num)

    10진수에서 16진수로 리턴해줍니다. 반대의 경우는 Hexdec(string hex_num)입니다.

그림. 8-149 Cos, Dechex 함수 예

그림. 8-150 Cos, Dechex 함수 결과

    위에서 10진수 "44"를 입력한 결과 16진수 "2c"가 출력 되는 것을 볼 수 있습니다.

 
11. Log(float x)

    자연 로그 값을 리턴해 줍니다. 

           
12. Log10(float x)

    상용 로그 값을 리턴해 줍니다.

그림. 8-151 Log, Log10 함수 예

그림. 8-152 Log, Log10 함수 결과

13. Max(x , y , …)

    주어진 값을 비교해서 최대값을 리턴해 줍니다.
    만약 주어진 값 중 하나 또는 그 이상이 double이면 double로 계산하며 이 값으로 리턴합니다.
    만약 double 값이 없다면 정수로 계산되며 이 값으로 리턴합니다.

            
14. Min(x , y , …)

    주어진 값을 비교하여 최소 값을 리턴해 줍니다.
    만약 주어진 값 중 하나 또는 그 이상이 double이면 이 값으로 계산하며 이 값으로 리턴합니다. 
    만약 double값이 없다면 정수로 계산되며 이 값으로 리턴합니다.

그림. 8-153 Max, Min 함수 예

그림. 8-154 Max, Min 함수 결과

15. mt_rand(int최소값 , int최대값)

    정수 값을 비교해서 더 좋은 난수 값을 리턴해 줍니다.

     
16. mt_srand(int x)

    주어진 정수의 더 좋은 난수의 초기 값을 리턴해 줍니다.

그림. 8-155 mt_rand, mt_srand 함수 예

그림. 8-156 mt_rand, mt_srand 함수 예

17. mt_getrandmax(void)

    최대의 난수 값을 리턴해 줍니다.

     
18. number_format(float_num, int_dec, string dec_point, string thousands_sep)

    주어진 값에 1000단위와 소수점 수에 관해 "," 와 "." 을 넣어 리턴해 줍니다.

그림. 8-157 number_format 함수 예

그림. 8-158 number_format 함수 결과

    위에서 소스 5행을 보면 "3"의 경우 1000단위로 숫자를 구분 하며 소수점 이하는 "~"로
    표현 하는 것을 볼 수 있습니다.

 
19. Exp(x)

    e의 X제곱값을 리턴해 줍니다.

           
20. Floor(x)

    주어진 값을 넘지 않는 최소값을 리턴합니다.

그림. 8-159 Exp, Floor 함수 예

그림. 8-160 Exp, Floor 함수 결과

    위에서 floor_num 입력란에 "4.44"을 입력 했을 경우 최소의 정수인 "4"을 출력하는
    것을 볼 수 있습니다.

 

21. getrandmax(void)

    난수의 최대값을 리턴합니다.

           
22. Srand(int x)

    난수 생성시의 초기값을 리턴합니다.

                     
23. rand(int 최소값, int최대값)

    주어진 값을 비교해 더 좋은 난수 값을 리턴합니다.

그림. 8-161 srand, rand 함수 예

그림. 8-162 srand, rand함수 결과

24. Octdec(x)

    주어진 값을 8진수에서 10진수로 변환해서 리턴합니다.

     
25. Pi(x)

    주어진 값을 파이 값으로 변화해서 리턴합니다.

                   
26. Pow(x,y)

    x의 y승 값을 리턴해 줍니다.

그림. 8-163 Octdec, Pi, Pow 함수 예

그림. 8-164 Octdec, Pi, Pow함수 결과

27. round(x)

    x의 반올림한 값을 리턴해 줍니다.

     
28. sin(x)

    사인 값을 리턴해 줍니다.

                   
29. sqrt(x)

    x의 제곱근을 리턴합니다.

그림. 8-165 round, sin, sqrt 함수 예

그림. 8-166 round, sin, sqrt 함수 결과

30. tan(x)

    탄젠트 값을 리턴해 줍니다.
    여기서 대부분의 함수는 고등학교나 중학교 때 배운 수학의 기억이 있다면 간단히 이해가 될 것입니다.
    그 중 난수 발생에 대한 예를 한번 더 보이겠습니다.
    난수는 주로 임의의 수를 무작위로 추출할 때 사용합니다. 복권 당첨 경우를 생각하면 될 것입니다. 
    먼저 주어진 수의 가장 좋은 난수를 찾고 다시 이 값을 다른 값과 비교해 무작위로 난수를 발생 하는 등
    여러 가지 방법이 있습니다.

그림.8-3 수학 함수 예
    역시 폼 문을 사용했습니다. 폼 문은 단순한 것부터 복잡한 것 까지 종류가 여러 가지 있고 배우기 또한
    쉽습니다. 앞으로의 소스를 보면서 익히기 바랍니다.

그림.8-4 수학 함수 결과

    결과를 보면 43의 제일 좋은 난수 값을 얻은 다음 "324"와 비교해서 다시 가장 좋은 난수를 표시해 줍니다.

파일시스템 함수

1. basename(string path)

    패스중에 name 부분을 구해 줍니다. 관련 함수는 dirname() 입니다.

그림. 8-5 basename 함수 예

그림. 8-6 basename 함수 결과

2. chgrp(string filename , mixed group)
 
    파일의 그룹을 바꾸어줍니다. 

  
3. chmod(string filename, int mode)

    해당 파일의 모드를 바꾸어 줍니다.

         
4. chown(string filename, mixed user)

    해당 파일의 소유자를 바꾸어 줍니다.
    관련 함수는 chmod() 입니다.

             
 * 참고 : 2, 3, 4 번의 경우 실제 웹 서버의 루트권한이 있는 경우 바꿀 수 있으며 해당 파일의 주인일 경우 가능합니다.
<TIP>----------------------------------------------------------------------------

Chmod 권한 설정과 구조

해당하는 디렉토리와 파일에 관한 권한 설정은 리눅스에서 중요한 부분 입니다. 
여기서 쉽게 이해하고 설정하는 방법을 보여 드리겠습니다.
drwxrwxrwx - 이것은 차례로 디렉토리(d), 소유자(rwx), 그룹(rwx), others(rwx)를 표현 하는 것입니다.
물론 디렉토리가 아닐 경우 "-" 로 표현되며 나머지 부분도 마찬가지 입니다.

r - 읽기, w - 쓰기, x - 실행 을 표현합니다.

  
그럼, 간단한 예로 특정 파일의 권한을 설정 보겠습니다.

#chmod 777 test.txt    -   test.txt 파일의 권한을 777로 합니다.

여기서 777은 소유자,그룹, others의 8진수를 더한 숫자 이며 -rwxrwxrwx 입니다.
즉, 777 은  
소유자(400 + 200 + 100), 그룹(040 + 020 + 010), others(004 + 002 + 001) 을  더한 값 입니다.

   
각 모드별 8진수를 정리 하면 아래와 같습니다.

400 - 소유자 읽기( r ), 200 - 소유자 쓰기( w ), 100 - 소유자 실행( x )
040 - 그룹 읽기( r ), 020 - 그룹 쓰기( w ), 010 - 그룹 실행( x )
004 - others 읽기( r ), 002 - others 쓰기( w ), 001 - others 실행( x )
----------------------------------------------------------------------------------------------------
5. clearstatcache(void)

    파일의 cache stat를 clear 해줍니다.
    즉, 마지막으로 메모리에서 불리어진 결과를 이 함수를 사용해서 제거해 줍니다.
    관련 함수로는 stat() , lstat() , file_exists() , is_writeable() , is_readable() , 
    is_executable() , is_file() , is_dir() , is_link , filectime() , fileatime() , filemtime()
    fileinode() , filegroup() , fileowner() , filesize() , filetype() , fileperms() 등입니다.

          
6. copy(string source, string dest)

    순서대로 원본 파일에서 바꿀 파일로 카피해 줍니다. 관련 함수로는 rename() 입니다.

그림. 8-167 copy 함수 예

그림. 8-168 copy 함수 결과

    위에서 path의 "/home/ftp/test" 디렉토리와 "test1.txt" 파일의 chown는 nobody.nobody 이며
    chmod는 777로 설정한 상태 입니다. 
    아파치 서버에서 copy함수를 실행 하기 위해서는 copy하고자 하는 디렉토리와 파일의 권한에 연관 합니다. 
    출력이 "1"인 것은 참을 말합니다.

 
7. unlink(string filename)

    파일을 제거하는 함수입니다. 관련 함수로는 디렉토리를 지우는 rmdir()입니다. 

그림. 8-169 Unlink 함수 예

그림. 8-170 Unlink 함수 결과

    위에서 Unlink함수 역시 권한에 연관해서 실행 되어지며 "1"은 해당 파일이 삭제 되었음을 나타냅니다.

 
8. unset(mixed var)

    함수의 값을 지워 줍니다. 관련 함수로는 isset()과 empty()입니다.

    
9. dirname(string path)

    패스의 디렉토리 이름을 리턴해 줍니다.

그림. 8-171 dirname 함수 예

10. diskfreespace(string directory)

    디렉토리의 사용 가능한 남은 용량을 리턴해 줍니다.

그림. 8-7 diskfreespace( ) 함수 예

그림. 8-8 diskfreespace( ) 함수 결과

11. fclose(int fp)

    파일 포인터를 닫습니다.

  
12. feof(int fp)

    파일 포인터가 EOF인지 검사합니다.

         
13. fgetc(int fp)

    파일 포인터에서 문자를 읽습니다.

            
14. fgetcsv(int fp, int lengyh, string [delimiter])

    파일에서 csv 필드로 된 라인을 읽어와 분석합니다.

                         
15. fgets(int fp, int length)

    파일 포인터에서 한 라인을 가져 옵니다.

그림. 8-173 fgets 와 관련 함수들 예

그림. 8-174 fgets 와 관련 함수 결과

    위에서 "test1.txt" 파일의 내용은 "ff i love cry" 입니다.
    먼저 fgetc( ) 함수에 의해 f가 출력 되고 다음 파일 포인트부터 fgets( ) 함수에 설정한 17byte 길이
    만큼 문자를 출력 합니다.

 
16. fgetss(int fp, int length)

    파일 포인터에서 한 라인을 읽어 들여 html을 코드들을 떼어 냅니다. 그리고 php를 읽어 들입니다.

그림. 8-175 fgetss 함수 예

그림. 8-176 fgetss 함수 결과

    위 소스를 보면 5행의 fopen 함수를 이용해 "test2.txt" 파일을 읽기 모드( r ) 로 엽니다.
    다음 11행의 while문은 파일 포인트가 끝이 아닐 때 까지 반복합니다. 
    출력된 결과를 보면 해당 파일의 내용 중 html 코드는 제거되고 PHP 코드와 문자만 출력 되는 것을 볼
    수 있습니다.

 

17. file(string filename)

    한 파일을 읽어 들여 배열로 리턴해 줍니다.

그림. 8-177 file 함수 예

그림. 8-178 file 함수 결과

    위 소스에서 12행은 file 함수의 수행 결과(8행) 파일의 내용 중 처음 줄에 해당 하는 글을 출력 합니다.  


18. file_exists(string filename)

    해당 파일이 존재 하는지 여부를 리턴해 줍니다.

그림. 8-9 file_exists( ) 함수 예
    여기서 작성한 소스는 test.php 파일로 작성해서 결과를 실행 했습니다.
    Cd안의 소스의 경우 해당 함수 순으로 나열되어 있습니다.
    8행의 변수는 해당 디렉토리에 파일이 존재 하는지 여부를 확인 하고 아래 12행의 조건을 만족하는
    부분에서 출력 됩니다.

그림. 8-10 file_exists( ) 함수 결과

19. fileatime(string filename)

    해당 파일에 마지막으로 액세스한 시간을 리턴해 줍니다.

그림.8-11 fileatime( ) 함수 예

그림. 8-12 fileatime( ) 함수 결과

20. filectime(string filename)

    해당 파일의 inode가 마지막으로 변경된 시간을 리턴해 줍니다.

그림. 8-13 filectime( ) 함수 예

그림. 8-14 filectime( ) 함수 결과

    위 결과에서 시간은 유닉스 타임입니다.

 
21. filegroup(string filename)

    해당 파일 소유주의 그룹 id를 리턴해 줍니다.

    
22. fileinode(string filename)

    해당 파일의 inode num을 리턴해 줍니다.

그림. 8-15 fileinode( ) 함수 예

그림. 8-16 fileinode( ) 함수 결과

23. filemtime(string filename)

    해당 파일의 마지막으로 수정된 시간을 리턴해 줍니다.

그림. 8-17 filemtime( ) 함수 예

그림. 8-18 filemtime( ) 함수 결과

24. fileowner(string filename)

    해당 파일의 소유주 id를 리턴해 줍니다.

그림. 8-19 fileowner( ) 함수 예

그림. 8-20 fileowner( ) 함수 결과

25. fileperms(string filename)

    해당 파일의 퍼미션(권한)을 리턴해 줍니다.

그림. 8-21 fileperms( ) 함수 예

그림. 8-22 fileperms( ) 함수 결과

    위 결과는 비트로 출력된 결과입니다.
    이 함수를 이용해서 파일의 읽기, 쓰기, 실행 여부를 확인하기 위해서는 bit 값으로 조건을 만들어야 됩니다.

 
26. filesize(string filename)

    해당 파일의 크기를 리턴해 줍니다.

그림. 8-23 filesize( ) 함수 예

그림. 8-24 filepsize( ) 함수 결과

27. filetype(string filename)

    해당 파일의 type를 리턴해 줍니다.

그림. 8-25 filetype( ) 함수 예

그림. 8-26 filetype( ) 함수 결과

28. flock(int fp , int operation)

    해당 파일 포인터로의 접근을 제어할 수 있습니다.

    옵션에는 4가지가 있는데 
                
      1. reader 
      2. writer  
      3. shared or exclusive 
      4. flock()
                  
    등이 있습니다.

   
29. fopen(string filename , string mode)

    해당 파일을 열거나 URL을 엽니다.

    옵션에는 

        r - (읽기만 가능)파일 포인터의 시작은 파일의 시작부분 ,  
        r+ - (읽기와 쓰기 가능)r과 동일 ,  
        w - (쓰기만 가능)파일 포인터의 시작은 파일의 시작부분이며 그리고 파일을 제로 길이로 자르고
             파일이 존재하지 않을 땐 그것을 만들려고 시도합니다. 
        w+ -(읽기와 쓰기 기능) w와 동일합니다.
        a - (쓰기 기능)파일 포인터의 장소는 파일의 끝부분이며, 만약 파일이 존재 하지 않으면 만들려고
             시도합니다.
        a+ - (읽기와 쓰기) a와 동일합니다.


30. fpassthru(int fp)

    파일 포인터에서 EOF를 읽어 들여(남아 있는 자료를 읽어) 출력합니다.

그림. 8-179 fpassthru 함수 예

그림. 8-180 fpassthru 함수 결과

    위에서 test.txt 파일의 내용은 "i love cry ~ ^^" 입니다.
    먼저 fgetc( ) 함수의 수행으로 "i" 문자를 출력 하고 다음 나머지 문자열을 fpassthru( )
    함수에 의해 출력 합니다.

 

31. fputs(int fp , string str , int [length])

    해당 파일 포인터에 쓰기 기능을 해줍니다. 옵션으로 문자열을 제어합니다.
    Length만큼 쓸 수 있습니다. 없을 경우는 상관 없습니다.

그림. 8-181 fputs 함수 예

그림. 8-182 fputs 함수 결과

    위 소스 5행의 fopen( ) 함수를 이용해 test.txt 파일의 내용을 "a+" 모드로 엽니다.
    이것은 읽기와 쓰기 모드 이며 글을 추가할 경우 마지막 파일 포인트에서 추가 합니다.
    7행의 fputs( ) 함수는 14byte만큼 입력된 글을 test.txt 파일에 추가 합니다.

 

32. fread(int fp , int length)

    파일을 length byte 만큼 binary로 읽어 들입니다.

그림. 8-183 fread 함수 예

그림. 8-184 fread 함수 결과

    위 소스 7행을 보면 fread( ) 함수는 test.txt 파일 내용 중 14byte만큼 문자를 읽어 출력 하는 것을
    볼 수 있습니다.

 

33. fseek(int fp , int offset)

    파일 포인터를 옮기고 리턴해 줍니다.

           

34. ftell(int fp)

    fp를 참조해 파일포인터의 위치(읽고 쓰는 위치)를 리턴해 줍니다.

그림. 8-185 ftell 함수 예

그림. 8-186 ftell 함수 결과

    위 소스를 보면 7행에서 fread( ) 함수가 test.txt 파일의 내용을 16byte만큼 읽었습니다.
    그리고 14행의 ftell( ) 함수로 현재 파일 포인트 위치를 보면 "16" 임을 알 수 있습니다.
 

35. fwrite(int fp , string string , int [length])

    파일을 binary로 쓰기 기능을 합니다. 만약 length 인자가 주어지면 이것만큼 쓰고 쓰기를 멈춥니다.

그림. 8-187 fwrite 와 readfile 함수 예

그림. 8-188 fwrite 와 readfile 함수 결과

    위 소스에서 5행은 test1.txt 파일을 "a" 모드로 실행 하며 7행은 입력한 문자열을 파일에
    저장 합니다. 9행은 다시 해당 파일의 전체 내용을 출력 합니다.


36. set_file_buffer

    해당하는 파일 포인터에서 파일의 버퍼링을 지정해 줍니다.

           
37. is_dir(string filename)

    해당하는 파일 이름이 존재하고 디렉토리인지 여부를 리턴해 줍니다.

그림. 8-27 is_dir( ) 함수 예

그림. 8-28 is_dir( ) 함수 결과

    위 결과에서 해당 함수가 11행의 조건에 해당 하므로 13행의 글을 출력합니다.

  
38. is_executable(string filename)

    해당 파일 이름이 존재 하고, 실행 가능한 것인지를 리턴해 줍니다.

그림. 8-29 is_executable( ) 함수 예

그림. 8-30 is_executable( ) 함수 결과

    8행의 변수 값이 파일이 아니고 실행 할 수 없는 디렉토리이기 때문에 18행의 결과를 출력합니다.


39. is_file(string filename)

    해당 파일 이름이 존재하고, 일반적인 파일인지 여부를 리턴해 줍니다.

그림. 8-31 is_file( ) 함수 예

그림. 8-32 is_file( ) 함수 결과

40. is_link(string filename)

    해당 파일 이름이 심볼릭 링크인지 여부를 리턴해 줍니다.
    아래 소스는 56번 심볼릭 생성 함수를 사용해서 보였습니다.

그림. 8-33 is_link( ) , symlink( ) 함수 예

그림. 8-34 is_link( ) , symlink( ) 함수 결과

    심볼릭 링크의 경우 원본 파일을 링크 시켜주는 역할을 합니다.
    이것은 삭제해도 무방한 파일이며 링크를 이용해 보다 편하게 작업할 수 있습니다. 
    위 심볼릭 생성 함수의 경우 해당 디렉토리의 권한이 있을 때만 생성 가능합니다.

 
42. is_readable(string filename)

    해당 파일 이름이 있고, 이것이 읽기 가능한 파일 또는 디렉토리 인지 여부를 리턴해 줍니다.

그림. 8-189 is_readable 함수 예

그림. 8-190 is_readable 함수 결과

    위 소스에서 5행의 수행으로 10행과 17행의 조건을 검색 합니다.
    즉 is_readable( ) 함수로 전달 되어온 파일이나 디렉토리가 읽기 가능한지 여부를 검사 하고 해당 조건의
    글을 출력 합니다.

 
43. is_writeable(string filename)

    해당 파일 이름이 있고, 이것이 쓰기 가능한 파일인지 여부를 리턴합니다.
    만약 디렉토리에 쓰기를 체크 하려면 파일 이름 인자에 디렉토리명을 적으면 됩니다.

그림. 8- 192 is_writeable 함수 예

그림. 8-192 is_writeable 함수 결과

44. link(string target , string link)

    hard 링크를 만들어 줍니다.
    hard링크의 경우 심볼릭 링크와 달리 디렉토리는 링크 할 수 없으며 원본 데이터와 링크는 같이 공존하므로
    링크를 삭제하면 원본도 삭제 됩니다.

    
45. linkinfo(string path)

    해당 패스에 대한 링크 정보를 리턴해 줍니다.

                  
46. mkdir(string pathname , int mode)

    패스 이름에 해당하는 디렉토리를 모드인자로 만들어 줍니다.

                            
47. pclose(int fp)

    해당 process 파일 포인터를 닫습니다.

                                          
48. popen(string command , string mode)

    해당하는 process 파일 포인터를 열어 줍니다.

                                                    
49. readfile(string filename)

    해당 파일을 읽어 들여 출력합니다.
    만약 파일 이름 인자가 http:// , ftp:// 일 경우 해당 하는 사이트에 접속해서 그 파일에  접근합니다. 

                                                                     
50. readlink(string path)

    심볼릭 링크의 내용을 반환해 줍니다.

                                                                                   
51. rename(string oldname , string newname)

    파일 이름을 바꾸어 줍니다.

                                                                                             
52. rewind(int fp)

    파일 포인터의 위치를 파일의 처음 부분으로 표시해 줍니다.

                                                                                                           
53. rmdir(string dirname)

    해당 디렉토리를 제거합니다.

                                                                                                                     
54. stat(string filename)

    해당 파일의 통계를 리턴해 줍니다. 이 통계에는 다음의 내용들이 있습니다.
    device, inode, num of link, 소유자, 그룹, device type if inode device *, size in byte,
    마지막 액세스 시간, 마지막 기록 시간, 마지막 바뀐 시간, blocksize for filesystem i/o *,
    num of blocks allocated

                                                                                                                                    
55. lstat(string filename)

    해당 파일이나 심볼릭 링크의 통계를 리턴해 줍니다.
    통계는 stat의 내용과 같습니다.(배열로 리턴합니다.)

그림. 8-35 lstat( ) 함수 예

그림. 8-36 lstat( ) 함수 결과

    위 결과는 소스 11행 for문에 의해 저장되어진 배열 인자를 차례로 리턴한 결과입니다.
    인자의 경우 54번의 인자 순서 입니다.


56. symlink(string target , string link)

    해당 링크로 타켓을 심볼릭 링크시켜 줍니다.  (40번 참고)

         
57. tempnam(string dir , string prefix)

    해당 디렉토리에 유일한 파일 이름을 만들어 줍니다.
    만약 디렉토리가 존재하지 않는다면, temporary 디렉토리에 파일을 생성합니다.

                  
58. touch(string filename , int time)

    해당 파일의 수정 시간을 설정해 줍니다. time 인자가 없을 경우 현재 시간으로 설정합니다.

그림. 8-37 touch( ) 함수 예

그림. 8-38 touch( ) 함수 결과

    위 결과에서 8행의 time 인자를 주지 않았기 때문에 현재 시간으로 수정해서 리턴합니다.

 
59. umask(int mask)

    현재의 umask로 변경합니다.

    
60. unlink(string filename)

    해당 파일을 지웁니다.

           

여기까지 60개의 파일 시스템 함수를 살펴 보았습니다. 여기서 몇 가지를 예로 더 만들어 보았습니다.
중요한건 여러분들이 이 함수들을 어디에 사용 하는가 하는 것입니다.
물론 이 함수들의 역할이 뭔지를 파악하는 것도 중요합니다.

그림. 8-39 파일 시스템 함수 예

위에서 파일을 열 때 chmod를 읽고 쓸 수 있는 권한 인지 먼저 확인해야 합니다.
나머지 함수들의 사용 부분은 위에 나열한 함수에 관한 설명들을 보면 이해가 빠를 것입니다.
위에서 fopen() 함수의 경우 불러올 파일의 내용은 지워지고 다시 입력한 내용이 저장 되어 집니다.
fwrite() 함수를 이용해서 입력한 내용을 쓰고, 파일을 닫습니다. 그 다음 오늘의 이슈를 출력합니다. 
file() 함수의 경우는 해당 파일의 내용을 배열로 리턴해 줍니다. 위 소스의 경우 잘 보시면 0~3까지 배열을
출력하게끔 했습니다. 물론 입력하는 창도 4행만 입력 가능하도록 만들었습니다.
이것 역시 나중에 이 소스를 바탕으로 홈의 알림판 등에 적용하면 수시로 변하는 중요한 사항들을 쉽게 올릴 수
있습니다. 이 같이 간단한 내용은 데이터베이스 연결보다 더 간결합니다.
위와 같은 방법으로 파일 시스템 함수들을 한번씩 테스트하는 방법 또한 빼먹지 말아야 됩니다.
중요한건 한번 직접 만들어 보는 것입니다.

지금까지 작성된 소스는 처음 test.php로 만들어졌기 때문에 폼 부분에 파일명을 바꿔  줘야 됩니다.
(지금의 파일로) 다른 방법은 파일명을 $PHP_SELF로 바꿔 주는 것입니다.

그럼 결과를 확인해 보겠습니다.

그림. 8-40 파일 시스템 함수 결과

MYSQL 함수

여기에 소개하는 함수는 PHP에서 mysql 서버에 접속해서 작업할 수 있는 함수들입니다.    그래서 여기 나열한 함수는 mysql의 명령어와 유사합니다.    보다 자세한 내용은 http://www.mysql.com 에서 얻을 수 있습니다.    여기서 참고 예제를 위해 test 데이터베이스에 test 테이블을 만듭니다.    이 테이블에는 필드 (content와 tel) 두가지를 다음처럼 만듭니다.

그림. 8-41 mysql test 테이블 생성

그 다음 데이터를 추가합니다.    방법은 여러 가지가 있지만 여기서는 파일을 생성해서 해당 테이블(test)에 넣도록 하겠습니다.    파일의 각 필드는 구분은 tab 키로 구분 합니다.

#cat > test.txt

이홍일 21447483647 박병준 124234234 강호경 21447483647 김주미 21447483647

위와 같이 test.txt 파일을 생성 했다면 이제 test 데이터 베이스의 test 테이블에 파일 내용을 아래와 같이 입력 합니다. Mysql>load data local infile "test.txt" into table test ; 그럼 test 테이블에 추가한 4가지 항목을 확인해봅니다.

그림. 8-42 test 테이블에 추가된 데이터

이제 이렇게 데이터를 입력한 상태에서 PHP에서 접근 가능한 함수를 살펴보겠습니다.

1. mysql_affected_rows (int [int link_identifier])

    최근 질의에 관한 row의 수를 리턴해 줍니다.

그림. 8-43 mysql_affected_rows( ) 함수 예

    위 소스에서 먼저 mysql에 접속은 mysql_connect 함수를 사용 했고, 데이터베이스 선택은 mysql_select_db
    함수를 사용 했습니다. 

    다음 mysql_query 함수를 이용해서 sql 질의를 했고, 나머지 mysql_affected_rows와 mysql_num_rows 함수의
    값을 구했습니다. 

    위 소스 부분들은 일반적이고도 아주 쉬운 문장들이기 때문에 금방 이해 되리라 생각합니다.

그림. 8-44 mysql_affected_rows( ) 함수 결과

    위에서 row의 수가 정확하게 4개 나오는 것을 확인 할 수 있습니다.


2. mysql_close(int [link_identifier])

    mysql 접속을 끊습니다.

                          
3. mysql_connect(string [hostname [:port] [:/path/to/socket] ] , string [username] , string [password] )

    인자의 사용은 위 나열된 그대로 입력하면 되고 차례로 호스트명, 유저 이름, 패스워드를 입력하면 됩니다.


4. mysql_create_db(string database name , int [link_identifier])

    mysql database를 만들어 줍니다. 

                                                      
5. mysql_data_seek(int result_identifier, int row_num)

    첫번째 인자의 결과에서 row_num으로 이동합니다.
        즉 mysql 데이터베이스를 검색한 결과 중 row_num인자에 해당하는 포인터로 이동합니다.

                                                                           
6. mysql_db_query(string database , string query , int[link_identifier])

    mysql query를 수행합니다.  string database 부분은 데이터베이스 명을 적어 줍니다.
    다음 query 인자는 데이터베이스의 검색 명령어를 사용합니다. 
    나머지 인자의 경우는 데이터베이스에 접속하는 명령을 사용합니다.
    대부분 두 번째 세 번째 인자는 변수를 만들어 사용합니다.   

                                                                                                          
7. mysql_drop_db(string database_name , int[link_identifier])

    데이터베이스의 해당 데이터베이스를 제거합니다.
    Mysql에 직접 접속해서 해보신 분은 다 아시겠지만 여기 나열되는 모든 함수는 데이터베이스의 대화식
    모드에서 하는 명령어랑 같다고 생각하면 됩니다. Php에서 mysql의 명령어들을 지원 하는 것입니다. 
    첫번째 인자는 지울 데이터베이스의 이름을 그리고 두번째 인자는 연결 모드를 적습니다.


8. mysql_errno(int [link_identifier])

    이전에 mysql 실행시 발생한 에러번호를 리턴해 줍니다.

                                                                                                                                                   
9. mysql_error(int [link_identifier])

    이전에 mysql 실행시 발생한 에러 메시지를 리턴해 줍니다.

                                                                                                                                                             
10. mysql_fetch_array(int result , int [result_type] )

    인자에 대해 한 줄씩 정렬 수집된 자료를 배열로 리턴해 줍니다.
    이 함수의 경우는 게시판 등의 사용 시에 자주 사용되는 함수입니다.
    대분의 함수도 마찬가지지만 자주 사용됩니다.

그림. 8-45 mysql_fetch_array( ) 함수 예

    위 소스를 보면 변수 $rows를 이용해 for 루프를 실행합니다.
    For문 안에mysql_fetch_array 함수를 사용해 해당 테이블의 한 행을 배열로 만들어 줍니다. 
    그리고 루프가 rows 수 만큼 반복 될 때마다 테이블의 내용을 출력합니다.

그림. 8-46 mysql_fetch_array( ) 함수 결과

11. mysql_fetch_field(int result , int [field_offset])

    해당 필드의 정보를 리턴해 줍니다.

    두 번째 인자의 옵션에는 

        name - column name
        table - column 이 소속된 테이블 name
        max_length - column 의 최대 길이
        not_null - 만약 column이 null로 안되면 1
        primary_key - 만약 column이 primary key면 1
        unique_key - 만약 column이 unique key면 1
        multiple_key - 만약 column이 non-unique key면 1
        numeric - 만약 column이 numeric면 1
        blob - column이 blob형이면 1
        type - column의 type
        zerofill - 만약 column이 zero-filled면 1


12. mysql_fetch_lengths(int result)

    마지막으로 한 줄씩 정렬된 각각의 필드 크기를 배열로 리턴해 줍니다.

                                                                                           
13. mysql_fetch_object(int result , int [result_type])

    한 줄씩 정렬된 자료를 객체로 리턴해 줍니다.

                                                                                                     
14. mysql_fetch_row(int result)

    한 줄씩 정렬된 자료를 배열로 리턴해 줍니다.

                                                                                                                   
15. mysql_field_name(int result , int fild_index)

    특정 필드의 이름을 리턴해 줍니다.  즉, 두 번째 인자의 값에 해당하는 필드이름을 리턴합니다.

                                                                                                                                    
16. mysql_field_seek(int result , int field_offset)

    특정 필드의 offset을 설정합니다.

                                                                                                                                                  
17. mysql_field_table(int result , int field_offset)

    result에서 두 번째 인자에 해당하는 필드가 있는 테이블의 이름을 리턴해 줍니다.


18. mysql_field_type(int result , int field_offset)

    result에서 두 번째 인자에 해당하는 필드의 타입을 리턴해 줍니다.

                                                                                                                                                                          
19. mysql_field_flags(int result , int field_offset)

    result에서 두 번째 인자에 해당하는 필드의 flags를 리턴해 줍니다.

                                                                                                                                                                                    
20. mysql_field_len(int result, int field_offset)

   특정한 필드의 길이를 리턴해 줍니다, 물론 result에서 두 번째 인자에 해당하는 필드의 길이를 리턴합니다.

                                                                                                                                                                                                  
21. mysql_free_result(int result)

    result에 해당하는 스크립터를 실행하면 생기는 메모리 점유를 이 함수를 사용함으로써 실행한 다음 제거해 줍니다.


22. mysql_insert_id(int [link_identifier] )

    최근의 insert문을 실행하고 난 뒤 발생한 id를 리턴해 줍니다

                                                                                                                                                                                                                          
23. mysql_list_fields(string database_name, string table_name, int [link_identifier] )

    mysql result field 들을 나열해 줍니다.
    주어진 데이터베이스와 테이블 이름의 정보로 검색합니다.

                                                                                                                                                                                                                                            
24. mysql_list_dbs(int [link_identifier] )

    mysql server의 database들을 나열해 줍니다.


25. mysql_list_tables(string database, int [link_identifier] )

    mysql database의 테이블들을 나열해 줍니다.
                 

26. mysql_num_fields(int result)

    result의 필드 수를 리턴해 줍니다.
                 

27. mysql_num_rows(int result)

    result에서 row 수를 리턴해 줍니다.


28. mysql_pconnect(string [hostname [:port] [:/path/to/socket] ] , string [username] , string [password] )

    mysql server에 지속적으로 연결해주는 함수입니다.
    인자의 경우는 차례로 호스트명, 사용자명, 패스워드입니다.


29. mysql_query(string query, int [link_identifier] )

    mysql server에 질의를 전송해 줍니다.
    이 함수를 이용해서 대부분의 mysql 검색을합니다.
    첫번째 인자는 mysql의 질의들을 적어주며, 두 번째 인자는 접속 변수를 적어줍니다.


30. mysql_result(int result, int row, mixed [field] )

    result 데이터를 구해서 리턴해 줍니다.


31. mysql_select_db(string database_name, int [link_identifier] )
        
    mysql database를 선택하는 함수 입니다.
    꼭 한번은 사용할 함수이며, 차례로 database 이름, 그리고 접속 변수 등을 나열합니다.

32. mysql_tablename(int result, int i)

    해당 필드의 테이블 이름을 리턴해 줍니다.


위 함수들의 실제 결과 값들이 어떻게 표현되는지 여러 함수를 사용한 예를 보도록 하겠습니다.

그림. 8-47 mysql 함수 예1

위 소스를 보면 16행 ~ 20행의 경우 각각 필드의 이름, 타입, 길이, flag, 테이블명을 나타내 주는 함수들 입니다.
그리고 이전 예제와는 달리 테이블의 데이터들을 출력 할 때mysql_fetch_object 함수를 사용해서 출력해 봤습니다. 
불필요한 html 태그들은 사용하지 않았기 때문에 예제의 결과는 조금 초라할지 모르지만 간단히 스크립트의 형태에
html 태그를 사용하면 더 혼란을 줄 것 같아 예제에는 사용하지 않았습니다.

그림. 8-48 mysql 함수 예1 결과
object를 사용한 결과 역시 array를 사용한 것과 같은 결과임을 확인할 수 있습니다.
그리고 해당 필드(1번)의 정보들을 볼 수 있습니다. 
위의 field_len : 20은 int(20)의 숫자입니다.

 

참고로 mysql_fetch_array 함수와 mysql_fetch_row 함수는 한가지 다른 점이 있는데 후자의 경우 필드의
이름을 줄 때 [0]으로 사용하는 반면 전자는 [content]로 해당 필드 이름을 직접 사용할 수 있습니다.
위 함수들의 사용은 데이터의 많고 적음에 따라 각각의 수행 속도가 달라집니다.
다시 생각해 보면 데이터가 많을 경우 배열로 리턴하면 더 속도가 빠를 것입니다.
객체로 리턴할 수도 있겠지요. 하지만 간단한 내용의 경우 배열로 리턴하던지 한 줄을 그냥 리턴 하던지
속도의 차이는 없을 것입니다. 
그러므로 위 함수들을 사용할 때는 항상 많은 데이터의 검색을 생각하고 사용하기 바랍니다.

  

그럼 해당 mysql지원 함수들 중 몇 가지 예를 더 보여 드리겠습니다.

그림. 8-49 mysql 함수 예2

위 소스를 보면 for루프 안에 mysql_result 함수를 사용해서 데이터 내용을 계속 출력해 주는 것을 볼 수 있습니다.
만약 여기서 특정 데이터를 출력하려면 mysql_data_seek 함수를 사용해서 출력해 볼 수도 있습니다.
하지만 mysql_query 문을 이용한 질의를 이용하는 방법이 더 효율적이며 빠를 수도 있습니다.


위 소스와 그전 소스들을 비교하면서 각각의 함수들의 특징을 "改歐 바랍니다.

그림. 8-50 mysql 함수 예2 결과

결과 역시 이전 소스들과 마찬가지 임을 확인할 수 있습니다. 그리고 다른 함수로 같은 결과물을 만들 수 있습니다.
위에서 말 한대로 각각의 함수 사용은 데이터의 양에 따라 조금씩 속도 차가 있을 수 있으므로 거기에 맞는 함수를
사용하면 됩니다.

URL 함수

1. base64_decode(string encoded_data)

    base64로 encoded된 문자열을 해석하고 원래 데이터를 리턴합니다.


2. base64_encode(string data)

    해당 데이터를 base64방식으로 인코딩합니다. 관련 함수로는 chunk_split( )가 있습니다.

그림. 8-51 base64 함수 예

그림. 8-52 base64 함수 결과

    위 base64 함수는 해당 데이터의 MINE 타입을 지원하는 역할에 사용합니다.

                
3. parse_url(string url)

    해당하는 URL을 배열로 저장해 줍니다.
    배열 저장에 포함 되는 부분은 scheme, host, port, user, pass, path, query, fragment 등이 있습니다.

                    
4. urldecode(string str)

    %와 ##등으로 인코딩된 URL을(str) 원 상태의 URL로 리턴해 줍니다.

                                     
5. urlencode(string str)

    해당 문자열을 URL 인코딩 방식으로 바꿔 리턴해 줍니다.


다음 설명할 예제의 경우 Url 함수 사용의 예를 보여주기 위해 array 함수들을 사용했습니다. 
만약 이해가 안되면 Array 함수를 참조 하세요.

그림. 8-53 parse_url( ) 함수 예
위 소스는 parse_url( ) 함수를 이용해 해당 URL의 scheme, host, user, port, pass, path, query, fragment
등을 리턴합니다.   여기서 각각의 KEY값은 결과를 보면서 확인하기 바랍니다. 화면으로의 출력은 array 함수를
사용했고, array_keys( )는 해당 배열의 key 값을 리턴하며, array_values( )는 해당 배열의 값을 리턴합니다.
역시 for문을 사용해서 각 배열만큼만 출력되게 했습니다. Sizeof( ) 함수는 해당 배열의 수를 리턴합니다. 

그림. 8-54 parse_url( ) 함수 결과

Urlencode와 Urldecode는 스크립트의 조작으로 인한 에러를 막기 위해 사용되기도 하며 여러 가지 응용해서
사용 가능한 Url 함수입니다.

그림. 8-55 urlencode( ) , urldecode( ) 함수 예
해당 문자열의 인코딩은 % 와 두자리 헥사 코드로 이루어 집니다. 이것은 또한 알파벳이 아닌 문자에 한해
이루어 집니다.

그림. 8-56 urlencode( ) , urldecode( ) 함수 결과

ARRAY 함수

1. array(...)
        
    배열을 만들어 줍니다. Php 기초 부분에서 이 함수를 사용하는 방법을 보았습니다.

그림. 8-57 array( ) 함수 예
    위 소스는 array( ) 함수를 이용한 2차원 배열 형태입니다.
    배열은 여러 차원으로 구성할 수 있기 때문에 아주 요긴하게 사용할 수 있습니다. 
    게시판 루트 기능 중 게시된 글을 선택해서 원하는 글만 삭제할 때 이 방법이 사용 됩니다.
    ( array( ) 함수는 PHP 기본 문법 장을 참고 하세요)

그림. 8-58 array( ) 함수 결과
2. array_count_values(array input)

    배열의 전체 수를 구해 줍니다. php 4.0에서 추가 되었습니다.

그림. 8-59 array_count_values( ) 함수 예

그림. 8-60 array_count_values( ) 함수 결과
3. array_flip(array trans)

    배열의 값 모두에 플립을합니다. Php 4.0에 추가 되었습니다.

     
4. array_keys(array input, mixed [search_value])

    배열의 모든 키 값을 리턴해 줍니다.
    관련 함수로는 array_values() 입니다.

그림. 8-61 array_keys( ) 함수 예

그림. 8-62 array_keys( ) 함수 결과
5. array_merge(array array1, array array2, [ ...] )

    두개 또는 그 이상의 배열을 하나로 합쳐줍니다. Php 4.0에 추가 되었습니다.

그림. 8-63 array_merge( ) 함수 예

그림. 8-64 array_merge( ) 함수 결과
    위 결과에서 소스 10행의 $cnt 배열이 $a , $b를 병합한 것임을 알 수 있습니다.

 
6. array_pad(array input, int pad_size, mixed pad_value)

    첫번째 인자(배열)를 추가하면서 두 번째 인자 크기만큼 배열을 만듭니다.
    만약, 두 번째 인자 크기 만큼 안될 경우 세 번째 인자를 채워 넣습니다.

                 
7. array_pop(array array)

    해당 배열의 마지막 원소를 리턴하고 그 원소를 제거합니다. Php 4.0에 추가되었습니다.

그림. 8-65 array_pop( ) 함수 예

그림. 8-66 array_pop( ) 함수 결과
    위 결과는 소스 13행의 해당 배열의 마지막 원소를 삭제하는 부분에 의해 22행이 출력되지 않습니다.

 
8. array_push(array array, mixed var, [...])

    해당 배열에 하나 또는 그 이상의 원소를 추가합니다. Php 4.0에 추가 되었습니다.

그림. 8-67 array_push( ) 함수 예

그림. 6-68 array_push( ) 함수 결과
9. array_reverse(array array)

    해당 배열을 하나의 배열로 리턴해 줍니다. Php 4.0 beta3에 추가 되었습니다.

그림. 6-69 array_reverse( ) 함수 예

그림. 6-70 array_reverse( ) 함수 결과
10. array_shift(array array)

    해당 배열의 처음 원소를 리턴하고 그 원소를 삭제합니다. Php 4.0에 추가 되었습니다.

그림. 8-71 arrat_shift( ) 함수 예

그림. 8-72 array_shift( ) 함수 결과
    위 결과에서 기존의 a[0] 원소를 삭제한 후 배열 a는 원소 하나만 존재하게 됩니다.

 
11. array_slice(array array, int offset, int [length] )

    배열의 특정 원소를 리턴해 줍니다. Php 4.0에 추가 되었습니다.
    (Offset의 경우 정수를 사용하며 양수일 경우 offset 값의 그 다음 원소부터 출력하며 음수일 경우
     마지막 원소에서 offset 값부터 출력합니다.)

그림. 8-73 array_slice( ) 함수 예

그림. 8-74 array_slice( ) 함수 결과
12. array_splice(array input, int offset, int [length] , array [replacement])

    해당 배열의 특정 원소를 제거하고 거기에 새로운 다른 원소를 대체합니다.
    Php 4.0에 추가되었습니다.

그림. 8-75 array_splice( ) 함수 예

그림. 8-76 array_splice( ) 함수 결과
13. array_unshift(array array, mixed var, [...])

    해당 배열의 처음 부분에 하나 또는 그 이상의 원소를 추가합니다.
    Php 4.0에 추가되었습니다.

그림. 8-77 array_unshift( ) 함수 예

그림. 8-78 array_unshift( ) 함수 결과
14. array_values(array input)

    해당 배열의 모든 값들을 리턴합니다. Php 4.0에 추가되었습니다.

    
15. array_walk(array arr, string func, mixed userdata)

    해당 배열 원소에 각각의 개인 함수들을 적용해 줍니다. Php 4.0에 추가되었습니다.

                 
16. arsort(array array)

    해당 배열을 역순을 정렬 하며, index association을 유지합니다. 

                             
17. assort(array array)

    해당 배열을 정렬 하고, index association을 유지합니다.

                                          
18. compact(string varname | array varnames, [...])

    해당 변수 이름과 해당 변수의 값을 포함하는 배열을 만듭니다. Php 4.0에 추가되었습니다.

그림. 8-79 compact( ) 함수 예

그림. 8-80 compact( ) 함수 결과
19. count(mixed var)

    해당 배열 변수의 원소의 수를 리턴해 줍니다.

그림. 8-81 count( ) 함수 예

그림. 8-82 count( ) 함수 결과
20. current(array array)

    해당 배열의 현재 원소를 리턴해 줍니다.

     
21. each(array array)

    해당 배열에서 다음 (key , value)쌍을 리턴합니다.
    이 쌍에는 네가지 요소를 리턴하는데 0, 1, key, value 입니다.
    여기서 0, key는 각각의 변수의 key 이름을 가지고 1, value는 해당 변수의 값을 가집니다.

그림. 8-83 each( ) 함수 예

그림. 8-84 each( ) 함수 결과
22. end(array array)

    해당 배열의 내부 포인터를 마지막 원소로 옮깁니다.

그림. 8-85 end( ) 함수 예

그림. 8-86 end( ) 함수 결과
23. extract(array var_array, int [extract_type] , string [prefix] )

    해당 배열의 내용을 심볼 테이블로 가져와 일반 변수로 리턴해 줍니다.

그림. 8-87 extract( ) 함수 예

그림. 8-88 extract( ) 함수 결과
    위 결과에서 8행의 함수 실행으로 각 배열 원소가 변수로 대입되어 출력됩니다.

 
24. in_array(mixed needle, array haystack)

해당 배열에 해당 변수가 존재하면 true를 리턴합니다.

그림. 8-89 in_array( ) 함수 예

그림. 8-90 in_array( ) 함수 결과
    소스에서 5행의 배열에 7행의 조건에 맞는 인자가 존재하기 때문에 8행이 출력됩니다.

 
25. key(array array)

    해당 배열의 현재 position의 index 원소를 리턴합니다.
    즉, associative 배열에서 가리키는 원소의 키 값을 리턴합니다.

그림. 8-91 key( ) 함수 예

그림. 8-92 key( ) 함수 결과
26. krsort(array array)

    해당 배열을 역key 순으로 정렬합니다.

    
27. ksort(array array)

    해당 배열을 key 순으로 정렬합니다.

                 
28. list(...)

    해당 변수들을 배열처럼 만듭니다.

그림. 8-93 list( ) , ksort( ) 함수 예

그림. 8-94 list( ) , ksort( ) 함수 결과
    소스에서 12행 함수 수행으로 해당 배열을 key 순으로 다시 정렬해서 출력합니다.

 
29. next(array array)

    해당 배열의 내부 배열 포인터를 전진시킵니다.


30. pos(array array)

    해당 배열의 현재 원소를 리턴해 줍니다.

            
31. prev(array array)

    해당 배열의 내부 배열 포인터를 후진시킵니다.


32. range(int low, int high)

    두 인자 범위의 정수를 포함하는 배열을 만들어 줍니다.

그림. 8-95 range( ) 함수 예

그림. 8-96 range( ) 함수 결과
33. reset(array array)

    해당 배열의 내부 포인터를 첫 번째 원소로 set합니다.

    
34. rsort(array array)

    해당 배열을 역순으로 정렬합니다.

                 
35. shuffle(array array)

    해당 배열을 섞어 줍니다.

                          
36. sizeof(array array)
    
    해당 배열의 원소 개수를 구해 줍니다.

                                   
37. sort(array array)

    해당 배열을 정렬합니다.

                                    
38. uasort(array array, function cmp_function)

    해당 배열을 사용자가 정의한 비교 함수로 정렬하고 index association을 유지합니다.

                                                 
39. uksort(array array, function cmp_function)

    해당 배열을 사용자가 정의한 비교 함수로 key순으로 정렬합니다.

                                                                  
40. usort(array array, function cmp_function)

    해당 배열을 사용자가 정의한 비교 함수로 value순으로 정렬합니다.

directory 함수

1. chdir(string directory)

    해당 디렉토리로 옮겨 줍니다.

           
2. dir(string directory)

    해당 디렉토리의 객체를 생성합니다.
    즉, 이 함수를 이용해 객체를 생성할 경우 두개의 메소드가 주어지는데 하나는 handle , 또하나는 path
    입니다.  이 두개의 속성을 이용해 뒤에 설명할 readdir(), rewinddir() , closedir() 함수와 같은 기능의
    3개의 메소드를 사용할 수 있습니다.  차례로 read() , rewind() , close() 입니다.       

                                                   
3. closedir(int dir_handle)

    해당 디렉토리 핸들을 닫습니다.

                                                                  
4. opendir(string path)

    해당 디렉토리 핸들을 open합니다. 즉, 이 핸들을 이용해 closedir(), readdir(), rewinddir() 등에
    적용합니다. 

                                                                                 
5. readdir(int dir_handle)

    해당 디렉토리 핸들로부터 해당하는 디렉토리와 파일의 내용을 읽어 리턴합니다.

                                                                                            
6. rewinddir(int dir_handle)

    해당 디렉토리 핸들을 처음의 위치로 되돌립니다. 즉, readdir() 함수를 이용해 해당 디렉토리와 파일들을
    출력했다면 디렉토리 핸들은 마지막에 위치할 것입니다.
    다시 한번 더 디렉토리를 읽어 출력하려면 핸들을 처음으로 되돌려야합니다.



디렉토리 함수를 이용한 예제는 리눅스의 ftp 디렉토리중 pub 디렉토리를 읽어들여 화면에 출력하는 것을 보여
드리겠습니다.  이것을 이용해 간단히 디렉토리의 자료 목록을 만들어도 됩니다.
ftp의 자료량과 목록을 한눈에 볼 수 있다면 사용자가 편할 것입니다. 이것은 자료실의 운영에 도움이 될 것
입니다.  다른 함수를 사용해서 이름순으로 정렬을 하면 더 보기 편할 것입니다.
하지만 이런 방법은 하나의 방법 일뿐 꼭 이렇게 하라는 법은 없습니다.

그림. 8-97 디렉토리 함수 예
그림. 8-97을 보면 opendir( ) 함수를 사용해 해당 디렉토리를 열고, readdir( ) 함수를 사용해서 해당 디렉토리
내용을 읽어 들입니다. 그리고 while 구문을 사용해서 해당 디렉토리의 내용을 전부 출력합니다. 
다음 closedir( ) 함수를 사용해서 연 디렉토리를 닫아줍니다. 그럼 그림 8-98의 결과를 확인하겠습니다.

그림. 8-98 디렉토리 함수 결과
이 결과를 아파치 웹서버의 디렉토리에 존재하는 파일을 웹으로 뿌려주는 기능으로 보여 주는 방법도 있습니다. 
이것은 웹서버의 해당 HTML파일이 없을 경우 디렉토리로 보여주는 기능입니다.
단지 웹서버의 이 같은 기능이 존재 하기에 웹서버의 기능으로 스크립트의 디렉토리 함수를 대신 할 수는 없습니다. 
스크립트로 만들어 줄 수 있는 부분이 아니기 때문에 엄연히 웹서버의 디렉토리 출력과 이것은 다른 것입니다.

DATE와 TIME 함수

날짜와 시간 함수들은 mysql 함수와 비슷한 부분이 많이 있으므로 대부분 다 이해하리라 생각합니다.

  

1. checkdate(int month, int day, int year);

    해당하는 년 , 월 , 일 의 타당성을 검사해 결과를 리턴합니다.
    타당하면 true 거짓이면 false를 리턴합니다.

  
2. date(string format, int [timestamp] )

    해당 timestamp를 지정한 format에 맞게 리턴해 줍니다.

    만약 timestqmp가 주어지지 않을 경우 현재의 timestamp값이 주어집니다.

    Format의 종류에는 

        a - "am" 또는 "pm"
        A - "AM" 또는 "PM"
        d - 일을 2자리 형식으로 표현합니다. ( 01 , 02 , 31 )
        D - 요일을 짧은 영문 표기로 표현합니다. (Mon , Fri)
        F - 달을 긴 영문 표기로 표현합니다. (January)
        h - 시간을 12시간 형태로 표현합니다(01 ~ 12)
        H - 시간을 24시간 형태로 표현합니다.(00 ~ 23)
        g - 시간을 12시간 형식으로 표현합니다.(1 ~ 12)
        G - 시간을 24시간 형식으로 표현합니다.(1 ~ 23)
        i - 분을 2자리로 표현합니다. (00 ~ 59)
        j - 일을 표현합니다. (1 ~ 31)
        l - 요일을 긴 영문 표기로 표현합니다.(Friday)
        L - 해를 넘기 위한 불 연산으로 표현합니다.(0 또는 1)
        m - 달을 표현합니다. (01 ~ 12)
        n - 달을 표현합니다. (1 ~ 12)
        M - 달을 짧은 영어 표기로 표현합니다.(Jan)
        s - 초를 표현합니다. (00 ~ 59)
        S - 영어식 숫자를 표현합니다. (th , nd)
            즉, 2nd 이런 식입니다.
        t - 주어진 달의 일 수를 표현합니다. (28 , 31)
        U - 주어진 시기로 부터의 초를 표현합니다.
        W - 해당 요일을 숫자로 표현합니다.( 0 -> Sunday , 1 -> Monday)
        Y - 4자리 년도를 표현합니다. ( 2000 )
        y - 2자리 년도를 표현합니다. ( 00 , 99 )
        z - 그 해의 몇 번째 일인지 표현합니다. (0 ~ 365)
그림. 8-99 date( ) 함수 예

그림. 8-100 date( ) 함수 결과
3. getdate(int timestamp)

    해당 timestamp의 date/time 정보를 연관 배열로 리턴합니다.

    연관 배열의 요소에는

        seconds - 초를 표현합니다.
        minutes - 분을 표현합니다.
        hours - 시간을 표현합니다.
        mday - 그 달의 일을 표현합니다.
        wday - 그 주의 요일을 숫자로 표현합니다.
        mon - 달을 숫자로 표현합니다.
        year - 년도를 숫자로 표현합니다.
        yday - 그 해의 몇 번째 일인지 표현합니다. (0 ~ 365)
        weekday - 요일을 긴 영어 표기로 표현합니다.(Friday)
        month - 달을 긴 영어 표기로 표현합니다. (January)
그림. 8-101 getdate( ) 함수 예

그림. 8-102 getdate( ) 함수 결과
4. gettimeofday(void)

    현재의 시간 정보를 연관 배열 형태로 리턴합니다.

    배열 인자에는 

        sec - 초를 표현합니다.
        Usec - 마이크로 초를 표현합니다.
        minuteswest - 그린위치 분을 표현합니다.
        dsttime - 정확한 dst 타입을 표현합니다.
그림. 8-103 gettimeofday( ) 함수 예

그림. 8-104 gettimeofday( ) 함수 결과
5. gmdate(string format, int timestamp)

    해당 timestamp(GMT/CUT date/time)를 주어진 format 인자에 맞게 리턴합니다.
    Format 인자는 date() 함수의 인자 설명과 같습니다.

           
6. gmmktime(int hour, int minute, int second, int month, int day, int year, int [is_dst])

    GMT date로 UNIX timestamp를 구합니다.

                    
7. gmstrftime(string format, int timestamp)

    주어진 timestamp(GMT/CUT time/date)를 locale 설정을 따르는 형태로 리턴합니다.
    format 인자는 strftime() 함수를 참조하세요.

                                       
8. microtime(void)

    현재의 UNIX timestamp를 마이크로초(천분의 1초 단위)로 리턴합니다.

                                                    
9. mktime(int hour, int minute, int second, int month, int day, int year, int [is_dst])

    해당 날짜를 UNIX timestamp로 리턴합니다.


10. strftime(string format, int timestamp)

    주어진 timestamp를 locale 설정을 따르는 형태로 리턴합니다.
    물론 여기서도 timestamp인자가 없을 경우 현재시간으로 설정됩니다.

    Format 인자는

        %a - 현재 locale 을 따르는 요일을 축약 표현합니다.
        %A - 현재 locale 을 따르는 요일을 full name로 표현합니다.
        %b - 현재 locale 을 따르는 달을 축약 표현합니다.
        %B - 현재 locale 을 따르는 달을 full name로 표현합니다.
        %c - 현재의 locale에 대한 우선되는 날짜와 시간을 표현합니다.
        %d - 일을 표현합니다.(00 ~ 31)
        %H - 시간을 24시간 형식으로 표현합니다. (00 ~ 23)
        %l - 시간을 12시간 형식으로 표현합니다. (01 ~ 12)
        %j - 그 해의 몇 번째 일인지 표현합니다. (001 ~ 366)
        %m - 달을 표현합니다. (1 ~ 12)
        %M - 분을 표현합니다. (00 ~ 59)
        %p - 주어진 시간에 해당하는 "am" 또는 "pm"을 표현합니다.
        %S - 초를 표현합니다 
        %U - 올해의 몇 번째 주가 지났는지 표현합니다.(첫 주의 처음 요일은 일요일)
        %W - 올해의 몇 번째 주가 지났는지 표현합니다. (첫 주의 처음 요일은 월요일)
        %w - 요일을 숫자로 표현합니다.( 일요일 -> 0)
        %x - 현재 locale를 따르는 날짜를 표현합니다.
        %X - 현재 locale를 따르는 시간을 표현합니다.
        %y - 년도를 두자리 숫자로 표현합니다.(00 ~99)
        %Y - 네 자리 년도를 표현합니다.(2000)
        %Z - 현재 타임존을 표현합니다.

11. time(void)

    현재의 UNIX timestamp를 리턴합니다.
    날짜 함수의 예제는 달력을 만들어 보기로 하겠습니다. 달력은 간단히 함수를 이용하면 이루어 지는 것입니다.
    그럼 소스를 보면서 확인 하겠습니다.

달력만들기

        <?php

            if($chanl == day && $m < 13 && $m > 0)
            {
                // 달력 화면은 $chanl이 day이고, $m(해당 달)이 13보다 작아야만 출력됩니다.
                // 이것은 보고 싶은 달을 13 이상으로 입력할 경우 출력이 안되게 하기 위함입니다.


                $day = 28;
               // 그 달의 마지막 날을 계산하기 위해 처음 검색할 날짜입니다.


                while(checkdate($m, $day, 2000))
                {
                    $day++;
                }
               // 해당 날짜를 검색합니다. Checkdate( ) 함수를 이용해서 28부터 계속 증가하면서 타당한 날짜를 가려 냅니다. 
               // 만약 그 달이 30일까지 라면 31에서 while문은 멈출 것입니다. 


                $day = $day-1;
               // 날짜 검색의 결과 날짜에서 -1을 함으로써 진짜 날짜를 가려 냅니다.
 

                $x = mktime(12,12,12,$m,1,2000);
               // 2000년 $m(전달 받은 달)월 1일 12:12:12을 나타내는 타임 스탬프 값입니다.
               // 이 함수를 사용한 것은 단지 예를 보이기 위함이므로 다른 방법을 사용해도 무관합니다.


                $day2 = date("w","$x");
               // 이 함수의 w 인자는 요일을 숫자로 리턴합니다. 0일 경우 일요일입니다.
               // 즉, 해당 달의 처음 1일의 요일을 알기 위해 쓰여집니다.

                                                             
                $hday = mktime();
               // 이 함수는 현재 날짜와 시간을 알기 위해 사용합니다.


                $day3 = date("j", "$hday");
               // $hday 변수 값을 이용해 오늘의 날짜를 알아 냅니다.

                                                                             
                echo ("<b>2000년 $m 월 $day3 일</b><br>");
               // 화면에 오늘의 날짜를 출력합니다.


                echo("<table border=1 cellspacing=2 cellpadding=2 width=400>");
               // 달력의 테이블 시작입니다.


                echo("<tr>
                          <td>일</td>
                          <td>월</td>
                          <td>화</td>
                          <td>수</td>
                          <td>목</td>
                          <td>금</td>
                          <td>토</td>
                      </tr>
                      <tr>
                ");
               // 요일 테이블 입니다. 이 테이블 형식으로 날짜들이 만들어집니다.


                $r="7"-"$day2" ;
               // 달력의 처음 1일이 무슨 요일인지를 확인하고 달력 처음 부분의 공백을 만들기 위한 공백 칸수를 알아냅니다.
               //이제 해당 달력의 실제적인 구문은 for문입니다.

                {
               // $n은 달력에 표시한 날짜입니다.
               // 이것은 계속 증가 하면서 화면에 출력하는데 $day(그 달의 마지막 날짜)까지 증가하면서 화면에 출력합니다.

                     if($n ==1)
                     {
                     //만약 해당 날짜가 1 이면 달력의 처음 공백 부분을 표현합니다.


                         for($d=0 ; $d <= $day2-1 ; $d++)
                         {
                          // 공백의 수는 그 달의 1일을 숫자로 받은 $day2 변수에 -1한 값 만큼 만듭니다.
                             echo("<td>&nbsp;</td>");
                         }
                     }

                     if($n == $r+1 || $n == $r+8 || $n == $r+15 || $n ==$r+22 || $n == $r+29)
                     {
                     // 위 if문은 날짜를 출력 하면서 해당 날짜 이후 다음 칸에 출력 하게 하기 위한 조건 입니다.
                         echo("</tr><tr>");
                     }

                     if($day3 == $n)
                     {
                     // 이 조건은 만약 달력 테이블을 출력 하면서 날짜가 오늘 날짜일 경우 진하게 표현 하기 위한 문입니다.
                         echo("<td><b>$n</b></td>"); 
                     }  else { 
                     // 그 밖의 경우 날짜는 보통 크기로 출력 됩니다.//
                         echo"<td>$n</td>"); 
                                     }
                }

            }// 처음 if문의 끝입니다.
                        
            echo("</tr>
                  </table><br>
            ");

            echo("<b>보고 싶은 월을 입력 하세요<b><br>
                        
                  <form method=post action=/test/test.php>
                      <input type=text size=4 name=m>월
                      <input type=hidden name=chanl value=day>
                      <input type=submit value=View>
                  </form>
            ");
            // 여기서 form문에 사용해 보고 싶은 달을 입력 하면 화면에 해당 달의 오늘 날짜를 볼 수 있습니다. 
            // 이 문은 select문을 사용해서 12월 이후로 입력을 못하게 만들 수도 있지만 조건식의 학습에 도움을
                        // 주기 위해 text 입력 폼으로 만들었습니다. 
            // Form문의 인자들을 전달할 action 부분은 $PHP_SELF를 사용해서 여러분은 해보기 바랍니다.
            // 이것은 현재의 스크립트 파일 자신"韜 인자들을 전달하는 것입니다.
        ?>

    여기 까지 달력 소스를 보았습니다. 그럼 결과를 보면서 소스와 한번 다시 비교해 보기 바랍니다.
 
그림. 8-105 달력 소스 결과

    결과를 보면 해당 날짜가 찐하게 표시 되는걸 볼 수 있습니다.
    이렇게 여러분들도 나름대로 새로이 달력을 만들어 보길 바랍니다. 
    보기에는 화려하지 않지만 HTML의 조금의 수정으로 도 충분히 화려해 질 수 있습니다.
    문제는 이렇게 출력하게 하는 스크립트의 구성을 하는 것입니다. 
    먼저 함수를 읽어 보고 난후 이 달력 소스를 참고 하지 않고 만들어 봤으면 합니다.
    무엇이든 몰두해서 만들어 보는 것이 중요합니다.
    이것이 쌓이면 실력이 되는 것입니다. 필자는 이런 달력 소스를 만드는데 꼬박 하루를 허비했습니다. 

STRING 함수

mysql의 문자열 함수들과 같이 문자열을 다루는 함수들은 데이터베이스로의 입력과 관련해 중요한 부분입니다.    하지만 필자의 경우 이 부분이 조금 소홀한 면이 있습니다.    뒤 소스 부분에서 확인되겠지만 전혀 문자열과는 관계 없는 듯 열심히 스크립트를 만들었습니다.    여러분들은 부디 이 부분에 신경을 쓰기 바랍니다.    (참고로 문자열 함수를 추가하고 작동하는 것에는 그렇게 어렵지 않습니다.    여러 경우의 조건을 입력 하려면 물론 비슷한 문자열 함수들을 나열 해야만 하겠죠)

1. addslashes(string str)

    해당 문자열이 작은, 큰Quote(따옴표) , 역슬래쉬(\)와 같은 문자가 있을 경우 이 문자 앞에 역슬래쉬(\)를

    추가해서 리턴합니다.

              
2. bin2hex(string str)

    해당 문자열을 2진에서 16진으로 바꿔 리턴합니다.

                                 
3. chop(string str)

    해당 문자열의 뒤 쪽 공백을 제거합니다.

                                            
4. chr(int ascii)

    해당 ascii를 포함하는 특정 문자를 리턴합니다.


5. chunk_split(string string, int [chunklen] , string [end] )

    해당 문자열을 작은 크기로 쪼개서 리턴합니다.

                                                                          
6. convert_cyr_string(string str, string from, string to)

    해당 문자열을 Cyrillic 문자에서 또 다른 문자로 바꾸어 리턴합니다.

        k - koi8-r
        w - windows-1251
        i - iso8859-5
        a - x-cp866
        d - x-cp866
        m - x-mac-cyrillic


7. crypt(string str, string [salt])

    해당 문자열을 encryption 형식으로 변환해서 리턴합니다.

                                                                                                                                                     
8. echo(string arg1 , string [argn] ….)

    해당 하는 인자를 출력해 줍니다.


9. explode(string separator, string string)

    해당 문자열을 separator 문자열을 기준으로 나눠서 배열로 저장합니다.

                                                                                                                                                                                   
10. flush(void)

    output buffer을 flush합니다.

                                                                                                                                                                                                  
11. get_meta_tags(string filename, int [use_include_path])
        
    해당 파일의 모든 메타 tag의 content 속성을 가져와 배열 형태로 저장합니다.


12. htmlspecialchars(string string)

    해당하는 특정 문자를 HTML entity로 변환해서 리턴합니다.

                                                                                                                                                                                                                            
13. htmlentities(string string)

    해당 하는 문자열의 모든 문자들을 HTML entity로 변환해서 리턴합니다.

        ‘&’ -> ‘&amp’
        ‘"’ -> ‘&quot’
        ‘<’ -> ‘&lt’
        ‘>’ -> ‘&gt’


14. implode(string glue, array pieces)

    해당 하는 배열의 원소들을 특정 문자열(glue)을 이용해서 연결하고 새로운 문자열을 리턴합니다.


15. join(string glue, array pieces)

    implode함수와 기능이 같습니다. 해당 배열의 원소를 문자열을 이용해 연결합니다.


16. ltrim(string str)

    해당 문자열의 앞 공백을 제거합니다.


17. md5(string str)

    해당 문자열의 md5 hash 값을 계산해서 리턴합니다.
                

18. nl2br(string string)

    해당하는 문자열에서 newline을 <BR>로 바꿔 리턴합니다.


19. ord(string string)

    해당하는 문자열의 ASCII 값을 리턴합니다.


20. parse_str(string str)

    해당 문자열을 변수로 해석해 줍니다.

그림. 8-106 string함수 예1

그림. 8-107 string함수 예1 결과
21. print(string arg)

    해당 문자열을 출력합니다.

         
22. printf(string format, mixed [args]...)

    해당 format에 따라 문자열을 출력합니다.

                    
23. quoted_printable_decode(string str)

    quoted_printable 문자열을 8bit 문자열로 바꿔서 리턴합니다.

                                           
24. quotemeta(string str)

    해당 하는 문자열에서 meta 문자들을 백슬래쉬(\)가 첨가된 문자로 리턴합니다.

                                                          
25. rawurldecode(string str)

    URL encoded 문자열을 디코드해서 리턴합니다.

                                                                         
26. rawurlencode(string str)

    RFC1738을 따르는 URL encode를 해서 리턴합니다.
                                                                                    

27. setlocale(string category, string locale)

    locale 정보를 설정해서 리턴합니다.

                                                                                                   
28. similar_text(string first, string second, double [percent])

    두 문자열의 비슷한 점을 찾고 리턴합니다.


29. soundex(string str)

    해당 문자열의 soundex key를 리턴합니다.

                                                                                                                                 
30. sprintf(string format , mixed [args]…)

    해당하는 format으로 문자열을 리턴합니다.

    Format 양식에는

        % - 해당 포맷의 앞에 붙입니다.
        b - 2진수를 표현합니다.(integer)
        c - ASCII 값을 표현합니다.(integer)
        d - 10진수를 표현합니다.(integer)
        f - 실수를 표현합니다.(double)
        o - 8진수를 표현합니다.(integer)
        s - 문자열을 표현합니다.
        x - 16진수를 표현합니다.(lowercase 문자도 포함)
        X - 16진수를 표현합니다.(uppercase 문자도 포함)


31. strchr(string haystack, string needle)

    해당하는 문자가 처음으로 나타나는 부분을 찾아 줍니다.


32. strcmp(string str1, string str2)

    binary 방식으로 해당 문자열들을 비교합니다.


33. strcspn(string str1, string str2)

    mask와 매칭되지 않는 initial segment의 길이를 리턴합니다.


34. strip_tags(string str)

    해당 문자열에서 HTML과 PHP tag를 제거하고 리턴합니다.


35. stripslashes(string str)

    addslashes로 역슬래쉬된 해당 문자열에서 이를 제거하고 리턴합니다.

    strlen(string str)
    해당 문자열의 길이를 리턴합니다.


36. strrpos(string haystack, char needle)

    해당 문자열에서 찾을 문자가 나타나는 마지막 위치를 리턴합니다.


37. strpos(string haystack, string needle, int [offset])

    해당 문자열이 나타나는 처음 위치를 리턴합니다.


38. strrchr(string haystack, string needle)

    해당 문자열이 마지막으로 나타나는 위치 다음의 문자열을 리턴합니다.


39. strrev(string string)

    해당 문자열을 reverse 해서 리턴합니다.


40. strspn(string str1, string str2)

    해당 mask와 매칭 되는 initial segment의 길이를 리턴합니다.


41. strstr(string haystack, string needle)

    해당 문자열이 처음 나타나는 위치의 문자열을 리턴합니다.


42. strtok(string arg1, string arg2)

    해당 문자열을 tokenize 해서 리턴합니다.


43. strtolower(string str)

    해당 문자열을 소문자로 리턴합니다.


44. strtoupper(string string)

    해당 문자열을 대문자로 리턴합니다.


45. str_replace(string needle, string str, string haystack)

    해당 문자열에서 원하는 문자열을 바꾸고 싶은 문자열로 대체해서 리턴합니다. 

    strtr(string str, string from, string to)

    해당 문자열에서 원하는 문자를 바꾸고 싶은 문자로 대체해서 리턴합니다.


46. substr(string string, int start, int [length])

    해당 문자열에서 특정 부분만 리턴합니다.


47. trim(string str)

    해당 문자열의 앞과 뒤 공백을 제거해서 리턴합니다.


48. ucfirst(string str)

    해당 문자열의 처음 문자를 대문자로 만들어 리턴합니다.


49. ucwords(string str)

    해당 문자열의 각 단어의 처음 문자를 대문자로 만들어 리턴합니다.



문자열 함수의 예 또한 폼 문을 사용해서 보여 드리겠습니다.
이것은 간단히 문자열을 입력해 보면 해당 함수의 결과를 확인 할 수 있습니다. 
앞에서 말한바 있지만 PHP 문자열 함수 역시 mysql의 함수와 유사한 역할들이 대부분 존재합니다.
이것은 둘의 같은 부분을 더 쉽게 익힐 수 있는 면이기도 합니다. 그럼 먼저 소스를 확인하겠습니다.
여기 함수의 사용은 정규표현식이 사용된 부분도 있으며 그 부분은 다음 정규 표현식을 보기 바랍니다.


        <?php

            $array = array("$str","cry","crygood");
            //$str은 폼 문에 입력한 문자열 변수입니다.//

            $exp = explode("r",$str);

            $exp2 = implode("~",$array);

            $exp3 = split("[rR]{1}",$str);

            $exp4 = substr("$str",3,-1);

            $exp5 = strchr($str,"c");

            $exp6 = strrchr($str,"c");

            $exp7 = strpos($str,"c");

            $exp8 = strrpos($str,"c");

            $exp9 = strlen($str);

            $exp10 = strtolower($str);

            $exp11 = strtoupper($str);

            $exp12 = ucfirst($str);

            $exp13 = ucwords($str);

            $exp14 = strrev($str);

            $exp15 = strtr($str,"cry","byeju");

            $exp16 = str_replace("cry","hicry",$str);

            $exp17 = quotemeta($str);

            $exp18 = ord($str);

            $exp19 = chr($exp18);

            echo("<b>STRING_Test</b><br><br>");

            if($chanl == sub)

            {

               // 만약 문자열 변수가 전달되지 않으면 실행되지 못하게 하기 위함입니다.//

               echo("explode[0] : $exp[0]<br>

                     explode[1] : $exp[1]<br>

                     implode : $exp2<br>

                     split[0]  : $exp3[0]<br>

                     split2[1] : $exp3[1]<br>

                     substr : $exp4<br>

                     strchr : $exp5<br>

                     strrchr : $exp6<br>

                     strpos : $exp7<br>

                     strrpos : $exp8<br>

                     strlen : $exp9<br>

                     strtolower :$exp10<br>

                     strtoupper : $exp11<br>

                     ucfirst : $exp12<br>

                     ucwords : $exp13<br>

                     strrev : $exp14<br>

                     strtr : $exp15<br>

                     str_replace : $exp16<br>

                     quotemeta : $exp17<br>

                     ord : $exp18<br>

                     chr : $exp19<br>

               ");

            }

            echo(" 

                <form method=post action=$PHP_SELF>
                    <input type=text size=44 name=str>
                    <input type=hidden name=chanl value=sub>
                    <input type=submit value=Sub>
                </form>
            ");

        ?>


위 소스는 단순히 함수의 나열과 전달된 문자열을 문자열 함수를 이용해서 화면에 뿌려주는 역할만 할뿐 입니다.
단지 함수의 작동을 확인 하기 위한 스크립트 입니다.
여러 가지를 입력해 보고 문제점과 각각의 함수들의 특징들을 다시 확인하기 바랍니다.
소스에 관한 설명은 하지 않겠습니다. 여러분들도 아시다시피 위 소스는 단지 함수의 나열 입니다.
아래 결과와 비교하면서 익히기 바랍니다.

그림. 8-108 string함수 예2 결과
그림 8-108에서 각각의 함수들이 처리하는 문자열의 결과를 확인하세요.

Regular expression 함수

여러 가지 복잡한 문자열 다루기 위해 PHP는 정규 표현 함수가 있습니다.
문자열 처리 함수로 해결 될 수 없는 부분을 정규 표현 함수를 이용 해서 간단히 해결합니다.

 

1. ereg(string pattern, string string, array [regs])

    해당 문자열에서 주어진 정규 표현식 패턴과의 일치 되는 문자열을 검색합니다.

2. ereg_replace(string pattern, string replacement, string string)

    해당 문자열에서 주어진 정규 표현식 패턴과의 일치 되는 문자열을 검색하고 바꿀 문자열로 대체합니다.


3. eregi(string pattern, string string, array [regs])

    ereg() 함수와 동일하나 검색을 할 때 대, 소 문자를 구분하지 않습니다.


4. eregi_replace(string pattern, string replacement, string string)

    ereg_replace()와 동일하나 검색을 할 때 대, 소 문자를 구분하지 않습니다.

                                                         
5. split(string pattern, string string, int [limit])

    지정한 패턴과 일치하는 문자열을 경계로 해당 문자열을 나누고 배열에 저장합니다.


   
정규 표현식 패턴의 종류
                                                                          

정규 표현식은 주로 게시판의 입력 사항에서 사용 되어 집니다. 가령 비밀번호나 기타 이름 등을 입력할 때

주어진 조건에 맞게 입력하게끔 하는 것입니다.

    " . " - 이 표현은 c.y처럼 표현하기도 하고 .cy로 하기도 합니다.
              즉, 전자는 c로 시작 하면서 y로 끝나는 문자를 나타냅니다.
              (cry , cay , cat) 물론 여기서 . 은 한 문자만을 가리키는 것입니다.
              후자는 문자열이 cy로 끝나는 문자열을 나타냅니다(xcy, xcy). 잘못된 표현은 전자의 경우
              csdy, cfgy , cy입니다. " . " 은 한문자 만을 나타냅니다.

    " ? " - ?앞의 문자가 있거나 없음을 나타냅니다. 즉, sc?y 는 sy , scy , scyf , frsy …와 일치합니다.                

    " + " - +는 앞의 문자를 가리키며 최소 하나 이상의 문자임을 나타냅니다.
              즉, c+ry는 cry, ccry, cccry, cryhj … 와 일치합니다.

    " * " - * 는 앞의 문자가 없거나 하나 이상의 문자임을 나타냅니다.
              즉, c*ry 는 ry, cry, cccry … 과 일치합니다. 또 cry* 는 y가 없거나 하나 이상 문자임을 나타냅니다.
              cr, cry, cry, cryyy …. 와 일치합니다.

    " $ " - $는 해당 문자열의 마지막 부분을 가리킵니다. 즉, c?ry$ 는 ry로 끝나는 문자열에서 앞의 문자가 c가
              있거나 없는 문자열을 나타냅니다. 
              cry , ry , skycry …와 일치합니다. c?r+$ 는 앞의 문자 c 가 있거나 없는 문자이며 r로 적어도 하나이상
              끝나는 문자열을 나타냅니다. r , cr , crr , crrr … 와 일치합니다.
                                                                                            
    " ^ " - ^ 는 뒤 문자열로 시작되는 모든 문자열을 나타냅니다.
              즉, ^cry 는 cry is good, cry is very good, crypdf … 와 일치합니다. 
              또 ^cry?df는 y가 있거나 없는 crydf , crdf로 시작하는 모든 문자열을 나타냅니다. 
              crydf is good, crdfgg …와 일치합니다. 


    이렇게 이 기호들은 상호 같이 사용해서 문자열을 표현합니다.

                                                                                                 
    " [ ] " - [ ] 는 이 안의 문자 중에 하나의 문자를 표현합니다. 그리고 [ ] 안의 문자의 표현은
             "-" 를 사용해서 합니다. 
             즉, [a-z] 는 영문의 소문자 한글자를 포함하는 모든 문자열을 나타냅니다.
             A2sdr , skycry , cry , zzzz …. 와 일치합니다. 
             또 [a-zA-Z0-9] 는 영문 대,소문자 와 십진수 한자를 포함하는 모든 문자열을 나타냅니다.
             a4df, Cry44 is passw , 4ded … 등과 일치합니다.  
             [cC][yY] 는 cy , cY , Cy , CY 를 포함하는 문자열을 나타냅니다. Cycap , Cyclub … 등과 일치합니다. 
             만약 해당하는 문자를 제외한 문자열과의 일치를 나타내려면 ^기호를 [] 안에 사용합니다. 
             [^a-z]는 영문 소문자를 제외한 한글자를 포함하는 문자열을 나타냅니다.
             Cry44, skycryGood, 444 is passw … 와 일치합니다. 
             물론 영문 자체의 입력을 하지 못하게 하려면 [^a-zA-Z]로 표현할 수 있습니다.
             [ ] 는 일정한 문자의 표현은 간단하게 표현할 수도 있습니다. 클래스화된 방법을 사용합니다. 
             즉, [[:space:]]는 공백 문자를 나타냅니다 ( ) 와 일치합니다.
             [[:digit:]]는 숫자 하나를 나타냅니다. [0-9]와 일치합니다.
             [[:alpha:]]는 영문 알파벳 하나를 나타냅니다. [a-zA-Z] , [a-Z]와 일치합니다.
             [[:alnum:]]는 영문 알파벳 문자와 숫자 중 하나를 나타냅니다. [a-zA-Z0-9]와 일치합니다.

                                                                                                                                                  
    " { } " - { }는 {숫자}로 표현하며 중괄호 안의 숫자는 앞의 문자의 개수를 나타냅니다.
             C{4}ry는 C가 ry 앞에 4개 존재하는 문자열을 나타냅니다. 
             CCCCry를 나타냅니다. C{4,}ry는 C가 ry 앞에 적어도 4개 이상인 문자열을 나타냅니다.
             CCCCry , CCCCCry , CCCCCCry … 와 일치합니다.
             C{1,4}ry 는 C 가 ry 앞에 1 ~ 4개 존재하는 문자열을 나타냅니다.
             Cry , CCry , CCCry , CCCCry 와 일치합니다.

    " ( ) " - ( ) 는 이 안의 문자를 그룹화합니다.
             sky(cry)* 는 sky 뒤에 cry 가 하나 이상 있거나 없는 문자열을 나타냅니다.
             sky , skycry is good , skycrycrydd …. 와 일치합니다.

    " | " - | 는 OR 연산을 나타내 줍니다.
             sky|cry 는 sky 나 cry 를 나타내는 문자열을 나타냅니다. sky is good , cry is good..와 일치합니다.
             sky(cry|g)* 는 sky 뒤에 cry 나 g 가 없거나 하나 이상 존재하는 문자열을 나타냅니다.
             sky , skycry , sky is good , skygjjh … 등과 일치합니다.

                                        
    특수 기호 패턴에 비교하기 - 
             특수 기호 " ^  .  [ ]  $  ( ) |  *  +  ?  { }  \ " 앞에 \를 붙여 표현합니다.
             하지만 [ ] 안에서 특수 기호를 사용할 경우 \를 붙이지 않고 그냥 표현합니다.
             \$+ 는 문자열 앞에 $ 기호가 하나 이상 포함된 문자열을 나타냅니다.
             $cry , $$$sky … 등과 일치합니다.
             [^.[]?*{}/\] 는 문자열 중에 "^" , " ." , " [" , " ]" , "? " , " * " , " { " ,
             " } " , "/ " , "\"문자가 포함된 문자열을 나타냅니다. Hi? , {cry} , … 등과 일치합니다.

Image 함수

PHP는 이미지 함수를 사용해서 새로 생성하거나 여러 형태로 만들 수 있습니다.    이 함수를 사용하기 위해서는 GD 라이브러리를 설치해야 되고 이 라이브러리 없이 사용가능한 함수도 있습니다.    지원하는 이미지 확장자는 jpeg , gif , png 등이 있습니다.    GD를 구하려면 www.boutell.com/gd/ 에서 다운 받을 수 있습니다.    (GD 1.5버전 이하에서 GIF를 지원하며 그 이후 버전에서는 GIF를 지원하지 않습니다.)

1. getimagesize(string filename, array [imageinfo]);

    jpeg , gif , png 파일의 이미지 크기를 구해서 리턴합니다. 
    GD 라이브러리 없이 사용 가능 하며 4개의 배열 형태로 리턴합니다.

        0 - 해당 이미지 width(픽셀 단위)
        1- 해당 이미지 height
        2- flag ( 1 - gif , 2 - jpg , 3 - index)
        3- 해당 이미지의 width , height를 문자로 리턴(width = 344 , height = 342)


2. imagecreate(int x_size , int y_size);

    해당 x, y (가로 , 세로)크기의 새로운 이미지를 생성합니다.(픽셀 단위)


3. imagecreatefromgif(string filename);

    해당 파일 이름을 가진 이미지를 가지고 와서 새로이 이미지를 생성하며, 기존의 이미지 크기는 같습니다.
    (GD1.5 이하 버전에서 사용)


4. imagegif(int im , string filename);

    새로이 생성한 이미지를 브라우저 또는 파일로 출력합니다.(GD 1.5이하 버전에서 사용)


5. imagepng(int im , string filename);

    새롭게 생성한 이미지를 브라우저나 파일로 출력합니다.
    (GD 1.5 이후 버전에서 GIF 이미지 대신 PNG를 사용합니다.)


6. imagedestroy(int im);

    imagecreate( ) 함수로 생성된 이미지가 점유하는 메모리를 해제합니다.


7. imagecolorallocate(int im , int red , int green , int blue);

    해당 이미지에 RGB 값을 리턴합니다.

        (192,192,192) - 회색
        (0,0,0) - 검정
        (255,255,255) - 흰색
        (255,0,0) - 적색

그림. 8-109 imagecolorallocate( ) 함수 예

그림. 8-110 imagecolorallocate( ) 함수 결과
    소스 3행에서 PNG 이미지(100x100)를 생성하고 4행에서 해당 이미지의 배경을 red로 설정합니다.
    7행에서 PNG 이미지를 브라우저에 출력하고 8행에서 해당 이미지를 메모리에서 제거합니다.

 
8. imagerectangle(int im , int x1 , int y1 , int x2 , int y2 , int col);

    x, y 4개 인자를 좌표로 사각형을 해당 색으로 출력합니다.
    (x1, y1은 사각형 좌측 좌표이고 x2 , y2는 사각형 우측 좌표입니다.)
    col 인자는 imagecolorallocate( ) 함수를 사용한 변수를 적어 사용합니다.

그림. 8-111 imagerectangle( ) 함수 예

그림. 8-112 imagerectangle( ) 함수 결과
    소스 4 , 5행의 경우 4행이 우선해서 해당 이미지의 배경을 지정합니다.
    7 ~ 10행의 함수 수행으로 적색 사각형이 4개 만들어 집니다.

  
9. imagefilledrectangle(int im , int x1 , int y1 , int x2 , int y2 , int col);

    8번 함수와 기능은 비슷하지만 이 함수는 해당 인자로부터 좌표를 얻고, 해당 사각형을 만들어 지정한
    색으로 사각형을 색칠합니다.

그림. 8-113 imagefilledrectangle( ) 함수 예

그림. 8-114 imagefilledrectangle( ) 함수 결과
    소스 8 , 10행의 수행으로 해당 사각형이 적색으로 칠해져 출력됩니다.

 
10. imagepolygon(int im , array points , int num_points , int col);

    해당 배열의 포인터 와 꼭지점의 수로 다각형을 출력합니다.
    배열의 포인터는 순서대로 꼭지점의 x, y 좌표를 지정합니다.

그림. 8-115 imagepolygon( ) 함수 예

그림. 8-116 imagepolygon( ) 함수 결과
    소스 6행의 배열을 이용해 8행의 다각형을 출력합니다.


11. imagefilledpolygon(int im , array points , int num_points , int col);

    해당 다각형을 지정한 색으로 칠해서 출력합니다.

그림. 8-117 imagefilledpolygon( ) 함수 예

그림. 8-118 imagefilledpolygon( ) 함수 결과
    소스 8행의 실행으로 해당 다각형이 적색으로 칠해져 출력됩니다.


12. imageline(int im , int x1 , int y1 , int x2 , int y2 , int col);

    해당 이미지 안에 지정한 색으로 선을 그어 줍니다.

그림. 8-119 imageline( ) 함수 예

그림. 8-120 imageline( ) 함수 결과
    소스 7, 8행의 결과로 x 표의 선을 출력합니다.


13. imagedashedline(int im , int x1 , int y1 , int x2 , int y2 , int col);

    해당 이미지에 전선을 그립니다.

그림. 8-121 imagedashedline( )함수 예

그림. 8-122 imagedashedline( ) 함수 결과
    소스 7 , 8행의 실행으로 점선 x를 출력합니다.

 
14. imagesetpixel(int im , int x , int y , int col);

    x ,y 인자를 좌표로 해당 위치에 지정한 색으로 점을 찍습니다.

그림. 8-123 imagesetpixel( ) 함수 예

그림. 8-124 imagesetpixel( ) 함수 결과
    소스에서 13행 for문의 실행으로 함수 결과에서 진하게 표시된 점선이 출력 됩니다.
    이것은 픽셀이 촘촘히 있을 때 그냥 선을 긋는 것과 같이 보입니다. 

    7~11행의 경우는 작은 픽셀로 출력되는걸 볼수 있습니다.


15. imagestring(int im , int font , int x , int y , string , int col);

    해당 x ,y 위치에 지정한 색의 문자열을 출력합니다.

그림. 8-125 imagestring( ) 함수 예

그림. 8-126 imagestring( ) 함수 결과
    7행의 font인자 크기 만큼 해당 문자열이 출력됩니다.

 
16. imagestringup(int im , int font , int x , int y , string , int col);

    15번과 같으나 해당 문자열을 세로로 출력합니다.

그림. 8-127 imagestringup( ) 함수 예

그림. 8-128 imagestringup( ) 함수 결과
    소스 7행의 수행으로 문자열이 세로로 출력됩니다.


17. imagechar(int im , int font , int x , int y , char , int col);

    15,16번 함수와 같지만 문자열이 아닌 문자 하나만을 출력합니다.

그림. 8-129 imagechar( ) 함수 예

그림. 8-130 imagechar( ) 함수 결과
    소스에서 7행의 문자열의 처음 캐릭터만 출력 되는걸 볼 수 있습니다.

 
18. imagecharup(int im , int font , int x , int y , char , int col);

    해당 문자를 화면에 지정한 색으로 세로로 출력합니다.

            
19. imagesx(int im);

    해당 이미지의 width를 구해 줍니다.

                               
20. imagesy(int im);

    해당 이미지의 height를 구해 줍니다.

                                                     
21. imagearc(int im , int cx , int cy , int w , int h , int s , int e ,int col);

    인자들에 해당하는 타원을 출력합니다.

        cx,cy - 타원의 중심 좌표
        w - 타원의 너비
        h - 타원의 높이
        s- 타원의 시작점(단위는 각으로 표시)
        e- 타원의 끝점

그림. 8-131 imagearc( ) 함수 예

그림. 8-132 imagearc( ) 함수 결과
    소스 7~10행의 실행으로 4개의 타원이 생성되고 화면에 출력됩니다.

 
22. imagefill(int im , int x , int y , int col);

    좌표가 포함되는 영역을 지정한 색으로 색칠합니다.

그림. 8-133 imagefill( ) 함수 예

그림. 8-134 imagefill( ) 함수 결과
    소스 9행의 좌표에 해당하는 부분이 적색으로 색칠되어 출력됩니다.

 
23. imagecolortransparent(int im , int col);

    해당 이미지의 투명 처리 색깔을 설정합니다.

그림. 8-135 imagecolortransparent( ) 함수 예

그림. 8-136 imagecolortransparent( ) 함수 결과
    소스 14행에 의해 적색 부분을 투명하게 출력합니다.


23. imagecopyresized(int dst_im, int src_im, int dst x, int dst y, 

    int src x, int src y, int dst w, int dst h, int src w, int src h);
    원본 이미지의 특정 부분을 대상 이미지로 copy합니다.

        dst_im - 대상 이미지
        src_im - 원본 이미지
        src x, y - 원본 이미지 좌측 상단 좌표
        src w,h - 원본 이미지 가로와 세로 크기

                                                                                           
24. imageTTFText(int im, int size, int angle, int x, int y, int col, str fontfile, str text);

    트루 타입 폰트를 사용해서 이미지에 해당 문자열을 출력합니다.
    (이 함수를 사용하기 위해서는 FreeType 라이브러리를 GD와 같이 설치해야 합니다.) 


25. imageTTFBBox(int size, int angle, str fontfile, str text);

    문자열에 해당하는 위치를 픽셀 단위를 담은 배열로 리턴합니다.
    (FreeType 라이브러리 설치 시 사용 가능)

                                                                                                                                         
26. imagecolorat(int im , int x , int y);

    해당 좌표에 위치한 픽셀이 가지고 있는 색의 인덱스를 리턴합니다.
    인덱스 값 - GIF의 경우 0~255


27. imagecolorsforindex(int im , int index);

    해당 이미지의 컬러 인덱스의 RGB값을 배열 형태로 리턴합니다.

                                                                                                                                                                           
28. imagecolorexact(int im , int red , int green ,int blue);

    특정 색의 color인덱스 값을 리턴합니다.

                                                                                                                                                                                          
29. imagecolorclosest(int im , int red , int green , int blue);

    해당 RGB와 제일 일치하는 color 인덱스 값을 리턴합니다.


30. imagecolorset(int im , int index , int red , int green , int blue);

    해당 color 인덱스에 해당하는 색을 red , green , blue 인자로 지정한 색으로 변환합니다.

                                                                                                                                                                                                                    
31. imagecolorresolve(int im , int red , int green , int blue);

    해당 인자로 지정한 특정 색의 color 인덱스를 리턴합니다.

                                                                                                                                                                                                                                   
32. imagecolortotal(int im);

    해당 이미지에 사용 된 총 색의 수를 리턴합니다.

                                                                                                                                                                                                                                                  
33. imageinterlace(int im , int [interlace]);

    해당 이미지의 interlace 값을 설정합니다.

        Interlace = 0  -  이미지가 브라우저에 출력될 때 위에서부터 천천히 출력합니다.
        Interlace = 1  -  이미지가 브라우저에 출력될 때 전체 이미지가 서서히 나타납니다.

기타함수

1.exec(string command , string [array] , int [return_var]);

    외부 프로그램을 실행합니다.
    두 번째 인자를 설정하면 명령의 모든 라인을 리턴받을 수 있고 디폴트는 결과만 리턴받습니다. 
    세 번째 인자는 해당 리턴 값을 저장합니다.

그림. 8-137 exec( ) 함수 예

그림. 8-138 exec( ) 함수 결과
    소스에서 5행의 실행으로 해당 명령의 결과를 배열로 저장합니다.
    이것을 화면에 보여 주기 위해 7행의 while를 실행합니다.

 
2. system(string command , int [return_var]);

    외부 프로그램을 실행하고 결과를 화면에 출력합니다, 두 번째 인자는 실행 상태 값을 저장합니다.

그림. 8-139 system( ) 함수 예

그림. 8-140 system( ) 함수 결과
3. setcookie(string name , string value , int expire , string path , string domain , int secure);

    쿠키 설정을 하도록 브라우저에 보냅니다. 쿠키의 설정은 데이터의 어떠한 것보다 우선해서 실행해서
    보내야 됩니다.   이것은 스크립트에서 헤더 보다도 우선 해야합니다.
    설정된 쿠키를 강제로 종료하려면 쿠키를 한번 더 실행하면 됩니다.
              
    예) setcookie("username",$user,time()+3600);
        
    이것은 $user의 쿠키를 1시간 동안 유지하는 설정입니다.
    시간 설정은 초단위 이며  0일 경우 브라우저를 종료하면 쿠키가 제거됩니다.


4. session 함수

    php4에서 새롭게 등장했으며 쿠키와 함께 같이 유용하게 쓰입니다.
                                             
    예) 세션의 경우 PHP.INI의 설정 부분에 시간과 나머지 관련 설정할 수 있습니다.
    (PHP 설치 부분 참고)

        세션 시작 - session_start( );
        세션 등록 - session_register("해당 세션 값");
        세션 종료 - session_destroy("해당 세션 값");


5. connection_status(void);

    연결 상태를 bit단위로 값으로 리턴합니다.


6. connection_timeout(void);

    스크립트가 설정 시간을 초과 해 time out 되면 true를 리턴합니다.

                                                                                                                    
7. connection_aborted(void);

    클라이언트가 접속을 끊을 경우 true를 리턴합니다.

                                                                                                                                 
8. die(string message);

    해당 메시지를 출력하고 스크립트 실행을 중지합니다.

                                                                                                                                          
9. sleep(int seconds);

    스크립트의 실행을 지정한 초 만큼 지연합니다.

                                                                                                                                                   
10. exit(void);

    지금 스크립트의 실행을 중지합니다.

                                                                                                                                                            
11. ignore_user_abort(int [setting]);

    클라이언트의 접속이 끊겼을 경우 해당 스크립트의 실행 여부를 설정합니다.

                                                                                                                                                                         
12. register_shutdown_function(string func);

    해당 스크립트가 종료 때 실행될 함수를 설정합니다.

                                                                                                                                                                                  
13. usleep(int micro_sec);

    스크립트의 실행 시간을 마이크로 초단위로 지연시킵니다.



다음 장에서는 Mysql 기본 문법을 설명하겠습니다.

다음 이전 차례