II. Language Reference

Table of Contents
5. ±âº»¹®¹ý (Basic syntax)
6. º¯¼öÇüÅ (Types)
7. º¯¼ö (Variables)
8. »ó¼ö (Constants)
9. Ç¥Çö½Ä (Expressions)
10. ¿¬»êÀÚ (Operators)
11. Á¦¾î ±¸Á¶ (Control Structures)
12. ÇÔ¼ö (Functions)
13. Ŭ·¡½º¿Í °´Ã¼ (Classes and Objects)


Chapter 5. ±âº» ¹®¹ý(Basic Syntax)


HTML·ÎºÎÅÍ ºüÁ®³ª¿À±â(Escaping from HTML)

HTML·ÎºÎÅÍ ºüÁ®³ª¿Í "PHP code mode"·Î µé¾î°¡´Â ¹æ¹ýÀº ´ÙÀ½ 4°¡Áö°¡ ÀÖ´Ù :

Example 5-1. Ways of escaping from HTML

1.  <? echo ("this is the simplest, an SGML processing instruction\n"); ?>
 
2.  <?php echo("if you want to serve XML documents, do like this\n"); ?>
3.  <script language="php"> 
        echo ("some editors (like FrontPage) don't
              like processing instructions");
    </script>
4.  <% echo ("As of PHP 3.0.4 you may optionally use ASP-style tags"); %>
    <%= $variable; # This is a shortcut for "<%echo .." %>
      

ù ¹øÂ° ¹æ¹ýÀº short tags°¡ enableµÇ¾î ÀÖ¾î¾ß »ç¿ë°¡´ÉÇÏ´Ù. short_tags()¸¦ È£ÃâÇϰųª, short_tags run-time ¼³Á¤¿¡¼­ °¡´ÉÇϰí, ÄÄÆÄÀϽÿ¡ --enable-short-tags ¿É¼ÇÀ» ÁÖ¾î ÄÄÆÄÀÏÇÏ¿© enableÇÒ ¼öµµ ÀÖ´Ù.

³× ¹øÂ° ¹æ¹ýÀº ASP-style tags°¡ enableµÇ¾î ÀÖ¾î¾ß »ç¿ë°¡´ÉÇÏ´Ù. asp_tags run-time ¼³Á¤¿¡¼­ °¡´ÉÇϰí, ÄÄÆÄÀϽÿ¡ --enable-asp_tags ¿É¼ÇÀ» ÁÖ¾î ÄÄÆÄÀÏÇÏ¿© enableÇÒ ¼öµµ ÀÖ´Ù.

Note: ASP-style tags´Â 3.0.4ºÎÅÍ Áö¿øµÈ´Ù.

´Ý´Â °ýÈ£´Â newlineÀ» Æ÷ÇÔÇÑ´Ù.


¸í·É ±¸ºÐ (Instruction separation)

°¢°¢ÀÇ ¸í·ÉÀº C³ª Perl°ú ¸¶Âù°¡Áö·Î ±¸ºÐµÈ´Ù. °¢ ¹®ÀåÀº ;(¼¼¹ÌÄÝ·Ð)À¸·Î Á¾·áµÈ´Ù.

PHPÀÇ Á¾·áÅÃÀÎ ?>´Â ¹®ÀåÀÇ ³¡À̶ó´Â Àǹ̵µ ÇÔ²² °¡Áö°í ÀÖ´Ù. µû¶ó¼­ ´ÙÀ½ µÎ °³ÀÇ ¹®ÀåÀº µ¿ÀÏÇÏ´Ù.

  <?php
      echo("this is example\n");
  ?>
 
  <? echo("this is example\n") ?>


ÁÖ¼®¹® (Comments)

PHP´Â 'C'¿Í 'C++', Unix shell ÇüÅÂÀÇ ÁÖ¼®¹®À» Á¦°øÇÑ´Ù. ¿¹¸¦ µé¾î :

<?php
    echo "This is a test"; // This is a one-line c++ style comment
    /* This is a multi line comment
       yet another line of comment */
    echo "This is yet another test";
    echo "One Final Test"; # This is shell-style style comment
?>
     

"one-line" ÁÖ¼®¹®Àº ¶óÀÎÀÇ ³¡À̳ª, Çö php ÄÚµå ºí·ÏÀÇ ³¡¿¡¼­ ³¡³­´Ù.

<h1>This is an <?# echo "simple";?> example.</h1>
<p>The header above will say 'This is an example'.

'C' ÇüÅÂÀÇ ÁÖ¼®¹®Àº Áߺ¹Çؼ­ »ç¿ëÇÏÁö ¸»¾Æ¾ß ÇÑ´Ù.

<?php
 /* 
    echo "This is a test"; /* This comment will cause a problem */
 */
?>
    


Chapter 6. º¯¼ö ÇüÅ (Types)

PHP´Â ´ÙÀ½ ÇüÅÂÀÇtypeÀ» Áö¿øÇÑ´Ù. :

( ¿ªÀÚÁÖ : ³»ºÎÀûÀ¸·Î´Â ÇÔ¼ö¿Í Ŭ·¡½ºµµ º¯¼ö·Î Á¤ÀǵDZâ´Â ÇÏÁö¸¸ À̰͵éÀº ÀϹÝÀûÀÎ º¯¼ö·Î üũµÇÁö ¾Ê´Â´Ù. )

º¯¼öŸÀÔÀº º¸Åë ÇÁ·Î±×·¡¸Ó°¡ ¼±ÅÃÇÒ Çʿ䰡 ¾ø´Ù. ´ë½Å, PHP°¡ ½ÇÇàÁß¿¡ º¯¼öÀÇ °ªÀÇ ³»¿ë¿¡ µû¶ó ÀÚµ¿ÀûÀ¸·Î ¹Ù²Ù¾î ÁØ´Ù.

¸¸¾à ¿©·¯ºÐÀÌ Æ¯Á¤ÇÑ º¯¼ö ŸÀÔÀ¸·Î ÁöÁ¤ÇÏ°í ½Í´Ù¸é º¯¼ö¸¦ cast Çϰųª, settype() ÇÔ¼ö¸¦ »ç¿ëÇÑ´Ù.

Á¾Á¾ º¯¼öµéÀº ½ÇÇà½Ã ¾î¶² ŸÀÔÀ¸·Î µÇ¾î ÀÖ´À³Ä¿¡ µû¶ó ƯÁ¤ÇÑ »óȲ¿¡¼­ ¿øÇÏ´Â ´ë·Î µ¿ÀÛÇÏÁö ¾ÊÀ» ¶§°¡ ÀÖ´Ù. Type Juggling ÆíÀ» º¸¸é ÀÚ¼¼È÷ ¾Ë ¼ö ÀÖ´Ù.


Á¤¼öÇü (Integers)

Á¤¼öÇüÀº ´ÙÀ½°ú °°Àº ÇüÅÂÀÇ ¹®ÀåÀ¸·Î ÁöÁ¤ÇÒ ¼ö ÀÖ´Ù.

$a = 1234; # decimal number
$a = -123; # a negative number
$a = 0123; # octal number (equivalent to 83 decimal)
$a = 0x12; # hexadecimal number (equivalent to 18 decimal)


½Ç¼öÇü (Floating point numbers)

½Ç¼öÇü("doubles")Àº ´ÙÀ½°ú °°Àº ÇüÅÂÀÇ ¹®ÀåÀ¸·Î ÁöÁ¤ÇÒ ¼ö ÀÖ´Ù.

$a = 1.234;
$a = 1.2e3;


¹®ÀÚ¿­ (Strings)

¹®ÀÚ¿­Àº µÎ °³ÀÇ delimiters¸¦ »ç¿ëÇØ ³ªÅ¸³½´Ù.

¹®ÀÚ¿­ÀÌ Å« µû¿ÈÇ¥(")·Î µÑ·¯½ÎÀÌ°Ô Ç¥½ÃµÇ¸é, ´ÙÀ½°ú °°ÀÌ Æ¯¼ö ¹®ÀÚµéÀ» Æ÷ÇÔÇÒ ¼ö ÀÖ´Ù. C³ª Perl¿¡¼­Ã³·³ ¹é½½·¡½Ã(\)¸¦ »ç¿ëÇÏ¿© Ư¼ö ±âÈ£¸¦ Ç¥½ÃÇÏ°Ô µÈ´Ù.

Table 6-1. Escaped characters

sequence

meaning

\n

newline

\r

carriage

\t

horizontal tab

\\

backslash

\$

dollar sign

\"

double-quote

¶§·Î´Â ´Ù¸¥ escape¸¦ »ç¿ëÇÒ ¼ö ÀÖÁö¸¸, worningÀÌ ¹ß»ýÇÏ°Ô µÈ´Ù.

¹®ÀÚ¿­À» Ç¥ÇöÇÏ´Â ¶Ç ´Ù¸¥ ¹æ¹ýÀº Å« µû¿ÈÇ¥(") ´ë½Å ÀÛÀº µû¿ÈÇ¥(')¸¦ »ç¿ëÇÏ´Â °ÍÀÌ´Ù. À̰ÍÀº \\°ú \'ÀÇ µÎ°³¸¦ Á¦¿ÜÇϰí´Â ¾î¶² ¹é½½·¡½Ã 󸮵µ ÇÏÁö ¾Ê´Â´Ù.


¹®ÀÚ¿­ º¯È¯ (String conversion)

¹®ÀÚ¿­ÀÌ ¼ýÀÚ·Î ´Ù·ç¾îÁú ¶§, °á°ú °ª°ú typeÀº ´ÙÀ½°ú °°ÀÌ °áÁ¤µÈ´Ù.

¸¸¾à ¹®ÀÚ¿­ ¾È¿¡ '.' À̳ª 'e', 'E'ÀÇ ¹®ÀÚ°¡ ÀÖÀ» °æ¿ì ±× typeÀº doubleÀÌ µÈ´Ù. ±×·¸Áö ¾Ê´Ù¸é Á¤¼ö °ªÀÌ´Ù

±× °ªÀº ¹®ÀÚ¿­ÀÇ °¡´ÉÇÑ ºÎºÐ±îÁö¸¸ »ç¿ëµÈ´Ù. ¹®ÀÚ¿­ÀÌ ¿Ã¹Ù¸¥ ¼ýÀÚ µ¥ÀÌÅÍ·Î ½ÃÀÛÇÏÁö ¾ÊÀ¸¸é ±× °ªÀº 0ÀÌ´Ù. ¿Ã¹Ù¸¥ ¼ýÀÚ µ¥ÀÌÅÍ´Â '+'/'-', '0'-'9','.'°ú ¼ýÀÚ µÚÀÇ 'e'³ª 'E' Ç¥½ÃÀÌ´Ù.

ù ¹øÂ° Ç¥Çö½ÄÀÌ stringÀÎ °æ¿ì, º¯¼öÀÇ typeÀº ù ¹øÂ°°¡ ¾Æ´Ñ µÎ ¹øÂ° Ç¥Çö½Ä¿¡ ÀÇÇØ °áÁ¤µÈ´Ù.

$foo = 1 + "10.5";      // $foo is a double (11.5)
$foo = 1 + "-1.3e3";    // $foo is a double (-1299)
$foo = 1 + "bob-1.3e3"; // $foo is a double (1)
$foo = 1 + "bob3";      // $foo is an integer (1)
$foo = 1 + "10 Small Pigs";     // $foo is an integer (11)
$foo = 1 + "10 Little Piggies"; // $foo is a double (11); the string contains 'e'
$foo = "10.0 pigs " + 1;        // $foo is int (11)
$foo = "10.0 pigs " + 1.0;      // $foo is double (11)

ÀÌ º¯È¯¿¡ ´ëÇÑ ÀÚ¼¼ÇÑ ¼³¸íÀºUnix manual pageÀÇ strtod(3)À» º¸¾Æ¶ó.


¹è¿­ (Arrays)

¹è¿­À» ½ÇÁ¦·Î hash tables (associative arrays) °ú indexed arrays (vectors)ÀÇ µÎ°¡Áö·Î µ¿½Ã¿¡ »ç¿ëµÈ´Ù.


ÀÏÂ÷¿ø ¹è¿­ (Single Dimension Arrays)

PHP´Â scalar ¹è¿­°ú associative ¹è¿­ÀÇ µÎ °¡Áö¸¦ Áö¿øÇÑ´Ù. »ç½Ç µÎ °¡ÁöÀÇ Â÷ÀÌ´Â ¾ø´Ù. ¿©·¯ºÐÀº list()³ª array() ÇÔ¼ö¸¦ »ç¿ëÇÏ¿© ¹è¿­À» ¸¸µé°Å³ª, °¢ ¿ø¼ÒÀÇ °ªÀ» Á¤ÇØ ÁÖ¾î ¹è¿­À» ¸¸µé ¼ö ÀÖ´Ù.

$a[0] = "abc";
$a[1] = "def";
$b["foo"] = 13; 

¶ÇÇÑ ´ÙÀ½°ú °°ÀÌ º¯¼ö¿¡ °ªÀ» ´õÇØÁÖ´Â °Í¸¸À¸·Î ¹è¿­À» ¸¸µé ¼öµµ ÀÖ´Ù.

$a[] = "hello"; // $a[2] == "hello"
$a[] = "world"; // $a[3] == "world"

¹è¿­Àº Á¤·ÄÀ» ¿øÇÏ´Â Çü½Ä¿¡ µû¶ó asort(), arsort(), ksort(), rsort(), sort(), uasort(), usort(), uksort() ÇÔ¼öµéÀ» ÀÌ¿ëÇØ ¼ø¼­´ë·Î Á¤·ÄÇÒ ¼ö ÀÖ´Ù.

count() ÇÔ¼ö¸¦ »ç¿ëÇÏ¸é ¹è¿­ÀÇ ¿ø¼Ò °³¼ö¸¦ ¼¿ ¼ö ÀÖ´Ù.

next()¿Í prev() ÇÔ¼ö¸¦ ÀÌ¿ëÇÏ¿© ¹è¿­ÀÇ ³»¿ëÀ» Ž»öÇÒ ¼ö ÀÖ´Ù. ¹è¿­ÀÇ ³»¿ëÀ» Ž»öÇÏ´Â ¹æ¹ýÀ¸·Î each() ÇÔ¼ö¸¦ »ç¿ëÇÒ ¼öµµ ÀÖ´Ù.


´ÙÂ÷¿ø ¹è¿­ (Multi-Dimensional Arrays)

´ÙÂ÷¿ø ¹è¿­À̶ó ÇÏ´õ¶óµµ ½ÇÁ¦·Î ¸Å¿ì °£´ÜÇÑ´Ù. ¹è¿­ÀÇ °¢ Â÷¿ø¿¡ ´ëÇÏ¿© ´ÜÁö [key]°ªÀ» µÚ¾î ºÙ¿©ÁÖ¸é µÈ´Ù.

$a[1]      = $f;               # one dimensional examples
$a["foo"]  = $f;   
$a[1][0]     = $f;             # two dimensional
$a["foo"][2] = $f;             # (you can mix numeric and associative indices)
$a[3]["bar"] = $f;             # (you can mix numeric and associative indices)
$a["foo"][4]["bar"][0] = $f;   # four dimensional!

¿©·¯ °¡Áö ¹æ¹ýÀ¸·Î ÀÌ ´ÙÂ÷¿ø ¹è¿­¿¡ °ªÀ» ³ÖÀ» ¼ö ÀÖÀ¸³ª, associative ¹è¿­¿¡ °ªÀ» ÀúÀåÇÏ´Â °£´ÜÇÑ ¹æ¹ýÀ¸·Î array() ¸í·ÉÀ» »ç¿ëÇÏ´Â ¹æ¹ýÀÌ ÀÖ´Ù. ¿ì¼± ´ÙÀ½ÀÇ µÎ°¡Áö ÄÚµå´Â ÀÏÂ÷¿ø ¹è¿­¿¡ °ªÀ» ÀúÀåÇÏ´Â ¹æ¹ýÀ¸·Î °á°ú´Â µ¿ÀÏÇÏ´Ù.

# Example 1:
$a["color"]     = "red";
$a["taste"]     = "sweet";
$a["shape"]     = "round";
$a["name"]      = "apple";
$a[3]           = 4;
# Example 2:
$a = array(
     "color" => "red",
     "taste" => "sweet",
     "shape" => "round",
     "name"  => "apple",
     3       => 4
);

array() ÇÔ¼ö´Â ´ÙÂ÷¿ø ¹è¿­¿¡ ´ëÇØ¼­µµ ´ÙÀ½°ú °°ÀÌ »ç¿ëÇÒ ¼ö ÀÖ´Ù. :

<?
$a = array(
     "apple"  => array(
          "color"  => "red",
          "taste"  => "sweet",
          "shape"  => "round"
     ),
     "orange"  => array(
          "color"  => "orange",
          "taste"  => "sweet",
          "shape"  => "round"
     ),
     "banana"  => array(
          "color"  => "yellow",
          "taste"  => "paste-y",
          "shape"  => "banana-shaped"
     )
);
echo $a["apple"]["taste"];    # will output "sweet"
?>


°´Ã¼ (Objects)


°´Ã¼ ÃʱâÈ­ (Object Initialization)

°´Ã¼(Object)¸¦ ÃʱâÈ­ÇÏ´Â ¹æ¹ýÀº new ¸í·ÉÀ» »ç¿ëÇÏ¿© object¸¦ º¯¼ö¿¡ ÀνºÅϽº ½ÃŰ´Â °ÍÀÌ´Ù.

class foo {
    function do_foo () { 
        echo "Doing foo."; 
    }
}
$bar = new foo;
$bar -> do_foo ();
       


Type Àüȯ (Type juggling)

PHP´Â º¯¼ö ¼±¾ð¿¡ À־ ¸íÈ®ÇÑ Á¤ÀǸ¦ ÇÒ Çʿ䵵 ¾ø°í Áö¿øÇÏÁöµµ ¾Ê´Â´Ù. º¯¼öÀÇ Çü½ÄÀº º¯¼ö°¡ »ç¿ëµÇ´Â ¹®Àå ¼Ó¿¡¼­ °áÁ¤µÈ´Ù. ´Ù¸¥ ¸»·Î Çϸé, ¸¸¾à ¿©·¯ºÐÀÌ varÀ̶ó´Â º¯¼ö¿¡ ¹®ÀÚ¿­ °ªÀ» ÇÒ´çÇϸé var´Â ¹®ÀÚ¿­ º¯¼ö°¡ µÇ´Â °ÍÀ̰í, Á¤¼ö °ªÀ» ÇÒ´çÇϸé Á¤¼ö º¯¼ö°¡ µÇ´Â °ÍÀÌ´Ù.

PHPÀÇ ÀÚµ¿ Çü º¯È¯ ¿¹´Â '+' ¿¬»ê¿¡¼­ ãÀ» ¼ö ÀÖ´Ù. ¾î¶² ÇÑ ÇÇ ¿¬»êÀÚ°¡ doubleÀÌ¸é ³ª¸ÓÁö ¸ðµç ÇÇ¿¬»êÀÚÀÇ Çüµµ double·Î ¹Ù²î¾î °á°úµµ doubleÇüÀÌ µÈ´Ù. ¸¸¾à ÇÇ¿¬»êÀÚµéÀÌ Á¤¼öÇüÀÌ¸é °á°úµµ Á¤¼öÇüÀÌ´Ù. ¿©±â¼­ Áß¿äÇÑ °ÍÀº ÇÇ¿¬»êÀÚ ÀÚ½ÅÀÇ ÇüÀº ¹Ù²îÁö ¾Ê´Â´Ù´Â °ÍÀÌ´Ù.

$foo = "0";  // $foo is a string (ASCII 48)
$foo++;      // $foo is the string "1" (ASCII 49)
$foo += 1;   // $foo is now an integer (2)
$foo = $foo + 1.3;  // $foo is now a double (3.3)
$foo = 5 + "10 Little Piggies";    // $foo is a double (15)
$foo = 5 + "10 Small Pigs";   // $foo is an integer (15)  

¸¶Áö¸· µÎ °³ÀÇ ¿¹°¡ ÀǾÆÇÑ »ç¶÷Àº String conversionÀ» º¸±â ¹Ù¶õ´Ù.

¸¸¾à º¯¼ö¸¦ ¾î¶² ƯÁ¤ÇÑ typeÀ¸·Î ÁöÁ¤ÇÏ¿© °è»êµÇ°Ô ÇÏ°í ½Í´Ù¸é, Type casting ÆíÀ» º¸±â ¹Ù¶õ´Ù. ¸¸¾à ¿©·¯ºÐÀÌ º¯¼öÀÇ typeÀ» ¹Ù²Ù°í ½Í´Ù¸é settype().À» º¸±â ¹Ù¶õ´Ù.


Type casting

PHPÀÇ Type castingÀº C¿¡¼­¿Í °°ÀÌ ¸¹Àº ÀÏÀ» ÇÑ´Ù : º¯È¯ÇÏ·Á´Â º¯¼ö ¾Õ¿¡ ¿øÇÏ´Â type À̸§À» °ýÈ£ ¾È¿¡ ½áÁÖ¸é µÈ´Ù.

$foo = 10;   // $foo is an integer
$bar = (double) $foo;   // $bar is a double   

´ÙÀ½°ú °°Àº º¯È¯ÀÌ °¡´ÉÇÏ´Ù. :

Åǰú °ø¹éÀº °ýÈ£¾È¿¡¼­´Â ¹«½ÃµÈ´Ù. Áï ´ÙÀ½ µÎ °³ÀÇ ¹®ÀåÀº µ¿ÀÏÇÏ´Ù. :

$foo = (int) $bar;
$foo = ( int ) $bar;


Chapter 7. º¯¼ö (Variables)


º¯¼ö »ç¿ë ¹üÀ§ (Variable Scope)

º¯¼ö°¡ »ç¿ë°¡´ÉÇÑ °÷Àº ±× º¯¼ö°¡ ¼±¾ðµÈ °÷ ¾È¿¡¼­ ¸¸ÀÌ´Ù. PHP º¯¼öÀÇ ´ëºÎºÐÀº ÇÑ °³ÀÇ ¹üÀ§(single scope)¸¸À» °¡Áö°í ÀÖ´Ù. ±âº»ÀûÀ¸·Î ÇÔ¼ö ¾È¿¡¼­ ¼±¾ðµÈ °ÍÀº ÇÔ¼ö ¾È¿¡¼­¸¸ »ç¿ëµÇ´Â Áö¿ª º¯¼öÀÌ´Ù. ¶ÇÇÑ ÇÔ¼ö ¾È¿¡¼­ »ç¿ëµÇ´Â ÇÔ¼öµéÀº ±âº»ÀûÀ¸·Î Áö¿ª º¯¼ö¶ó°í °¡Á¤Çϰí ã°Ô µÈ´Ù. ¿¹¸¦ µé¾î:

    $a=1; /* global scope */
    Function Test() {
        echo $a; /* reference to local scope variable */
    }
    Test();

ÀÌ ½ºÅ©¸³Æ®´Â ÇÔ¼ö ¾ÈÀÇ $a º¯¼ö¸¦ Áö¿ªº¯¼ö·Î °¡Á¤ÇÏ¿´°í, Áö¿ªº¯¼ö $a¿¡´Â ¾Æ¹« °ªµµ ´ëÀÔµÇÁö ¾Ê¾Ò±â ¶§¹®¿¡ ¾Æ¹«·± Ãâ·Âµµ ³ªÅ¸³ªÁö ¾Ê´Â´Ù. À̰ÍÀº C¿Í´Â ¾à°£ Â÷À̰¡ ³ª´Â ºÎºÐÀÌ´Ù. PHP¿¡¼­ Àü¿ªº¯¼ö¸¦ »ç¿ëÇÏ·Á¸é »ç¿ëÇÏ°í ½ÍÀº Àü¿ª º¯¼ö¸¦ ÇÔ¼ö ¾È¿¡ global ¼±¾ðÀ» ÇØ ÁÖ¾î¾ß ÇÑ´Ù. ¿¹¸¦ µé¾î :

    $a=1;
    $b=2;
    Function Sum() {
        global $a,$b;
        $b = $a + $b;
    } 
    Sum();
    echo $b;

À§ÀÇ ½ºÅ©¸³Æ®´Â "3"À» Ãâ·ÂÇÒ °ÍÀÌ´Ù. ÇÔ¼ö ³»¿¡¼­ $a and $b¸¦ global·Î ¼±¾ðÇßÀ¸¹Ç·Î, ÀÌ ÇÔ¼ö³»ÀÇ $a, $b´Â Àü¿ª º¯¼ö¸¦ ÂüÁ¶ÇÏ°Ô µÈ´Ù. ÇÔ¼ö ³»¿¡¼­ ´Ù·ê ¼ö ÀÖ´Â Àü¿ªº¯¼öÀÇ °³¼ö¿¡´Â Á¦ÇÑÀÌ ¾ø´Ù.

Àü¿ª º¯¼ö¸¦ ÂüÁ¶ÇÏ´Â µÎ ¹øÂ° ¹æ¹ýÀº PHP¿¡¼­ Ưº°È÷ Á¤ÀÇÇϰí ÀÖ´Â $GLOBALS¶ó´Â ¹è¿­À» »ç¿ëÇÏ´Â °ÍÀÌ´Ù. À§ÀÇ ¿¹¸¦ ´ÙÀ½°ú °°ÀÌ ¹Ù²ã ¾µ ¼ö ÀÖ´Ù. :

    $a=1;
    $b=2;
    Function Sum() {
        $GLOBALS["b"] = $GLOBALS["a"] + $GLOBALS["b"];
    } 
    Sum();
    echo $b;

$GLOBALS ¹è¿­Àº º¯¼öÀ̸§ÀÌ Key°¡ µÇ°í, ±× º¯¼öÀÇ ³»¿ëÀÌ °ªÀÌ µÇ´Â ¿ø¼Ò¸¦ °¡Áø associative ¹è¿­ÀÌ´Ù.

º¯¼ö ¹üÀ§¿¡¼­ ¶Ç ´Ù¸¥ Áß¿äÇÑ °ÍÀº Á¤Àû º¯¼ö(static variable)ÀÌ´Ù. Á¤Àû º¯¼ö´Â Áö¿ª ÇÔ¼ö ³»¿¡¼­¸¸ Á¸ÀçÇÏÁö¸¸ Áö¿ª ÇÔ¼ö°¡ Á¾·áµÇ¾îµµ ±× °ªÀ» Àоî¹ö¸®Áö ¾Ê°í °¡Áö°í ÀÖ´Ù. ´ÙÀ½ ¿¹¸¦ º¸ÀÚ :

    Function Test() {
        $a=0;
        echo $a;
        $a++;
    }

À§ÀÇ ÇÔ¼ö´Â Test()¸¦ ºÎ¸¦ ¶§ ¸¶´Ù $a°¡ 0À¸·Î ´ëÀԵǹǷΠ0À» Ãâ·ÂÇÑ´Ù.

    Function Test() {
        static $a=0;
        echo $a;
        $a++;
    }

À§ÀÇ ÇÔ¼ö´Â Test()¸¦ ºÎ¸¦ ¶§¸¶´Ù óÀ½¿¡´Â 0, ´ÙÀ½¿¡´Â 1, ±× ´ÙÀ½¿¡´Â 2ÇÏ´Â ½ÄÀ¸·Î Çϳª¾¿ Áõ°¡µÈ ¼ö¸¦ Ãâ·ÂÇØ ÁØ´Ù. Áï, $aÀÇ °ªÀÌ º¸Á¸µÇ´Â °ÍÀÌ´Ù.

¶ÇÇÑ Á¤Àû º¯¼ö´Â ´ÙÀ½°ú °°ÀÌ recursion¿¡¼­ ¹Ýµå½Ã ÇÊ¿äÇÏ´Ù. Àç±ÍÀûÀÎ ÇÔ¼ö´Â ÀÚ±â ÀÚ½ÅÀÇ ÇÔ¼ö¸¦ È£ÃâÇÏ´Â °ÍÀ» ¸»ÇÑ´Ù. Àç±ÍÀûÀÎ ÇÔ¼ö¸¦ »ç¿ëÇÒ ¶§´Â ¹«ÇÑ ·çÇÁ¿¡ ºüÁú ¼ö Àֱ⠶§¹®¿¡ ¸Å¿ì ÁÖÀǸ¦ ¿äÇÑ´Ù. µû¶ó¼­ ¿©·¯ºÐÀº Àç±Í È£ÃâÀ» ³¡³»´Â ÀûÀýÇÑ ¹æ¹ýÀ» ¸¶·ÃÇØ µÎ¾î¾ß ÇÑ´Ù. ´ÙÀ½ÀÇ °£´ÜÇÑ ¿¹Á¦´Â 10¹øÀÇ Àç±ÍÀû È£ÃâÀ» ÇÑ´Ù. :

Function Test() {
    static $count=0;
    $count++;
    echo $count;
    if($count <  10) {
        Test();
    }
    $count--;
}


°¡º¯ º¯¼ö (Variable variables)

°¡²û º¯¼öÀÇ À̸§À» º¯°æÇÒ ¼ö ÀÖ´Ù¸é Æí¸®ÇÏ´Ù°í ´À³¥ ¶§°¡ ÀÖ´Ù. À̰÷¿¡¼­´Â º¯¼öÀÇ À̸§À» ¹Ù²Ù¾î »ç¿ëÇÏ´Â ¹æ¹ýÀ» ¾Ë¾Æº¸ÀÚ. º¸ÅëÀÇ º¯¼ö ¼±¾ðÀº ´ÙÀ½°ú °°´Ù. :

$a = "hello"; 

¿©±â¼­ ÀÌ °¡º¯ º¯¼öÀº º¯¼öÀÇ °ªÀ» °¡Áú ¼öµµ ÀÖ°í, ¶ÇÇÑ ÀÌ °ªÀ» º¯¼öÀÇ À̸§À¸·Î ´Ù·ê ¼öµµ ÀÖ´Ù. À§ÀÇ ¿¹¿¡¼­ hello´Â $$¸¦ ¾Õ¿¡ ºÙÀÌ¸é º¯¼ö À̸§À¸·Î »ç¿ëÇÒ ¼ö ÀÖ´Â °ÍÀÌ´Ù. ¿¹ :

$$a = "world";  

ÀÌ·¸°Ô Çϸé PHPÀÇ symbol tree¿¡´Â "hello"¶ó´Â °ªÀ» °¡Áö´Â $a¿Í "world"¶ó´Â °ªÀ» °¡Áö´Â $helloÀÇ µÎ °³ÀÇ º¯¼ö°¡ »ý±â°Ô µÈ´Ù. ±×·¯¹Ç·Î ´ÙÀ½°ú °°Àº ¹®ÀåÀº :

echo "$a ${$a}";    

´ÙÀ½ ¹®Àå°ú ¶È °°Àº Ãâ·ÂÀ» ³ªÅ¸³»°Ô µÈ´Ù.:

echo "$a $hello";  

ie. µÑÀÇ Ãâ·Â: hello world.

°¡º¯ º¯¼ö¸¦ ¹è¿­°ú ÇÔ²² »ç¿ëÇÏ·Á¸é, ÇѰ¡Áö ¸ðÈ£¼º ¹®Á¦¸¦ ÇØ°áÇØ¾ß ÇÑ´Ù. ±×°ÍÀº, ¸¸¾à ¿©·¯ºÐÀÌ $$a[1]À̶ó°í ½èÀ¸¸é, $a[1]À» ÇϳªÀÇ º¯¼ö·Î º¼ °ÍÀÎÁö, ¾Æ´Ï¸é $$a¸¦ º¯¼ö·Î º¸°í ±× º¯¼ö¿¡ [1]ÀÇ À妽º¸¦ ÇØ ÁÙ °ÍÀΰ¡ ÇÏ´Â ¹®Á¦ÀÌ´Ù. ´ÙÀ½°ú °°ÀÌ ÇÏ¿© ¸ðÈ£¼ºÀ» ÇØ°áÇÏÀÚ. ÀüÀÚÀÇ °æ¿ì ${$a[1]}¶ó°í ¾²°í, ÈÄÀÚÀÇ °æ¿ì´Â ${$a}[1]¶ó°í ¾²¸é µÈ´Ù. ( ¿ªÀÚÁÖ: °¡º¯ º¯¼ö¸¦ ³ªÅ¸³¾ ¶§´Â Ç×»ó { }·Î µÑ·¯ ½Î´Â °ÍÀÌ º¸±â ÁÁ°í ¿À·ùµµ ¾ø¾Ù ¼ö ÀÖ´Ù.)


PHP ¹Û¿¡¼­ ¿Â º¯¼öµé (Variables from outside PHP)

HTML Forms (GET and POST)

ÆûÀÌ PHP ½ºÅ©¸³Æ®·Î submitµÇ¸é Æû¿¡ ÀÖ´Â ¸ðµç ³»¿ëµéÀÌ ÀÚµ¿ÀûÀ¸·Î ¸¸µé¾îÁø PHP º¯¼ö·Î µé¾î¿Â´Ù. ´ÙÀ½ÀÇ ÆûÀ» º¸ÀÚ :

Example 7-1. Simple form variable

<form action="foo.php3" method="post">
  Name: <input type="text" name="name"><br>
  <input type="submit">
</form>

À§ÀÇ ÆûÀÌ submitµÇ¸é PHP´Â $nameº¯¼ö¸¦ ¸¸µé°í, ÀÌ º¯¼ö¿¡ ÆûÀÇ Name: Çʵ忡 ÀÔ·ÂµÈ ¸ðµç ³»¿ëÀ» ÀúÀåÇÑ´Ù.

PHP´Â Æû¿¡ 1Â÷¿ø ¹è¿­ º¯¼öµµ »ç¿ëÇÒ ¼ö ÀÖ´Ù. ¿¹¸¦µé¾î, ¿©·¯ºÐÀº ¿©·¯ º¯¼ö¸¦ ÇÔ²² »ç¿ëÇÏ´Â ±×·ì °ü·Ã º¯¼ö(group related variables)³ª multi select º¯¼öÀÇ ³»¿ëµéÀ» °Ë»öÇÒ ¼ö ÀÖ´Ù. :

Example 7-2. More complex form variables

<form action="array.html" method="post">
  Name: <input type="text" name="personal[name]"><br>
  Email: <input type="text" name="personal[email]"><br>
  Beer: <br>
  <select multiple name="beer[]">
    <option value="warthog">Warthog
    <option value="guinness">Guinness
  </select>
  <input type="submit">
</form>

¸¸¾à track_vars ¼³Á¤ÀÌ on µÇ¾î Àְųª, <?php_track_vars?> Áö½ÃÀÚ°¡ ¼³Á¤µÇ¾î ÀÖ´Ù¸é, POST³ª GETÀ¸·Î Àü¼ÛµÇ´Â ¸ðµç º¯¼öµé°ú ±× ³»¿ëÀº Àü¿ª ¹è¿­ º¯¼öÀÎ $HTTP_POST_VARS°ú $HTTP_GET_VARS¿¡¼­ ãÀ» ¼ö ÀÖ´Ù.


IMAGE SUBMITÀÇ º¯¼ö À̸§

ÆûÀº submitÇÒ ¶§ ÀϹÝÀûÀ¸·Î »ç¿ëÇÏ´Â submit ¹öư´ë½Å ´ÙÀ½°ú °°ÀÌ ±×¸²À» »ç¿ëÇÒ ¼öµµ ÀÖ´Ù. :

<input type=image src="image.gif" name="sub">

»ç¿ëÀÚ°¡ image¸¦ Ŭ¸¯Çϸé, ÆûÀº sub_x¿Í sub_yÀÇ µÎ °³ÀÇ º¯¼ö°¡ Ãß°¡µÇ¾î ¼­¹ö¿¡ Àü¼ÛµÈ´Ù. ÀÌ µÎ º¯¼ö´Â À̹ÌÁö¿¡¼­ »ç¿ëÀÚ°¡ clickÇÑ À§Ä¡ Á¤º¸¸¦ ´ã°í ÀÖ´Ù. ÀϺΠºê¶ó¿ìÀú¿¡¼­´Â ¹ØÁÙ(_)´ë½Å ¸¶Ä§Ç¥(.)¸¦ »ç¿ëÇÏ´Â °æ¿ìµµ Àִµ¥, PHP´Â ÀÌ·± °æ¿ì ÀÚµ¿ÀûÀ» ¸¶Ä§Ç¥(.)¸¦ ¹ØÁÙ(_)·Î ¹Ù²ãÁØ´Ù.


HTTP Cookies

PHP´Â HTTP Äí۸¦ Netscape's SpecÀÇ Á¤ÀÇ¿¡ µû¶ó Á¦°øÇÑ´Ù. Cookie ¸ÞÄ«´ÏÁòÀº Æ®·¡Å·À̳ª »ç¿ëÀÚ ½Äº° µîÀ» À§ÇØ ¿ø°Ý browser¿¡ ÀúÀåµÈ µ¥ÀÌÅ͸¦ µ¹·Á ¹Þ´Â °úÁ¤À» ¸»ÇÑ´Ù. ¿©·¯ºÐÀº cookie¸¦ ¼³Á¤Çϱâ À§ÇØ SetCookie() ÇÔ¼ö¸¦ »ç¿ëÇÒ ¼ö ÀÖ´Ù. Cookie´Â HTTP Çì´õÀÇ ÇÑ ºÎºÐÀ̹ǷÎ, SetCookie() ÇÔ¼ö´Â ºê¶ó¿ìÀú·Î º¸³»´Â ¾î¶² µ¥ÀÌÅͺ¸´Ùµµ ¾Õ¿¡ »ç¿ëÇØ¾ß ÇÑ´Ù. ÀÌ Á¦¾àÀº Header() ÇÔ¼ö¿Í °°Àº Á¦¾àÀ¸·Î º¸¸é µÈ´Ù. ´ç½ÅÀÌ º¸³»ÁØ ¸ðµç cookie´Â ÀÚµ¿ÀûÀ¸·Î GETÀ̳ª POST ¹æ½Ä µ¥ÀÌÅÍ¿Í °°Àº PHP º¯¼ö·Î º¯È¯µÈ´Ù.

¸¸¾à ¿©·¯ºÐÀÌ µ¿ÀÏÇÑ cookie¿¡ ¿©·¯ °ªÀ» ÀúÀåÇÏ°í ½Í´Ù¸é CookieÀ̸§¿¡ []¸¦ ´õÇÏ¸é µÈ´Ù. ¿¹¸¦ µé¾î :

SetCookie("MyCookie[]","Testing", time()+3600);  

ÄíŰ´Â »õ·Î ¼³Á¤Çϸé path³ª µµ¸ÞÀÎÀÌ ´Ù¸£Áö ¾Ê´Â ÇÑ ÀÌÀüÀÇ Äí۸¦ µ¤¾î¾²°Ô µÈ´Ù. ±×·¯¹Ç·Î ¼îÇΠīƮ °°Àº ÀÀ¿ë ÇÁ·Î±×·¥¿¡¼­´Â Ä«¿îÅ͸¦ À¯ÁöÇϰí, À̰ÍÀ» ±âÁØÀ¸·Î Cookie¸¦ »ç¿ëÇÏ´Â °ÍÀÌ ÁÁ´Ù. ¿¹ :

Example 7-3. SetCookie Example

$Count++;
SetCookie("Count",$Count, time()+3600);
SetCookie("Cart[$Count]",$item, time()+3600); 


ȯ°æ º¯¼ö (Environment variables)

PHP´Â ÀÚµ¿ÀûÀ¸·Î ȯ°æ º¯¼öµéÀ» ÀϹÝÀûÀÎ PHP º¯¼ö·Î ¸¸µç´Ù.

echo $HOME;  /* Shows the HOME environment variable, if set. */    

GET, POST and Cookie ¸ÞÄ«´ÏÁòÀ» ÅëÇØ¼­ Á¤º¸°¡ µé¾î ¿Â Á¤º¸·ÎºÎÅÍ ÀÚµ¿ÀûÀ¸·Î PHP º¯¼ö°¡ »ý±â¹Ç·Î, ÀÌ ¹æ¹ýÀº ¶§¶§·Î ¿Ã¹Ù¸¥ ¹öÀüÀ» È®ÀÎÇϱâ À§ÇØ È¯°æÀ¸·ÎºÎÅÍ º¯¼ö¸¦ ÀÐ¾î µéÀ̱⿡ °¡Àå ÁÁ´Ù. À̸¦ À§ÇØ getenv() ÇÔ¼ö¸¦ »ç¿ëÇÒ ¼öµµ ÀÖ´Ù. ¿©·¯ºÐÀº ȯ°æ º¯¼ö¸¦ ¼³Á¤Çϱâ À§ÇØ putenv() ÇÔ¼ö¸¦ »ç¿ëÇÒ ¼öµµ ÀÖ´Ù.


º¯¼öÀÇ Type ÆÇ´Ü (Determining variable types)

PHP°¡ º¯¼öÀÇ typeÀ» Á¤Çϰí (ÀϹÝÀûÀ¸·Î) ÇÊ¿äÇÑ °æ¿ì¿¡´Â ±× typeÀ» ¹Ù²Ù¹Ç·Î, ƯÁ¤ ½ÃÁ¡¿¡ ±× º¯¼ö ¾î¶² typeÀÎÁö´Â ½±°Ô ¾Ë ¼ö ¾ø´Ù. PHP´Â º¯¼öÀÇ typeÀ» ¾Ë¾Æº¸±â À§ÇØ ¿©·¯°³ÀÇ ÇÔ¼ö¸¦ °¡Áö°í ÀÖ´Ù. gettype(), is_long(), is_double(), is_string(), is_array(), and is_object()°¡ ±×°ÍµéÀÌ´Ù.


Chapter 8. »ó¼ö(Constants)

PHP´Â ¾à°£ÀÇ ±âº»ÀûÀÎ »ó¼öµéÀ» Á¦°øÇϰí, ½ÇÇà½Ã »ó¼ö¸¦ ¼³Á¤ÇÒ ¼ö ÀÖ´Â ¸ÞÄ«´ÏÁòÀ» Áö¿øÇÑ´Ù. »ó¼ö´Â º¯¼ö¿Í ºñ½ÁÇÏ´Ù. ±×·¯³ª define()ÇÔ¼ö¸¦ »ç¿ëÇÏ¿© ¼±¾ðÇÑ´Ù´Â °Í°ú ³ªÁß¿¡ ´Ù¸¥ °ªÀ¸·Î ¹Ù²Ü ¼ö ¾ø´Ù´Â Á¡ÀÌ Â÷À̰¡ ÀÖ´Ù.

¹Ì¸® ÁöÁ¤µÈ »ó¼ö´Â ´ÙÀ½°ú °°´Ù.

__FILE__
ÇöÀç ó¸®ÁßÀÎ ½ºÅ©¸³Æ®ÀÇ ÆÄÀϸí. ÇöÀç ÆÄÀÏÀÌ include³ª require·Î Æ÷ÇÔµÈ ÆÄÀÏÀ̶ó¸é, includeÇÔ¼öµîÀ» È£ÃâÇÑ ºÎ¸ð ÆÄÀÏÀÌ ¾Æ´Ñ, Æ÷ÇÔµÈ ÆÄÀÏÀÇ À̸§À» °¡Áø´Ù.
 
__LINE__
ÇöÀç ó¸®ÁßÀÎ ¸í·ÉÀÇ ½ºÅ©¸³Æ®³»¿¡¼­ÀÇ ¶óÀÎ ¹øÈ£. ÇöÀç ÆÄÀÏÀÌ include³ª require·Î Æ÷ÇÔµÈ ÆÄÀÏÀ̶ó¸é, includeÇÔ¼öµîÀ» È£ÃâÇÑ ºÎ¸ð ÆÄÀÏÀÌ ¾Æ´Ñ, Æ÷ÇÔµÈ ÆÄÀϳ»¿¡¼­ÀÇ ¶óÀÎ ¹øÈ£¸¦ °¡Áø´Ù.
 
PHP_VERSION
ÇöÀç »ç¿ëÁßÀÎ PHP ÆÄ¼­ÀÇ ¹öÀü. (¿¹ : '3.0.8-dev')
 
PHP_OS
PHP ÆÄ¼­°¡ ½ÇÇàµÇ°í ÀÖÀÀ OSÀÇ À̸§. (¿¹ : 'Linux')
 
TRUE
Âü(TRUE) °ª
 
FALSE
°ÅÁþ(FALSE) °ª
 
E_ERROR
¹®¹ý ¿À·ù°¡ ¾Æ´Ñ º¹±¸°¡ ºÒ°¡´ÉÇÑ ¿¡·¯¸¦ Ç¥½ÃÇÑ´Ù.
 
E_WARNING
PHP°¡ ¾î¶² °è¼Ó ¼öÇà °¡´ÉÇÑ ¿À·ù¸¦ °¨Áö ÇßÀ½À» Ç¥½ÃÇÑ´Ù. ¿¹¸¦µé¾î ereg()¿¡ regexp°¡ À߸øµÈ °æ¿ì µîÀÌ´Ù.
 
E_PARSE
ÆÄ¼­°¡ ½ºÅ©¸³Æ® ÆÄÀÏ¿¡¼­ ¹®¹ýÀûÀ¸·Î À߸øµÈ ¸í·ÉÀ» ¸¸³­ °æ¿ìÀÌ´Ù. º¹±¸´Â ºÒ°¡´ÉÇÏ´Ù.
 
E_NOTICE
¿¡·¯´Â ¾Æ´ÏÁö¸¸ ¾î¶² ¾Ë·ÁÁú »çÇ×ÀÌ ÀÖÀ½À» ³ªÅ¸³½´Ù. ½ÇÇàÀº °è¼ÓµÈ´Ù. ¿¹¸¦µé¾î hash À妽º¿¡ µû¿ÈÇ¥°¡ ¾ø´Â ¹®ÀÚ¿­ÀÌ »ç¿ëµÇ¾ú´Ù´øÁö, ÀÌÀü¿¡ ¼±¾ðµÇÁö ¾ÊÀº º¯¼öÀÇ °ªÀ» Àд´ٴøÁö ÇÏ´Â °æ¿ìÀÌ´Ù.

E_* »ó¼ö´Â ´ë°³ error_reporting() ÇÔ¼ö¿¡¼­ reporting ·¹º§À» Á¤ÇÒ ¶§ ÈçÈ÷ »ç¿ëµÈ´Ù.

ÁÖÀÇÇÒ Á¡Àº »ó¼ö´Â C¿¡¼­ÀÇ macro °ªÀº °ÍÀÌ ¾Æ´Ï´Ù. ´ÜÁö scalar °ªÀ» °¡Áú ¼ö ÀÖÀ» »ÓÀÌ´Ù.

¿©·¯ºÐÀº define()ÇÔ¼ö¸¦ »ç¿ëÇÏ¿© Ãß°¡ÀûÀÎ »ó¼ö¸¦ Á¤ÀÇÇÒ ¼ö ÀÖ´Ù.

Example 8-1. Defining Constants

<?php
    define("CONSTANT", "Hello world.");
    echo CONSTANT; // outputs "Hello world."
?>
 

Example 8-2. Using __FILE__ and __LINE__

<?php
    function report_error($file, $line, $message) {
        echo "An error occured in $file on line $line: $message.";
    }
    
    report_error(__FILE__,__LINE__, "Something went wrong!");
?>
 


Chapter 9. Ç¥Çö½Ä (Expressions)

Ç¥Çö½ÄÀº PHP¿¡¼­ ¸Å¿ì Áß¿äÇÑ ³»¿ëÀÌ´Ù. PHP¿¡¼­ ¿©·¯ºÐÀÌ ÀÛ¼ºÇÏ´Â °ÅÀÇ ¸ðµç °ÍÀº Ç¥Çö½ÄÀÌ´Ù. °£´ÜÈ÷ Ç¥Çö½ÄÀÇ Á¤ÀǸ¦ ¾ö¹ÐÇÏ°Ô ¸»ÇÑ´Ù¸é "°ªÀ» °¡Áö°í ÀÖ´Â ¸ðµç °Í"("anything that has a value")ÀÌ´Ù.

°£´ÜÇÑ ¿¹Á¦·Î "$a = 5"¿Í °°Àº °ÍÀÌ ÀÖ´Ù. À̰ÍÀº 5¶ó´Â °ªÀ» $a¶ó´Â º¯¼ö¿¡ ´ëÀÔÇÏ´Â ¹®ÀåÀÌ´Ù. ¿©±â¼­ 5¶ó´Â Ç¥Çö½ÄÀº 5ÀÇ °ªÀ̶ó´Â Àǹ̰¡ µÈ´Ù. À§ÀÇ ¹®Àå ´ÙÀ½¿¡ "$b = $a"¶ó´Â ¹®ÀåÀÌ ÀÖ´Ù¸é ¿©±â¼­ $a¶ó´Â Ç¥Çö½ÄÀº ±× º¯¼ö°¡ °¡Áø 5¶ó´Â °ªÀ» Ç¥ÇöÇÑ´Ù.

Á¶±Ý º¹ÀâÇÑ °æ¿ì´Â ÇÔ¼öÀÌ´Ù. ´ÙÀ½ ÇÔ¼ö¸¦ º¸ÀÚ. :

      function foo()
      {
          return 5;
      }

$c = 5¶ó´Â ¹®Àå¿¡¼­ foo()´Â 5¸¦ µ¹·ÁÁÙ °ÍÀ̱⠶§¹®¿¡ 'foo()'¶ó´Â Ç¥Çö½ÄÀº 5¸¦ Ç¥ÇöÇÑ´Ù°í ¸»ÇÒ ¼ö ÀÖ´Ù.

PHP´Â Á¤¼ö°ª(integer values), ½Ç¼ö°ª(floating point values), ¹®ÀÚ¿­(string values)ÀÇ 3°¡Áö ½ºÄ®¶ó typeÀ» °¡Áö°í ÀÖ´Ù. (½ºÄ®¶ó °ªÀ̶õ ´õ ÀÌ»ó ÀÛÀº °ªÀ¸·Î Âɰ³Áú ¼ö ¾ø´Â °ªÀ» ¸»ÇÑ´Ù.) ¶ÇÇÑ PHP´Â ¹è¿­(array)°ú °´Ã¼(object)ÀÇ 2°¡Áö È¥ÇÕ(composite, non-scalar) typeÀ» Áö¿øÇÑ´Ù. ÀÌ typeµéÀº º¯¼ö¿¡ °ªÀ» ÇÒ´çÇÒ ¼ö ÀÖ°í, ÇÔ¼ö¿¡ ÀÇÇØ °ªÀ» µ¹·ÁÁÙ ¼ö ÀÖ´Ù.

¿©±â±îÁö´Â PHP/FI 2 »ç¿ëÀÚµéÀº ¾Æ¹«°Íµµ ¹Ù²îÁö ¾Ê¾Ò´Ù°í ´À³¥ °ÍÀÌ´Ù. PHP´Â °ÅÀÇ ¸ðµç °ÍÀÌ Ç¥Çö½ÄÀ¸·Î Ç¥ÇöµÈ´Ù´Â Á¡¿¡¼­, Ç¥Çö Á᫐ ¾ð¾î (expression-oriented language)¶ó°í ºÒ¸± ¼ö ÀÖ´Ù. Ç¥Çö Áß½ÉÀÇ ÁÁÀº ¿¹´Â ´ëÀÔ¹®ÀÌ´Ù. PHP¿¡¼­´Â C¿Í °°ÀÌ ´ëÀÔ¹®µµ ÇϳªÀÇ Ç¥Çö½ÄÀ¸·Î º»´Ù. µû¶ó¼­ '$a=5; $b=5;'´Â '$a = ($b=5);' ȤÀº '$a = $b = 5;'·Î Ç¥Çö °¡´ÉÇÏ´Ù.

Ç¥Çö Áß½ÉÀÇ ´Ù¸¥ ÁÁÀº ¿¹·Î´Â ++¿Í --ÀÌ´Ù. In PHP/FI 2¿¡¼­´Â '$a++'¿Í °°Àº ¹®ÀåÀº ¾Æ¹« °ªµµ °¡ÁöÁö ¾Ê¾Ò´Ù. Áï, Ç¥Çö½ÄÀÌ ¾Æ´Ï¾ú´Ù. µû¶ó¼­ ÀÌ °ªÀ» ´Ù¸¥ °÷¿¡ ´ëÀÔÇÏ´Â °ÍÀº ºÒ°¡´ÉÇß´Ù. ±×·¯³ª PHP 3¿¡¼­´Â À̰ÍÀÌ °¡´ÉÇØÁ³´Ù. C¿¡¼­¿Í °°ÀÌ ++/--¸¦ »ç¿ëÇÏ´Â ¹æ¹ý¿¡´Â ¾Õ¿¡ ºÙÀÌ´Â °Í°ú µÚ¿¡ ºÙÀÌ´Â °Í µÎ°¡Áö°¡ ÀÖ´Ù. µÑ ¸ðµÎ º¯¼öÀÇ °ªÀÌ Áõ°¡µÈ´Ù´Â Á¡Àº °°À¸³ª, '++$variable'Àº ±× º¯¼öÀÇ Áõ°¡µÈ °ªÀÌ Ç¥Çö½ÄÀÇ °ªÀÌ µÇ°í, '$variable++'´Â º¯¼öÀÇ Áõ°¡µÇ±â ÀüÀÇ °ªÀÌ Ç¥Çö½ÄÀÇ °ªÀÌ µÈ´Ù.

ºñ±³ Ç¥Çö½ÄÀº 0À̳ª 1ÀÇ °ªÀ» °¡Áø´Ù. 0Àº ºÎÁ¤(FALSE)À» 1Àº ±àÁ¤(TRUE)¸¦ ³ªÅ¸³½´Ù. PHP´Â > (bigger than), >= (bigger than or equal to), == (equal),< (smaller than), <= (smaller than or equal to)¸¦ Áö¿øÇÑ´Ù.

¸¶Áö¸· ¿¹´Â °áÇÕµÈ ¿¬»ê-´ëÀÔ Ç¥Çö½Ä(combined operator-assignment expression)ÀÌ´Ù. ¹¹ º¹ÀâÇÑ ¾ê±â´Â ¾Æ´Ï°í '$a = $a + 3'Àº Ç¥Çö½ÄÀ» '$a += 3'À¸·Î Ç¥ÇöÇÒ ¼ö ÀÖ´Â °ÍÀÌ´Ù. -=, *=, /=, .= µîµµ »ç¿ëÇÒ ¼ö ÀÖ´Ù.

´ÙÀ½¿¹¸¦ º¸¸é µµ¿òÀÌ µÉ °ÍÀÌ´Ù. :

function double($i)
{
        return $i*2;
}
$b = $a = 5;          /* $a¿Í $b ¿¡ 5 ´ëÀÔ */
$c = $a++;            /* post-increment, $c ¿¡´Â $aÀÇ ¿ø·¡ °ªÀÎ 5°¡ ´ëÀԵǰí $a´Â 6ÀÌ µÈ´Ù */
$e = $d = ++$b;       /* pre-increment, $d¿Í $e´Â Áõ°¡µÈ $bÀÇ °ª 6ÀÌ ´ëÀԵȴÙ. */
 
/* ¿©±âºÎÅÍ $d¿Í $eÀÇ °ªÀº 6ÀÌ´Ù. */
$f = double($d++);    /* $f´Â $d°¡ Áõ°¡µÇ±â ÀüÀÇ °ªÀÎ 6À» µÎ ¹èÇÑ °ªÀ» °¡Áø´Ù. 2*6 = 12 */
$g = double($++e);    /* $g´Â $e°¡ Áõ°¡µÈ ÈÄÀÇ °ªÀÎ 7À» µÎ¹èÇѰªÀ» °¡Áø´Ù. 2*7 = 14 */
$h = $g += 10;        /* $g´Â 14¿¡ 10À» ´õÇØ 24ÀÇ °ªÀ» °¡Áø ÈÄ ±× °ªÀ» $h¿¡ ´ëÀÔÇÑ´Ù. µÑ´Ù 24 */

±×·¯³ª, ÇϳªÀÇ Ç¥Çö½ÄÀÌ ÇϳªÀÇ ¹®ÀåÀº ¾Æ´Ï´Ù. Ç¥Çö½ÄÀÌ ¼¼¹ÌÄÝ·Ð ';'À¸·Î ³¡³ª¾ß ÇϳªÀÇ ¹®ÀåÀÌ µÇ´Â °ÍÀÌ´Ù. Áï '$b=$a=5;'¿¡¼­ $a=5´Â Ç¥Çö½ÄÀÌÁö¸¸ ¹®ÀåÀº ¾Æ´Ï´Ù.

PHP¿¡¼­ Âü/°ÅÁþÀÇ ÆÇ´ÜÀº Perl°ú ºñ½ÁÇÏ´Ù. 0ÀÌ ¾Æ´Ñ ¼ýÀÚ´Â ¸ðµÎ TRUEÀ̰í, 0Àº FALSEÀÌ´Ù. ºó ¹®ÀÚ¿­À̳ª ¹®ÀÚ¿­ "0"Àº FALSEÀÌ´Ù. ´Ù¸¥ ¸ðµç ¹®ÀÚ¿­Àº TRUEÀÌ´Ù. ¹è¿­À̳ª °´Ã¼´Â ¿ø¼Ò°¡ Çϳªµµ ¾ø´Ù¸é FALSE¸¦ ÀǹÌÇϰí, ³ª¸ÓÁöÀÇ °æ¿ì´Â TRUEÀÌ´Ù.

¾ÕÀ¸·Î ÀÌ ¸Å´º¾ó¿¡¼­ 'expr'À̶ó°í ¾²¿©Áø ºÎºÐÀº PHPÀÇ ¿Ã¹Ù¸¥ Ç¥Çö½ÄÀ̶ó´Â ÀǹÌÀÌ´Ù.


Chapter 10. ¿¬»êÀÚ (Operators)


»ê¼ú ¿¬»êÀÚ (Arithmetic Operators)

Çб³¿¡¼­ ¹è¿î »ê¼ú ¿¬»ê(°¡°¨½ÂÁ¦)À» ±â¾ïÇϴ°¡? ÀÌ »ê¼ú ¿¬»êÀÚ´Â ±×°Íµéó·³ µ¿ÀÛÇÑ´Ù.

Table 10-1. Arithmetic Operators

¿¹

À̸§

°á°ú

$a + $b

µ¡¼À(Addition)

$a¿Í $bÀÇ ÇÕ.

$a - $b

»¬¼À(Subtraction)

$a¿¡¼­ $b¸¦ »« °ª.

$a * $b

°ö¼À(Multiplication)

$a¿Í $bÀÇ °ö.

$a / $b

³ª´°¼À(Division)

$a¿¡¼­ $b¸¦ ³ª´« °ª(Ȥ Àº ¸ò).

$a % $b

³ª¸ÓÁö(Modulus)

$a¿¡¼­ $b¸¦ ³ª´« ³ª¸ÓÁö.


¹®ÀÚ¿­ ¿¬»êÀÚ (String Operators)

¹®ÀÚ¿­ ¿¬»êÀÚ´Â µü ÇÑ °³¸¸ ÀÖ´Ù. µÎ ¹®ÀÚ¿­À» ¿¬°áÇÏ´Â concatenation ¿¬»êÀÚ (".") ¸¸ÀÌ ÀÖ´Ù.

$a = "Hello ";
$b = $a . "World!"; // now $b = "Hello World!"


´ëÀÔ ¿¬»êÀÚ (Assignment Operators)

±âº» ´ëÀÔ ¿¬»êÀÚ´Â "="ÀÌ´Ù. ÀÌ ¿¬»êÀÚ¸¦ óÀ½ º¸¾ÒÀ» ¶§´Â "°°´Ù"¶ó´Â ¿¬»êÀÚ·Î »ý°¢Çϱ⠽±Áö¸¸ ÀüÇô ¾Æ´Ï´Ù. À̰ÍÀÇ Àǹ̴ ¿À¸¥ÂÊÀÇ Ç¥Çö½ÄÀ» °è»êÇÏ¿© ±× °ªÀ» ¿ÞÂÊ¿¡ ÀÖ´Â ÇÇ¿¬»êÀÚÀÇ °ªÀ¸·Î ¼³Á¤ÇÑ´Ù´Â ÀǹÌÀÌ´Ù. (À̰ÍÀ» "gets set to"¶ó°í ÇÑ´Ù.)

´ëÀÔ ¿¬»êÀÚÀÇ °ªÀº ¿ÞÂÊÀ¸·Î ´ëÀÔµÈ °ªÀÌ´Ù. Áï, "$a = 3"ÀÇ °ªÀº 3ÀÌ µÈ´Ù. À̰ÍÀº ¿©·¯ºÐ¿¡°Ô ¾à°£ÀÇ Æ®¸¯ÀÌ °¡´ÉÇϵµ·ÏÇÑ´Ù.

$a = ($b = 4) + 5; // $a´Â 9, $b´Â 4ÀÇ °ªÀ» °¡Áø´Ù.

±âº»ÀûÀÎ ´ëÀÔ ¿¬»êÀÚ ¿Ü¿¡ ¸ðµç Bit ´ÜÀ§ ¿¬»êÀÚ, »ê¼ú ¿¬»êÀÚ¿Í °áÇÕÇÑ º¹ÇÕ ´ëÀÔ ¿¬»êÀÚµµ ÀÖ´Ù. °áÇÕµÈ ¿¬»êÀڴ ǥÇö½Ä¿¡¼­ ÇØ´ç ¿¬»êÀ¸·Î »ç¿ëµÇ°í, ±× ¿¬»ê °ªÀ» ¿ÞÂÊ¿¡ ÀÖ´Â ÇÇ¿¬»êÀÚ¿¡ ´ëÀÔÇÑ´Ù. ¿¹¸¦ µé¾î :

$a = 3;
$a += 5; // $a´Â 8ÀÌ´Ù. $a = $a + 5; ¿Í µ¿ÀÏÇÏ´Ù.
$b = "Hello ";
$b .= "There!"; // $b´Â "Hello There!"°¡ µÈ´Ù. $b = $b . "There!";¿Í °°´Ù.


Bit ´ÜÀ§ ¿¬»êÀÚ (Bitwise Operators)

ºñÆ® ´ÜÀ§ ¿¬»êÀÚ´Â Á¤¼öÀÇ °³º° ºñÆ®ÀÇ °ªÀ» on, off ÇÒ ¼ö ÀÖ´Ù.

Table 10-2. Bitwise Operators

example

name

result

$a & $b

And

$a¿Í $b°¡ ¸ðµÎ 1ÀÎ ºñÆ®¸¸ 1ÀÌ µÈ´Ù.

$a | $b

Or

$a¿Í $bÁß Çϳª¶óµµ 1ÀÎ ºñÆ®´Â 1ÀÌ µÈ´Ù.

$a ^ $b

Xor

$a¿Í $bÁß Çϳª´Â 1À̰í, ´Ù¸¥ Çϳª´Â 0ÀÎ ºñÆ®¸¸ 1À̵ǰí, ³ª¸ÓÁö´Â 0ÀÌ µÈ´Ù.

~ $a

Not

$a¿¡¼­ 1ÀÎ ºñÆ®´Â 0À¸·Î, 0ÀÎ ºñÆ®´Â 1·Î µÈ´Ù.

$a << $b

Shift left

$aÀÇ ºñÆ®µéÀ» $b step ¸¸Å­ ¿ÞÂÊÀ¸·Î shift ÇÑ´Ù. (ÇÑ stepÀº 2¸¦ ÇÑ ¹ø °öÇÏ´Â ¸¸Å­ÀÇ È¿°ú°¡ ÀÖ´Ù.)

$a >> $b

Shift right

$aÀÇ ºñÆ®µéÀ» $b step ¸¸Å­ ¿À¸¥À¸·Î shift ÇÑ´Ù. (ÇÑ stepÀº 2¸¦ ÇÑ ¹ø ³ª´©´Â ¸¸Å­ÀÇ È¿°ú°¡ ÀÖ´Ù.)


Logical Operators

Table 10-3. Logical Operators

example

name

result

$a and $b

And

$a¿Í $b°¡ ¸ðµÎ true À̸é true

$a or $b

Or

$a¿Í $bÁß Çϳª¶óµµ trueÀ̸é true

$a xor $b

Xor

$a¿Í $bÁß Çϳª¸¸ trueÀ̾î¾ß true

! $a

Not

$a°¡ true°¡ ¾Æ´Ï¸é true

$a && $b

And

$a¿Í $b°¡ ¸ðµÎ true À̸é true

$a || $b

Or

$a¿Í $bÁß Çϳª¶óµµ trueÀ̸é true

"and"¿Í "or" ¿¬»êÀÚ°¡ µÎ°¡ÁöÀÇ ´Ù¸¥ ÇüŸ¦ °¡Áö°í ÀÖ´Â ÀÌÀ¯´Â ÀÌ ¿¬»êÀÚµéÀÌ ¼­·Î ´Ù¸¥ ¿ì¼±¼øÀ§¸¦ °¡Áö°í Àֱ⠶§¹®ÀÌ´Ù. (¾Æ·¡¸¦ º¸¶ó.)


ºñ±³ ¿¬»êÀÚ (Comparison Operators)

ºñ±³ ¿¬»êÀÚ´Â À̸§¿¡¼­ ¾Ë ¼ö ÀÖµíÀÌ µÎ °³ÀÇ °ªÀ» ºñ±³ÇÏ´Â ¿¬»êÀÚÀÌ´Ù.

Table 10-4. Comparson Operators

example

name

result

$a == $b

Equal

$a¿Í $b°¡ °°À¸¸é true.

$a != $b

Not equal

$a¿Í $b°¡ ´Ù¸£¸é true.

$a < $b

Less than

$a°¡ $bº¸´Ù ÀÛÀ¸¸é true.

$a > $b

Greater than

$a°¡ $bº¸´Ù Å©¸é true.

$a <= $b

Less than or equal to

$a°¡ $bº¸´Ù À۰ųª °°À¸¸é true.

$a >= $b

Greater than or equal to

$a°¡ $bº¸´Ù Å©°Å³ª °°À¸¸é true.

¶Ç´Ù¸¥ Á¶°Ç ¿¬»êÀÚ·Î C³ª ´Ù¸¥ ¾ð¾î¿¡ ÀÖ´Â "?:" ¿¬»êÀÚ°¡ ÀÖ´Ù.

(expr1) ? (expr2) : (expr3);

ÀÌ Ç¥Çö½ÄÀº expr1ÀÇ °á°ú°¡  Âü¿©¸é expr2¸¦ ¹ÝȯÇϰí, °ÅÁþÀ̸é expr3¸¦ ¹ÝȯÇÑ´Ù.


¿¬»êÀÚ ¿ì¼± ¼øÀ§ (Precedence)

¿¬»êÀÚµéÀÇ ¿ì¼±¼øÀ§´Â µÎ °³ÀÇ Ç¥Çö½ÄÁß ¾î´À°ÍÀÌ ´õ ´Ü´ÜÈ÷ ¹­¿© Àִ°¡¸¦ ¸í±âÇÑ´Ù. ¿¹¸¦µé¾î 1 + 5 * 3Àº 16À» ¹ÝȯÇÏÁö 18À» ¹ÝȯÇÏÁö ¾Ê´Â´Ù. ¿Ö³ÄÇÏ¸é °öÇϱâ("*")¿¬»êÀÚ°¡ ´õÇϱâ("+")¿¬»êÀÚº¸´Ù ¿ì¼±¼øÀ§°¡ ³ô±â ¶§¹®ÀÌ´Ù.

´ÙÀ½ Ç¥´Â ¿¬»êÀÚÀÇ ¿ì¼±¼øÀ§¸¦ ³ªÅ¸³½´Ù °¡Àå À§¿¡ ÀÖ´Â ¿¬»êÀÚÀÇ ¿ì¼±¼øÀ§°¡ °¡Àå ³·´Ù.

Table 10-5. Operator Precedence

Associativity

Operators

left

,

left

or

left

xor

left

and

right

print

left

= += -= *= /= .= %= &= != ~= <<= >>=

left

? :

left

||

left

&&

left

|

left

^

left

&

non-associative

== !=

non-associative

< <= > >=

left

<< >>

left

+ - .

left

* / %

right

! ~ ++ -- (int) (double) (string) (array) (object) @

right

[

non-associative

new


Chapter 11. Á¦¾î ±¸Á¶ (Control Structures)

¸ðµç PHP ½ºÅ©¸³Æ®´Â ÀÏ·ÃÀÇ ±¸¹®À¸·Î ÀÌ·ç¾î Áø´Ù. ÇϳªÀÇ ±¸¹®Àº ´ëÀÔ¹®ÀÌ µÉ ¼öµµ ÀÖ°í, ÇÔ¼ö È£Ãâ, ¹Ýº¹¹®, Á¶°Ç¹®ÀÌ µÉ ¼öµµ ÀÖÀ¸¸ç ½ÉÁö¾î´Â ¾Æ¹« ³»¿ëÀÌ ¾ø´Â ºó ¹®ÀåÀÏ ¼öµµ ÀÖ´Ù. ÇÑ ±¸¹®Àº ÀϹÝÀûÀ¸·Î ¼¼¹ÌÄÝ·Ð(;)À¸·Î ³¡³­´Ù. ¶ÇÇÑ ¿©·¯°³ÀÇ ±¸¹®À» Áß°ýÈ£({,})¸¦ »ç¿ëÇÏ¿© ÇϳªÀÇ ±×·ìÀ¸·Î ¸¸µé¾î »ç¿ëÇÒ ¼öµµ ÀÖ´Ù. ÀÌ ±¸¹®-±×·ìÀº ±× ±×·ìÀÇ ¸ðµç ±¸¹®µéÀÌ ÇϳªÀÇ ±¸¹®ÀÎ °Íó·³ ÀνĵȴÙ. ¿©±â¼­´Â ¿©·¯ °¡Áö ±¸¹®ÇüÅ¿¡ ´ëÇØ ¾Ë¾Æº»´Ù.


if

PHPÀÇ IF¹®Àº C¿Í ºñ½ÁÇÏ´Ù.

if (expr)
  statement

exprÀ» Æò°¡ÇÏ¿© TRUEÀ̸é statement¸¦ ½ÇÇàÇÑ´Ù. FALSEÀÌ¸é ¹«½ÃÇÑ´Ù.

´ÙÀ½ ¿¹Á¦´Â $a°¡ $bº¸´Ù Å©¸é "a is bigger than b"¸¦ Ãâ·ÂÇÑ´Ù.

if ($a > $b)
  print "a is bigger than b";

¿©·¯ ¹®ÀåÀ» ½ÇÇà½ÃŰ·Á¸é Áß°ýÈ£( { } )¸¦ »ç¿ëÇÏ¿© º¹¹®À¸·Î ¸¸µé¸éµÈ´Ù. :

if ($a>$b) {
  print "a is bigger than b";
  $b = $a;
}


else

ELSE´Â IF¹®ÀÇ Æò°¡½ÄÀÌ FALSEÀÏ °æ¿ì ½ÇÇàÇÏ´Â ¹®ÀåÀ» ÁöÁ¤ÇÑ´Ù. :

if ($a>$b) {
    print "a is bigger than b";
} else {
    print "a is NOT bigger than b";
}


elseif

ELSEIF´Â ELSE¿Í IF¸¦ ÇÕÃijõÀº °Í°ú °°´Ù. :

if ($a > $b) {
    print "a is bigger than b";
} elseif ($a == $b) {
    print "a is equal to b";
} else {
    print "a is smaller than b";
}

ÇÑ IF¹®¿¡´Â ¿©·¯°³ÀÇ ELSEIF¹®ÀÌ ÀÖÀ» ¼ö ÀÖ´Ù. ELSEIF¹®Àº ¼ø¼­´ë·Î Æò°¡ÇÏ¿© TRUEÀÎ °÷À» ½ÇÇàÇÑ´Ù. Áï, ¾î¶² ELSEIF¹®ÀÌ ½ÇÇà µÇ·Á¸é IF¹®ÀÇ Æò°¡½Ä°ú ±× ¾ÕÀÇ ¸ðµç ELSEIF¹®ÀÇ Æò°¡½ÄÀÌ FALSEÀ̾î¾ß ÇÑ´Ù. À̰ÍÀº 'else if'¶ó°í µÎ °³ÀÇ ¹®ÀåÀ¸·Î ½áµµ µÈ´Ù(¹®¹ýÀûÀÎ Àǹ̴ ¾à°£ ´Ù¸£Áö¸¸).


ifÀÇ ´Ù¸¥ Ç¥Çö (Alternative syntax for IF statements): if(): ... endif;

PHP 3´Â Áß°ýÈ£({ })¸¦ ¾²´Â ´ë½Å IF(expr)µÚ¿¡ ÄÝ·Ð( : )À» Âï°í, Çϳª ÀÌ»óÀÇ ¹®ÀåÀ» ³ª¿­ÇÑ ÈÄ¿¡ ENDIF;·Î ³¡³»´Â ¹æ¹ýÀ» Á¦°øÇÑ´Ù. ÀÌ ¹æ¹ýÀº ƯÈ÷ IF¹® ¾È¿¡ HTML ºí·°À» »ðÀÔÇϴµ¥ À¯¿ëÇÏ°Ô »ç¿ëµÉ ¼ö ÀÖ´Ù. ´ÙÀ½ ¿¹¸¦ º¸ÀÚ. :

<?php if ($a==5): ?>
A = 5
<?php endif; ?>

À§ÀÇ ¿¹¿¡¼­ "A = 5"¶ó´Â HTML ºí·ÏÀÌ IF¹® ¾È¿¡ »ç¿ëµÇ°í ÀÖ´Ù. À§ÀÇ HTML ºí·ÏÀº $a°¡ 5ÀÏ °æ¿ì¿¡¸¸ Ç¥½ÃµÈ´Ù.

´ÙÀ½°ú °°ÀÌ ELSE¿Í ELSEIF (expr)µµ »ç¿ëÇÒ ¼ö ÀÖ´Ù. :

if ($a==5):
    print "a equals to 5";
    print "...";
elseif ($a==6):
    print "a equals to 6";
    print "!!!";
else
    print "a is not 5 nor 6";
endif;


while

WHILE ·çÇÁ´Â PHP 3ÀÇ °¡Àå °£´ÜÇÑ ÇüÅÂÀÌ´Ù. À̰ÍÀº C¿Í µ¿ÀÏÇÏ°Ô ÀÛµ¿ÇÑ´Ù. ±âº» ÇüÅ´ ´ÙÀ½°ú °°´Ù. :

    WHILE(expr) statement

IF¹®°ú ¸¶Âù°¡Áö·Î ´ÙÀ½°ú °°Àº ¹®Àå ÇüÅ·ΠÁß°ýÈ£( { } )¸¦ »ç¿ëÇÏÁö ¾Ê´Â ¹æ¹ýµµ ÀÖ´Ù. :.

    WHILE(expr): statement ... ENDWHILE;

´ÙÀ½µÎ°³ÀÇ ¿¹Á¦´Â µ¿ÀÏÇÑ ¿¹Á¦ÀÌ´Ù. 1ºÎÅÍ 10±îÁö Ãâ·ÂÇÑ´Ù.:

/* example 1 */
$i=1;
while ($i<=10) {
    print $i++;  /* the printed value would be $i before the increment (post-increment) */
}
/* example 2 */
$i=1;
while ($i<=10):
    print $i;
    $i++;
endwhile;


do..while

DO..WHILE ·çÇÁ´Â ºñ±³½ÄÀÌ ¾ÕÀÌ ¾Æ´Ñ ¸Ç µÚ¿¡ ÀÖ´Ù´Â Á¡À» Á¦¿ÜÇϸé WHILE ·çÇÁ¿Í ºñ½ÁÇÏ´Ù. µû¶ó¼­ WHILE Á¶°ÇÀýÀº DO ¹®ÀåÀÌ ½ÇÇàµÈ ÈÄ¿¡ Æò°¡µÇ¹Ç·Î, DO ÀÌÈÄÀÇ ¹®ÀåÀº ¹«Á¶°Ç ÇѹøÀº ½ÇÇàµÈ´Ù.

´ÙÀ½°ú °°Àº DO..WHILE ·çÇÁ¿¡¼­µµ ÇѹøÀº Ãâ·ÂÀÌ µÈ´Ù. :

$i = 0;
do {
    print $i;
} while ($i>0);


for

FOR´Â PHPÀÇ °¡Àå º¹ÀâÇÑ ·çÇÁÀÌ´Ù. À̰ÍÀº C¿Í À¯»çÇÏ´Ù. FOR ·çÇÁÀÇ ÇüÅ´ ´ÙÀ½°ú °°´Ù. :

    FOR (expr1; expr2; expr3) statement

ù ¹øÂ° Ç¥Çö½Ä(expr1)Àº ·çÇÁ¸¦ ½ÃÀÛÇÒ ¶§ ¹«Á¶°Ç Çѹø Æò°¡(½ÇÇà)µÈ´Ù.

¸Å ¹Ýº¹ÀÇ ½ÃÀÛ ¶§¸¶´Ù expr2°¡ Æò°¡µÈ´Ù. ¸¸¾à À̰ÍÀÌ TRUE¸é ·çÇÁ´Â °è¼ÓµÇ°í statement°¡ ½ÇÇàµÈ´Ù. expr2°¡ FALSEÀÌ¸é ·çÇÁ´Â Á¾·áµÈ´Ù.

¸Å ¹Ýº¹ÀÌ ³¡³¯ ¶§ expr3°¡ Æò°¡(½ÇÇà)µÈ´Ù.

°¢ Æò°¡½ÄÀº ºñ¿öµÑ ¼ö ÀÖ´Ù.expr2°¡ ºñ¾îÀÖÀ¸¸é ¹«ÇÑ ·çÇÁ¸¦ ¶æÇÑ´Ù. (PHP´Â C¿Í °°ÀÌ ºñ¾îÀÖÀ¸¸é TRUE·Î ÀνÄÇÑ´Ù.) ÀÌ°Ç º°·Î ÁÁÀº ¹æ¹ýÀÌ ¾Æ´ÏÁö¸¸, Á¾Á¾ BREAK¸¦ »ç¿ëÇÏ¿© Á¾·áÇÏ´Â ¹æ¹ýµµ ÀÖ´Ù.

´ÙÀ½ ¿¹´Â 1¿¡¼­ 10±îÁö Ãâ·ÂÇÏ´Â ¿¹ÀÌ´Ù. :

/* example 1 */
for ($i=1; $i<=10; $i++) {
    print $i;
}
/* example 2 */
for ($i = 1;;$i++) {
    if ($i > 10) {
        break;
    }
    print $i;
}
/* example 3 */
$i = 1;
for (;;) {
    if ($i > 10) {
        break;
    }
    print $i;
    $i++;
}
/* example 4 */
for ($i=1; $i<=10; print $i, $i++) ;

¹°·Ð óÀ½°ÍÀÌ °¡Àå ÁÁ¾Æº¸ÀδÙ. ±×·¯³ª ³ª¸ÓÁöµµ °¡´ÉÇÏ´Ù´Â °ÍÀ» ¾Ë¾Æ¾ß ÇÑ´Ù.

PHP´Â FOR ·çÇÁ¿¡ ´ëÇØ¼­µµ ´ÙÀ½°ú °°Àº "colon syntax"¸¦ Áö¿øÇÑ´Ù.

    FOR (expr1; expr2; expr3): statement; ...; endfor;

ÀϺΠ´Ù¸¥ ¾ð¾îµéÀº ¹è¿­À» Ž»öÇϱâ À§ÇÏ¿© foreach ¹®ÀåÀ» Á¦°øÇϱ⵵ ÇÑ´Ù. ±×·¯³ª PHP´Â À̸¦ À§ÇØ list()¿Í each() ÇÔ¼ö¸¦ »ç¿ëÇÏ¿© while ·çÇÁ·Î ÇØ°áÇÑ´Ù. ÀÌ ÇÔ¼öµé¿¡ ´ëÇØ¼­´Â ¿¹Á¦¸¦ ÂüÁ¶ÇÏÀÚ.


break

break´Â ÇöÀç ·çÇÁ¿¡¼­ ºüÁ® ³ª°¡´Â ¸í·ÉÀÌ´Ù.

$i = 0;
while ($i < 10) {
    if ($arr[$i] == "stop") {
        break;
    }
    $i++;
}


continue

CONTINUE ´Â ÇöÀç ·çÇÁÀÇ Ã³À½À¸·Î °¡µµ·Ï ÇÏ´Â ¸í·ÉÀÌ´Ù.

while (list($key,$value) = each($arr)) {
    if ($key % 2) { // skip even members
        continue;
    }
    do_something_odd($value);
}


switch

SWITCH¹®Àº µ¿ÀÏÇÑ Ç¥Çö½ÄÀÇ IF¹®ÀÇ ³ª¿­°ú ºñ½ÁÇÏ´Ù. ´ÙÀ½ ¿¹´Â µ¿ÀÏÇÑ °ÍÀº IF¹®°ú SWITCH¹®À¸·Î Ç¥ÇöÇÑ °ÍÀÌ´Ù. :

/* example 1 */
if ($i == 0) {
    print "i equals 0";
}
if ($i == 1) {
    print "i equals 1";
}
if ($i == 2) {
    print "i equals 2";
}
 
/* example 2 */
switch ($i) {
    case 0:
        print "i equals 0";
        break;
    case 1:
        print "i equals 1";
        break;
    case 2:
        print "i equals 2";
        break;
}

SWITCH¹®Àº ¹®Àå ´ÜÀ§·Î ½ÇÇàµÈ´Ù. SWITCH¿¡ ÀÖ´Â Æò°¡½Ä°ú ÀÏÄ¡ÇÏ´Â CASE¹®À» ã¾Æ ±× ÀÌÈÄ SWITCHºí·°ÀÌ ³¡³¯ ¶§ ±îÁö ½ÇÇàÇÑ´Ù. µû¶ó¼­ ¿øÇÏ´Â °æ¿ì BREAK·Î ½ÇÇàÀ» ÁßÁö½Ãų Çʿ䰡 ÀÖ´Ù. ´ÙÀ½ ¿¹¸¦ º¸ÀÚ. :

/* example 3 */
switch ($i) {
  case 0:
    print "i equals 0";
  case 1:
    print "i equals 1";
  case 2:
    print "i equals 2";
}

¿©±â¼­ $i°¡ 0ÀÌ¸é ¸ðµç print¹®À» ½ÇÇàÇÒ °ÍÀÌ´Ù. ¸¸¾à $i°¡ 1ÀÌ¸é ¸¶Áö¸· µÎ°³ÀÇ print¹®À» ½ÇÇàÇÑ´Ù. µû¶ó¼­ ¿©·¯ºÐÀÌ ¿øÇÏ´Â °á°ú¸¦ ¾òÀ¸·Á¸é BREAK¹®À» ÀØÁö ¾Ê´Â °ÍÀÌ Áß¿äÇÑ´Ù.

Ưº°ÇÑ case·Î default case°¡ ÀÖ´Ù. ÀÌ °ÍÀº ´Ù¸¥ ¾î¶² case¿¡µµ ¸ÂÁö ¾Ê´Â °æ¿ì¸¦ ÀǹÌÇÑ´Ù. ¿¹¸¦ µé¾î :

/* example 4 */
switch ($i) {
    case 0:
        print "i equals 0";
        break;
    case 1:
        print "i equals 1";
        break;
    case 2:
        print "i equals 2";
        break;
    default:
        print "i is not equal to 0, 1 or 2";
}

´Ù¸¥ Áß¿äÇÑ Á¡Àº CASE Ç¥Çö½Ä¿¡´Â Á¤¼ö, ½Ç¼ö, ¹®ÀÚ¿­ÀÇ ½ºÄ®¸® ŸÀÔÀ¸·Î Æò°¡µÇ´Â ¾î¶² Ç¥Çö½ÄÀ̿͵µ µÈ´Ù´Â °ÍÀÌ´Ù. ¹è¿­À̳ª °´Ã¼µµ ¹®Á¦¸¦ ÀÏÀ¸Å°Áö´Â ¾Ê´Â´Ù. ±×·¯³ª ±×°ÍÀº ¹®Àå¿¡¼­ Àǹ̰¡ ¾ø´Ù.


require

REQUIRE¹®Àº C preprocessorÀÇ #include¿Í ºñ½ÁÇϰÔ, ÀÚ½ÅÀ» ÁöÁ¤µÈ ÆÄÀÏ·Î ´ëüÇÑ´Ù.

À̰ÍÀº require()¹®À» ·çÇÁ ±¸Á¶ ¾È¿¡ µÎ¾î, ¸Å¹ø ´Ù¸¥ ÆÄÀÏÀ» ÀоîµéÀÏ ¼ö ¾ø´Ù´Â °ÍÀ» ÀǹÌÇÑ´Ù. ÀÌ·± µ¿ÀÛÀ» À§Çؼ­´Â INCLUDE ¹®À» »ç¿ëÇ϶ó.

require('header.inc');


include

INCLUDE¹®Àº ÁöÁ¤ÇÑ ÆÄÀÏÀ» ÀÐ°í ½ÇÇàÇÑ´Ù.

ÀÌ µ¿ÀÛÀº ½ÇÇàÁß INCLUDE ¹®À» ¸¸³¯ ¶§ ¸¸´Ù ÀϾ´Ù. µû¶ó¼­ ¿©·¯ºÐÀº INCLUDE¹®À» ·çÇÁ ±¸Á¶ ¾È¿¡ µÎ¾î ¸Å¹ø ´Ù¸¥ ÆÄÀÏÀ» ÀÐ¾î µéÀ̵µ·Ï ÇÒ ¼ö ÀÖ´Ù.

$files = array('first.inc', 'second.inc', 'third.inc');
for ($i = 0; $i < count($files); $i++) {
  include($files[$i]);
}

include()´Â ÀÌ ¹®ÀåÀ» ¸¸³¯ ¶§ ¸¶´Ù ¸Å¹ø ÀçÆò°¡µÇ¾î Àç½ÇÇàµÈ´Ù´Â Á¡¿¡¼­ require()¿Í ´Ù¸£´Ù. ¹Ý¸é¿¡ require()¹®Àº ÁöÁ¤µÈ ÆÄÀÏÀÇ ³»¿ëÀÌ ½ÇÇàµÇ´Â°¡¿¡ °ü°è¾øÀÌ(¿¹¸¦µé¾î if ¹® ¾È¿¡ µé¾îÀÖ°í »óŰ¡ °ÅÁþÀÎ °æ¿ì¿¡µµ), ÀÌ ¹®ÀåÀ» óÀ½ ¸¸³¯À» ¶§ ÁöÁ¤µÈ ÆÄÀÏ·Î ´ëüµÈ´Ù.

include()´Â Ưº°ÇÑ ±¸Á¶À̹ǷÎ, ¸¸¾à À̰ÍÀÌ Á¶ÀüÀý ¾È¿¡ ³õ¿©ÀÖ´Ù¸é ¹Ýµå½Ã {}(statement block )À¸·Î µÑ·¯½Î¾ß ÇÑ´Ù.

/* This is WRONG and will not work as desired. */
if ($condition)
    include($file);
else
    include($other);
/* This is CORRECT. */
if ($condition) {
    include($file);
} else {
    include($other);
}

ÁöÁ¤µÈ ÆÄÀÏÀÌ Æò°¡µÉ ¶§, ÆÄ¼­´Â "HTML-mode"¿¡¼­ ½ÃÀÛÇÑ´Ù. µû¶ó¼­ PHP ¹®ÀåÀº PHP ½ÃÀÛ ÅÃ(<?)À» ÁÖ°í ½ÃÀÛÇÏ¿©¾ß ÇÑ´Ù.

See also readfile(), require(), virtual().


Chapter 12. Functions

User-defined functions

ÇÔ¼ö´Â ´ÙÀ½°ú °°ÀÌ Á¤ÀÇÇÑ´Ù. :

function foo( $arg_1, $arg_2, ..., $arg_n ) {
   echo "Example function.\n";
   return $retval;
}
     

ÇÔ¼ö ¾È¿¡´Â ´Ù¸¥ ÇÔ¼ö³ª classÀÇ ¼±¾ð µîÀ» Æ÷ÇÔÇÑ ¸ðµç °¡´ÉÇÑ PHP Äڵ尡 »ç¿ëµÉ ¼ö ÀÖ´Ù.

ÇÔ¼ö´Â ±× ÇÔ¼ö°¡ »ç¿ëµÇ±â ÀÌÀü¿¡ ¼±¾ðµÇ¾î ÀÖ¾î¾ß ÇÑ´Ù.


Returning values

ÇÔ¼ö´Â return ¹®À» ÅëÇØ ÇÔ¼ö°ªÀ» µ¹·ÁÁÙ ¼ö ÀÖ´Ù. list¿Í object¸¦ Æ÷ÇÔÇÑ ¾î¶² typeµµ µ¹·ÁÁú ¼ö ÀÖ´Ù.

function my_sqrt( $num ) {
   return $num * $num;
}
echo my_sqrt( 4 );   // outputs '16'.  

¿©·¯°ªÀ» µ¹·ÁÁÖ´Â ÀÏÀº ÇÒ ¼ö ¾ø´Ù. ±×·¯³ª list¸¦ µ¹·ÁÁÜÀ¸·Î½á ºñ½ÁÇÑ ÀÏÀ» ÇÒ ¼ö ÀÖ´Ù. :

function foo() {
   return array( 0, 1, 2 );
}
list( $zero, $one, $two ) = foo();  


Function arguments

argument list¸¦ ÅëÇØ ÇÔ¼ö¿¡ ¾î¶² Á¤º¸¸¦ ³Ñ°ÜÁÙ ¼ö ÀÖ´Ù. ÀÌ argument list´Â ½°Ç¥(,)·Î ³ªÀ§¾îÁø º¯¼ö³ª »ó¼öÀÇ listÀÌ´Ù.

PHP´Â passing by value(±âº»ÀûÀ¸·Î À̰ÍÀ» »ç¿ë)¿Í passing by reference, default argument valuesÀÇ 3°¡Áö ¹æ¹ýÀ» Á¦°øÇÑ´Ù. °¡º¯ ±æÀÌ(Variable-length) argument list´Â Á¦°øµÇÁö ¾Ê´Â´Ù. ±×·¯³ª ¹è¿­À» ÅëÇØ Àü´ÞÇÑ´Ù¸é ºñ½ÁÇÑ È¿°ú¸¦ ³¾ ¼ö ÀÖ´Ù.

function takes_array($input) {
echo "$input[0] + $input[1] = ", $input[0]+$input[1];
}


Making arguments be passed by reference

±âº»ÀûÀ¸·Î ÇÔ¼öÀÇ Àμö(argument)µéÀº °ªÀ¸·Î Àü´ÞµÈ´Ù(passed by value). ÇÔ¼ö³»¿¡¼­ º¯È­½ÃŲ °ªÀ» ±×´ë·Î À¯ÁöÇÏ·Á¸é pass by reference·Î Àμö¸¦ ³Ñ°Ü¾ß ÇÑ´Ù.

¿©·¯ºÐÀÌ ¾î¶² ÇÔ¼öÀÇ Àμö¸¦ Ç×»ó pass by reference·Î ³Ñ±â·Á ÇÑ´Ù¸é, ¿©·¯ºÐÀº ÇÔ¼ö¸¦ ¼±¾ðÇÒ ¶§ ampersand(&)¸¦ ÀμöÀÇ ¾Õ¿¡ ºÙ¿©ÁÖ¸é µÈ´Ù. :

function foo( &$bar ) {
   $bar .= ' and something extra.';
}
$str = 'This is a string, ';
foo2( $str );
echo $str;    // outputs 'This is a string, and something extra.'   

¸¸¾à ±âº»Àº by value ·Î ÇÏÁö¸¸ Çʿ信 µû¶ó by reference·Î È£ÃâÇÏ°í ½Í´Ù¸é ÇÔ¼ö È£Ã⠽ÿ¡ ÀμöÀÇ ¾Õ¿¡ &¸¦ ºÙÀÌ¸é µÈ´Ù. :

function foo( $bar ) {
   $bar .= ' and something extra.';
}
$str = 'This is a string, ';
foo2( $str );
echo $str;    // outputs 'This is a string, '
foo2( &$str );
echo $str;    // outputs 'This is a string, and something extra.'   


Default argument values

½ºÄ®¶ó Àμö´Â ´ÙÀ½°ú °°ÀÌ C++ °ú ºñ½ÁÇÏ°Ô ±âº»°ªÀ» Á¤ÇØÁÙ ¼ö ÀÖ´Ù. :

function makecoffee( $type = "cappucino" ) {
   echo "Making a cup of $type.\n";
}
echo makecoffee();
echo makecoffee( "espresso" );     

À§ÀÇ ´ÜÆíÀÇ ½ÇÇà °á°ú´Â ´ÙÀ½°ú °°´Ù :

Making a cup of cappucino.
Making a cup of espresso.
      

default °ªÀº ¹Ýµå½Ã »ó¼öÀ̾î¾ß ÇÑ´Ù. (¿¹¸¦µé¾î) º¯¼ö³ª classÀÇ ¸â¹ö¸¦ »ç¿ëÇØ¼­´Â ¾ÈµÈ´Ù.

PHP 4.0¿¡¼­´Â default argument·Î unsetÀ» ÁöÁ¤ÇÒ ¼ö ÀÖ´Ù. À̰ÍÀº ÇØ´ç argument¿¡ °ªÀÌ Á¦°øµÇÁö ¾ÊÀ¸¸é, Àý´ë·Î °ªÀ» ¼³Á¤ÇÏÁö ¾Ê´Â °ÍÀ» ÀǹÌÇÑ´Ù.

default argument¸¦ »ç¿ëÇÒ ¶§, default°¡ µÇ´Â ÀμöµéÀº non-defaultÀÎ Àμöµéº¸´Ù ¿À¸¥ÂÊ¿¡ À§Ä¡ÇØ¾ß ÇÑ´Ù. ±×·¸Áö ¾ÊÀ¸¸é ¿øÇÏ´Â °á°ú°¡ ³ª¿ÀÁö ¾Ê´Â´Ù. ´ÙÀ½À» º¸ÀÚ. :

function makeyogurt( $type = "acidophilus", $flavour ) {
   return "Making a bowl of $type $flavour.\n";
}
echo makeyogurt( "raspberry" );   // won't work as expected     

À§ ÄÚµåÀÇ ½ÇÇà °á°ú´Â ´ÙÀ½°ú °°´Ù :

Warning: Missing argument 2 in call to makeyogurt() in /usr/local/etc/httpd/htdocs/php3test/functest.html on line 41
Making a bowl of raspberry . 

±×·¯¸é ÀÌÁ¦ À§ÀÇ °Í°ú ¾Æ·¡°ÍÀ» ºñ±³ÇØ º¸ÀÚ. :

function makeyogurt( $flavour, $type = "acidophilus" ) {
   return "Making a bowl of $type $flavour.\n";
}
echo makeyogurt( "raspberry" );   // works as expected    

ÀÌ ¿¹Á¦ÀÇ ½ÇÇà °á°ú´Â ´ÙÀ½°ú °°´Ù. :

Making a bowl of acidophilus raspberry.  


old_function

OLD_FUNCTION ¹®ÀåÀº PHP/FI2¿¡¼­ µ¿ÀÏÇÑ ÇÔ¼ö »ç¿ë¹ýÀ» Á¦°øÇÑ´Ù. (function´ë½Å old_functionÀ» »ç¿ëÇÑ´Ù´Â Á¡Àº Á¦¿ÜÇϰí)

À̰ÍÀ» »ç¿ëÇÏ´Â °ÍÀº ÁÁÁö ¾ÊÀº ¹æ¹ýÀÌ´Ù. À̰ÍÀÌ »ç¿ëµÉ ¶§´Â PHP/FI2->PHP3 º¯È¯±â¿¡¼­ »ÓÀÌ´Ù.

ÁÖÀÇ

OLD_FUNCTIONÀ¸·Î Á¤ÀÇµÈ ÇÔ¼öµéÀº PHPÀÇ ³»ºÎ Äڵ忡¼­ È£ÃâµÉ ¼ö ¾ø´Ù. ÀÌ ¸»Àº usort()³ª array_walk(), register_shutdown_function()°°Àº ÇÔ¼ö¿¡ »ç¿ëÇÒ ¼ö ¾ø´Ù´Â ÀǹÌÀÌ´Ù. À̸¦ ÇØ°áÇϱâ À§Çؼ­´Â ÀÌ OLD_FUNCTIONÀ¸·Î ¼±¾ðµÈ ÇÔ¼ö¸¦ È£ÃâÇÏ´Â PHP3 ÇüÅÂÀÇ ÇÔ¼ö¸¦ ¸¸µé¾î »ç¿ëÇÏ´Â °ÍÀÌ´Ù.


Chapter 13. Classes and Objects

( ¿ªÀÚÁÖ : Class ¹®ÀåÀº JavaÀÇ subsetÀ̶ó ÇÒ¸¸Å­ µ¿ÀÏÇÏ´Ù. )

class

Ŭ·¡½º´Â ÀÏ·ÃÀÇ º¯¼ö¿Í ÀÌ º¯¼öµéÀ» »ç¿ëÇÏ´Â ÇÔ¼öµéÀÇ ¸ðÀ½ÀÌ´Ù. Ŭ·¡½º´Â ´ÙÀ½°ú °°Àº ÇüÅ·Π¼±¾ðµÈ´Ù.

<?php
class Cart {
  var $items;  // Items in our shopping cart
  
  // Add $num articles of $artnr to the cart
  function add_item($artnr, $num) {
    $this->items[$artnr] += $num;
  }
  
  // Take $num articles of $artnr out of the cart
  function remove_item($artnr, $num) {
    if ($this->items[$artnr] > $num) {
      $this->items[$artnr] -= $num;
      return true;
    } else {
      return false;
    }
  }   
}
?>

ÀÌ ¼±¾ðÀº Cart¶ó´Â À̸§ÀÇ Å¬·¡½º·Î, īƮ¾È¿¡ µé¾îÀÖ´Â ¹°Ç°À» À§ÇÑ ÇÑ °³ÀÇ ¹è¿­ º¯¼ö¿Í cart¿¡ ¹°°ÇÀ» ³Ö°Å³ª »©´Â µÎ °³ÀÇ ÇÔ¼ö·Î ±¸¼ºµÇ¾î ÀÖ´Ù.

Classe´Â TypeÀ¸·Î, ½ÇÁ¦ º¯¼öµéÀÇ Ã»»çÁøÀ̶ó ÇÒ ¼ö ÀÖ´Ù. ¿©·¯ºÐÀº new ¿¬»êÀÚ¸¦ »ç¿ëÇÏ¿© ¿øÇÏ´Â typeÀÇ º¯¼ö¸¦ »ý¼ºÇÏ¿©¾ß ÇÑ´Ù.

$cart = new Cart;
$cart->add_item("10", 1);

À§¿¡ ÀÖ´Â ¿¹´Â Cart Ŭ·¡½ºÀÇ $cart¶ó´Â object¸¦ ¸¸µå´Â °ÍÀÌ´Ù. ÀÌ objectÀÇ add_item() ÇÔ¼ö¸¦ È£ÃâÇÏ¿© ¹°Ç° ¹øÈ£ "10"¹øÀÇ ¹°Ç° 1°³¸¦ īƮ¿¡ ³Ö´Â´Ù.

Ŭ·¡½º´Â ´Ù¸¥ Ŭ·¡½º·Î È®Àå µÉ ¼ö ÀÖ´Ù. È®Àå ȤÀº ÆÄ»ýµÈ(extended or derived) Ŭ·¡½º´Â base °¡ µÇ´Â Ŭ·¡½ºÀÇ ¸ðµç º¯¼öµé°ú ÇÔ¼öµéÀ» ±×´ë·Î °¡Á¦°Ô µÇ°í, ¿©·¯ºÐÀº ¿©±â¿¡ Ãß°¡·Î È®ÀåµÈ ¼±¾ðÀ» ÇÒ ¼ö ÀÖ´Ù. À̸¦ À§ÇØ "extends"¶ó´Â Ű¿öµå°¡ »ç¿ëµÈ´Ù.

class Named_Cart extends Cart {
  var $owner;
 
  function set_owner($name) {
    $this->owner = $name;
  }
}

À§ÀÇ ¿¹´Â Cart Ŭ·¡½ºÀÇ º¯¼ö¿Í ÇÔ¼ö¿¡ $owner º¯¼ö¿Í set_owner() ÇÔ¼ö¸¦ Ãß°¡ÇÑ Named_Cart¶ó´Â Ŭ·¡½ºÀÇ ¼±¾ðÀÌ´Ù. ¿©·¯ºÐÀº À̸§ºÙÀº īƮ(named cart)¸¦ »ç¿ëÇÏ¿© īƮÀÇ ÁÖÀÎÀ» ¼³Á¤Çϰí ã¾Æº¼ ¼ö ÀÖ´Ù. ¶ÇÇÑ ±âÁ¸ÀÇ ÀÏ¹Ý Ä«Æ®(normal cart)¿¡ ÀÖ´ø ÇÔ¼öµµ »ç¿ëÇÒ ¼ö ÀÖ´Ù.

$ncart = new Named_Cart;   // Create a named cart
$ncart->set_owner("kris"); // Name that cart
print $ncart->owner;       // print the cart owners name
$ncart->add_item("10", 1); // (inherited functionality from cart)

Ŭ·¡½º ³»ºÎ¿¡ ÀÖ´Â ÇÔ¼ö¿¡¼­ $this ¶ó´Â º¯¼ö´Â ÀÚ±â ÀڽŠobject¸¦ ÀǹÌÇÑ´Ù. ¿©·¯ºÐÀº $this->something ÀÇ ÇüÅ·ΠÇöÀç objectÀÇ º¯¼ö³ª ÇÔ¼ö¸¦ »ç¿ëÇÏ¿©¾ß ÇÑ´Ù.

»ý¼ºÀÚ(Constructor)´Â ÇØ´ç Ŭ·¡½ºÀÇ »õ ÀνºÅϽº(»õ·Î ¸¸µç º¯¼ö¶ó°í »ý°¢ÇØ µÎÀÚ)¸¦ ¸¸µé ¶§ ÀÚµ¿ÀûÀ¸·Î ½ÇÇàµÇ´Â ÇÔ¼ö¸¦ ÀǹÌÇÑ´Ù. Ŭ·¡½ºÀÇ À̸§°ú °°Àº À̸§ÀÇ ÇÔ¼ö°¡ »ý¼ºÀÚ°¡ µÈ´Ù.

class Auto_Cart extends Cart {
    function Auto_Cart() {
        $this->add_item("10", 1);
    }
}

À§ÀÇ ¿¹´Â Cart Ŭ·¡½º¿¡ ¹°Ç°¹øÈ£ 10¹øÀÇ ¹°Ç°À» ÇÑ °³ ÀÚµ¿À¸·Î Ãß°¡ÇÏ´Â »ý¼ºÀÚ¸¦ Ãß°¡ÇÑ Auto_Cart¶ó´Â Ŭ·¡½ºÀÇ ¼±¾ðÀÌ´Ù. Auto_Cart´Â "new"·Î »ý¼ºµÈ´Ù. »ý¼ºÀÚ´Â ¶ÇÇÑ Àμö(argument)¸¦ °¡Áú ¼ö ÀÖ°í, ÀÌ ÀμöµéÀº default°ªÀ» °¡Áø ¿É¼ÇÀ¸·Î ¼±¾ð ÇÒ ¼ö ÀÖ´Ù. ÀÌ ±â´ÉÀº ¸Å¿ì À¯¿ëÇÏ°Ô »ç¿ëµÈ´Ù.

class Constructor_Cart {
    function Constructor_Cart($item = "10", $num = 1) {
        $this->add_item($item, $num);
    }
}
 
// Shop the same old boring stuff.
 
$default_cart   = new Constructor_Cart;
 
// Shop for real...
 
$different_cart = new Constructor_Cart("20", 17);
 

Caution

ÆÄ»ýµÈ(derived) Ŭ·¡½ºÀÇ °æ¿ì, ÀÌ Å¬·¡½ºÀÇ »ý¼ºÀÚ°¡ È£ÃâµÉ ¶§ ºÎ¸ð Ŭ·¡½ºÀÇ »ý¼ºÀÚ´Â ÀÚµ¿À¸·Î È£ÃâµÇÁö ¾Ê´Â´Ù.

 


III. ±â´É (Features)

Table of Contents
14. Error handling
15. Creating GIF images
16. HTTP authentication with PHP
17. Cookies
18. Handling file uploads
19. Using remote files
20. Connection handling
21. Persistent database connections


Chapter 14. Error handling

PHP¿¡´Â ´ÙÀ½°ú °°Àº 4°¡ÁöÀÇ ¿¡·¯¿Í °æ°í ÇüŰ¡ ÀÖ´Ù.

error reporting levelÀº À§ÀÇ 4°³ÀÇ ¼ýÀÚ°¡ ´õÇØÁ®¼­ °áÁ¤µÈ´Ù. ±âº» error reporting level Àº 7·Î 1+2+4°¡ µÇ°í, ÀÌ´Â Notice¸¦ Á¦¿ÜÇÑ ¸ðµç °ÍÀ» ·¹Æ÷Æ®Ç϶ó´Â ÀǹÌÀÌ´Ù. ÀÌ ·¹º§Àº php3.ini ÆÄÀÏ¿¡¼­ error_reporting Áö½ÃÀÚ·Î °áÁ¤ÇÒ ¼ö ÀÖ´Ù. ȤÀº, ¾ÆÆÄÄ¡ÀÇ httpd.conf ÆÄÀÏ¿¡¼­ php3_error_reporting Áö½ÃÀÚ·Î °áÁ¤Çϰųª, ½ºÅ©¸³Æ® ½ÇÇà Áß¿¡ error_reporting() ÇÔ¼ö¸¦ »ç¿ëÇÏ¿© ¹Ù²ãÁÙ ¼öµµ ÀÖ´Ù.

¸ðµç PHP Ç¥Çö½Ä(expression)Àº "@"¸¦ ¾Õ¿¡ ºÙÀ̰í È£ÃâµÇ¸é error reportingÀ» ÇÏÁö ¾Ê´Â´Ù. ¸¸¾à track_errors ±â´ÉÀÌ Enabled·Î µÇ¾î Àִµ¥ ÇØ´ç ¹®Àå¿¡¼­ ¿¡·¯°¡ ¹ß»ýÇß´Ù¸é, $php_errormsg¶ó´Â Àü¿ªº¯¼ö¿¡¼­ ¿¡·¯ ¸Þ½ÃÁö¸¦ ãÀ» ¼ö ÀÖÀ» °ÍÀÌ´Ù.


Chapter 15. PHP¿¡¼­ GIFÀÇ »ý¼º (Creating GIF images)

PHP´Â ´ÜÁö HTMLÃâ·ÂÀ» ¸¸µå´Â °Í¸¸ ÇÒ ¼ö ÀÖ´Â °ÍÀÌ ¾Æ´Ï´Ù. PHP´Â GIF image fileµµ ¸¸µé ¼ö ÀÖÀ» ÀÖÀ» »Ó¾Æ´Ï¶ó, »ç¿ëÇϱ⿡ Æí¸®ÇÑ GIF image stream±îÁö ¸¸µé ¼ö ÀÖ´Ù. À̸¦ À§Çؼ­ ¿©·¯ºÐÀº PHP¸¦ ÄÄÆÄÀÏ ÇÒ ¶§, image ÇÔ¼ö¸¦ °¡Áö°í ÀÖ´Â GD ¶óÀ̺귯¸®¸¦ Æ÷ÇÔÇÏ¿©¾ß ÇÑ´Ù.

Example 15-1. GIF creation with PHP

<?php
    Header("Content-type: image/gif");
    $string=implode($argv," ");
    $im = imagecreatefromgif("images/button1.gif");
    $orange = ImageColorAllocate($im, 220, 210, 60);
    px = (imagesx($im)-7.5*strlen($string))/2;
    ImageString($im,3,$px,9,$string,$orange);
    ImageGif($im);
    ImageDestroy($im);
?>

À§ÀÇ ¿¹Á¦´Â <img src="button.php3?text">¿Í °°Àº tagÀÌ ÀÖ´Â ÆäÀÌÁö·ÎºÎÅÍ ºÒ·ÁÁö°Ô µÉ °ÍÀÌ´Ù. ±×·¯¸é À§¿¡ÀÖ´Â button.php ½ºÅ©¸³Æ®´Â "text"¶ó´Â ¹®ÀÚ¿­À» "images/button1.gif"¿¡ ¿À¹ö·¹ÀÌ ½ÃÄÑ °á°ú image¿¡ Ãâ·ÂÇÑ´Ù. ÀÌ·¸°Ô ÇÏ¸é ¹öư¿¡ µé¾î°¡´Â ±Û¾¾¸¦ ¸Å¹ø ¼Õ½±°Ô ¹Ù²ã ¾µ ¼ö ÀÖ°í, ¶ÇÇÑ ¸Å¹ø À̹ÌÁö ÆÄÀÏÀ» ¸¸µé Çʿ䰡 ¾ø¾î È¿À²ÀûÀÌ°í °£´ÜÇÏ´Ù.


Chapter 16. HTTP ÀÎÁõ (HTTP authentication with PHP)

(¿ªÀÚÁÖ. HTTP authenticationÀ̶õ Web Client¿¡°Ô ID¿Í Password¸¦ ÀԷ¹޾Æ, ±× ID¿Í Password·Î Web¹®¼­¿¡ Á¢±ÙÀ» Çã°¡, ºÒÇãÇÏ´Â ±â´ÉÀ» ¸»ÇÑ´Ù. ÀÚ¼¼È÷ ¾Ë°í ½Í´Ù¸é RFC1945ÀÇ Authentication ºÎºÐÀ» Âü°íÇϱ⠹ٶõ´Ù. http://pec.etri.re.kr/!qkim/HTTP/¿¡ ÇÑ±Û ¹ø¿ª ¹®¼­µµ ÀÖÀ¸´Ï ÂüÁ¶ÇÏÀÚ.)

PHP¸¦ »ç¿ëÇÑ HTTP ÀÎÁõÀº Apache ¸ðµâ·Î »ç¿ëµÉ ¶§¸¸ µ¿ÀÛÇÑ´Ù. Apache ¸ðµâÀÇ PHP ½ºÅ©¸³Æ®¿¡¼­ Header()¶ó´Â ÇÔ¼ö¸¦ »ç¿ëÇϸé Client ºê¶ó¿ìÀú¿¡°Ô Username°ú Password¸¦ ÀԷ¹޴ À©µµ¿ì¸¦ ¶ç¿ìµµ·Ï ÇÏ´Â "ÀÎÁõ ¿ä±¸"("Authentication Required") ¸Þ½ÃÁö¸¦ º¸³»°Ô µÈ´Ù. ÀÏ´Ü »ç¿ëÀÚ°¡ Username°ú Password¸¦ ÀÔ·ÂÇϸé, user name, password, authentication typeÀÇ °ªÀ» °¡Áö´Â $PHP_AUTH_USER, $PHP_AUTH_PW, $PHP_AUTH_TYPEÀÇ 3°³ÀÇ º¯¼ö¸¦ °¡Áö°í ÇØ´ç URL(PHP ½ºÅ©¸³Æ®¸¦ Æ÷ÇÔÇÑ)ÀÌ ´Ù½Ã ºÒ¸®¿öÁø´Ù. ÇöÀç authentication typeÀº "Basic"¸¸ÀÌ Áö¿øµÈ´Ù.

client authenticationÀ» »ç¿ëÇÏ¿© ±× ÀÔ·ÂµÈ °ªÀ» Ãâ·ÂÇÏ´Â ¿¹Á¦°¡ ¾Æ·¡¿¡ ÀÖ´Ù. :

Example 16-1. HTTP Authentication example

<?php
  if(!$PHP_AUTH_USER) {
    Header("WWW-authenticate: basic realm=\"My Realm\"");
    Header("HTTP/1.0 401 Unauthorized");
    echo "Text to send if user hits Cancel button\n"
    exit;
  } else {
    echo "Hello $PHP_AUTH_USER.<P>";
    echo "You entered $PHP_AUTH_PW as your password.<P>";
  }
?>

¿©·¯ºÐÀº $PHP_AUTH_USER ¿Í $PHP_AUTH_PW¸¦ ´Ü¼øÈ÷ Ãâ·ÂÇÏ´Â ´ë½Å, »ç¿ëÀÚÀÇ ½Äº°À» À§ÇØ username°ú password¸¦ »ç¿ëÇϱ⸦ ¿øÇÒ °ÍÀÌ´Ù. À̶§´Â Database¿¡ QueryÇϰųª Á÷Á¢ dbm ÆÄÀÏ¿¡¼­ ã¾Æº¸¸é °¡´ÉÇÒ °ÍÀÌ´Ù.

Internet Explorer browser¿¡¼­´Â ¹ö±×·Î ÀÎÇØ HeaderÀÇ ¼ø¼­°¡ ¸Å¿ì ±î´Ù·Ó´Ù. WWW-authenticate header¸¦ HTTP/1.0 401 headerº¸´Ù ¸ÕÀú º¸³»´Â °ÍÀÌ ÇöÀç °¡´ÉÇÑ ¿ä·ÉÀ¸·Î º¸ÀδÙ.

ºñ¹Ð¹øÈ£ÀÇ À¯ÃâÀ» ¿ì·ÁÇÏ¿© HTTP¿¡¼­ Á¦°øÇÏ´Â ÀÎÁõÀ» »ç¿ëÇÏ´Â ´ë½Å ±âÁ¸ÀÇ ¿ÜºÎ ¸ÞÄ«´ÏÁòÀ» »ç¿ëÇÒ °æ¿ì¿¡´Â ¹°·Ð PHP_AUTH º¯¼ö´Â ¼³Á¤µÇÁö ¾Ê´Â´Ù.

À¯ÀÇÇÒ Á¡Àº ÀÎÁõÀÌ ÇÊ¿äÇÑ ÆäÀÌÁö¿Í ÀÎÁõÀÌ ÇÊ¿ä¾ø´Â ÆäÀÌÁö°¡ °°Àº ¼­¹ö»ó¿¡ Á¸ÀçÇÒ ¶§, ÀÎÁõÀÌ ÇÊ¿ä¾ø´Â URLÀ» controlÇÒ ¼ö ÀÖ´Â ´©±º°¡°¡, ÀÎÁõÀÌ ÇÊ¿äÇÑ URLÀÇ ¾ÏÈ£¸¦ ÈÉÃ帴 °ÍÀº ¸·À» ¼ö ¾ø´Ù´Â Á¡ÀÌ´Ù.

Netscape¿Í Internet Explorer ¸ðµÎ 401ÀÀ´ä Äڵ带 ¼­¹ö¿¡¼­ ¹Þ°ÔµÇ¸é local browser windowÀÇ authentication cache¸¦ clearÇÑ´Ù. Áï, À̰ÍÀº "log out"°³³äÀÌ µÇ´Â °ÍÀ¸·Î, »ç¿ëÀÚµé·Î ÇÏ¿©±Ý username°ú ¾ÏÈ£¸¦ ´Ù½Ã ÀÔ·ÂÇÏ°Ô ÇÑ´Ù. ÀϺδ À̰ÍÀ» loginÀÇ "time out"À̳ª "log-out"¹öưÀ» ¸¸µå´Âµ¥ »ç¿ëÇÑ´Ù

Example 16-2. HTTP Authentication example forcing a new name/password

<?php
  function  authenticate()  {
    Header( "WWW-authenticate:  basic  realm='Test  Authentication  System'");
    Header( "HTTP/1.0  401  Unauthorized");
    echo  "You  must  enter  a  valid  login  ID  and  password  to  access  this  resource\n";
    exit;
  }
  if(!isset($PHP_AUTH_USER)  ||  ($SeenBefore ==  1  &&  !strcmp($OldAuth,  $PHP_AUTH_USER))  )  {
    authenticate();
  }  
  else  {
    echo  "Welcome:  $PHP_AUTH_USER<BR>";
    echo  "Old:  $OldAuth";
    echo  "<FORM  ACTION=\"$PHP_SELF\"  METHOD=POST>\n";
    echo  "<INPUT  TYPE=HIDDEN  NAME=\"SeenBefore\"  VALUE=\"1\">\n";
    echo  "<INPUT  TYPE=HIDDEN  NAME=\"OldAuth\"  VALUE=\"$PHP_AUTH_USER\">\n";
    echo  "<INPUT  TYPE=Submit  VALUE=\"Re  Authenticate\">\n";
    echo  "</FORM>\n";
}
?>

ÀÌ µ¿ÀÛÀº HTTP Basic authentication ±âÁØ¿¡ ¿ä±¸µÇ´Â °ÍÀº ¾Æ´Ï¹Ç·Î ¿©·¯ºÐÀº À̰Ϳ¡ ÀÇÁ¸ÇÏ¿©¼­´Â ¾ÈµÈ´Ù. Lynx¿¡¼­´Â 401 ¼­¹ö ÀÀ´äÀ» ¹Þ¾Æµµ authentication Á¤º¸¸¦ clearÇÏÁö ¾Ê´Â´Ù. µû¶ó¼­ BackÀ» ´©¸£°í ´Ù½Ã Forward ¹öưÀ» ´­·¯¼­ ´Ù½Ã Á¢±ÙÇÒ ¼ö ÀÖ´Ù.

¶ÇÇÑ ÀÌ Authentication ±â´ÉÀº Microsoft's IIS server¿¡¼­ CGI versionÀÇ PHP¸¦ »ç¿ëÇÒ °æ¿ì¿¡´Â IISÀÇ Á¦¾àÀ¸·ÎÀÎÇØ µ¿ÀÛÇÏÁö ¾Ê´Â´Ù.


Chapter 17. Cookies

PHP´Â HTTP Cookie¸¦ Åõ¸íÇϰÔ(transparently) Áö¿øÇÑ´Ù. Cookie ¸ÞÄ«´ÏÁòÀº Æ®·¡Å·À̳ª »ç¿ëÀÚ ½Äº° µîÀ» À§ÇØ ¿ø°Ý browser¿¡ ÀúÀåµÈ µ¥ÀÌÅ͸¦ µ¹·Á ¹Þ´Â °úÁ¤À» ¸»ÇÑ´Ù. ¿©·¯ºÐÀº cookie¸¦ ¼³Á¤Çϱâ À§ÇØ setcookie() ÇÔ¼ö¸¦ »ç¿ëÇÒ ¼ö ÀÖ´Ù. Cookie´Â HTTP Çì´õÀÇ ÇÑ ºÎºÐÀ̹ǷÎ, SetCookie() ÇÔ¼ö´Â ºê¶ó¿ìÀú·Î º¸³»´Â ¾î¶² µ¥ÀÌÅͺ¸´Ùµµ ¾Õ¿¡ »ç¿ëÇØ¾ß ÇÑ´Ù. ÀÌ Á¦¾àÀº Header() ÇÔ¼ö¿Í °°Àº Á¦¾àÀ¸·Î º¸¸é µÈ´Ù.

´ç½ÅÀÌ º¸³»ÁØ ¸ðµç cookie´Â ÀÚµ¿ÀûÀ¸·Î GETÀ̳ª POST ¹æ½Ä µ¥ÀÌÅÍ¿Í °°Àº PHP º¯¼ö·Î º¯È¯µÈ´Ù. ¸¸¾à ¿©·¯ºÐÀÌ µ¿ÀÏÇÑ cookie¿¡ ¿©·¯ °ªÀ» ÀúÀåÇÏ°í ½Í´Ù¸é CookieÀ̸§¿¡ []¸¦ ´õÇÏ¸é µÈ´Ù. ÀÚ¼¼ÇÑ °ÍÀº setcookie() ÇÔ¼ö ¼³¸íÀ» ÂüÁ¶ÇÏÀÚ.


Chapter 18. Handling file uploads


POST method uploads

PHP´Â RFC-1867À» Áö¿øÇÏ´Â ºê¶ó¿ìÀú·ÎºÎÅÍ ÆÄÀÏÀ» ¾÷·Îµå ¹ÞÀ» ¼ö ÀÖ´Â ±â´ÉÀÌ ÀÖ´Ù. ÀÌ ±â´ÉÀ» »ç¿ëÇϸé TextºÐ¾Æ´Ï¶ó BinaryÆÄÀϵµ ¾÷·Îµå°¡ °¡´ÉÇÏ´Ù. ¿©·¯ºÐÀº PHP's authetication°ú ³í¸®ÀûÀÎ ÇÔ¼öµéÀ» »ç¿ëÇÏ¿©, Upload°¡ °¡´ÉÇÑ »ç¿ëÀÚ¿Í, ÆÄÀÏÀÌ UploadµÈ ÈÄ¿¡ ÇØ¾ß ÇÒ ÀÏÀ» ¹Ýµå½Ã Á¤ÇØ µÎ¾î¾ß ÇÑ´Ù. (¿ªÀÚÁÖ. RFC-1867Àº Netscape 3.0ÀÌ»ó, Explorer 4.0À̻󿡼­ Áö¿øÇÑ´Ù. Netscape 2.x´ëÀÇ ÀϺΠ»óÀ§¹öÁ¯µµ Áö¿øÇϰí, Explorer 3.02´Â Patch°¡ ³ª¿Í ÀÖÀ¸¹Ç·Î patch½ÃŰ¸é °¡´ÉÇÏ´Ù.)

ÆÄÀÏ ¾÷·Îµå È­¸éÀº ´ÙÀ½°ú °°Àº Á» Ưº°ÇÑ ÆûÀ» ¸¸µé¾î ¶ç¿ï ¼ö ÀÖ´Ù. :

Example 18-1. File Upload Form

    <FORM ENCTYPE="multipart/form-data" ACTION="_URL_" METHOD=POST>
    <INPUT TYPE="hidden" name="MAX_FILE_SIZE" value="1000">
    Send this file: <INPUT NAME="userfile" TYPE="file">
    <INPUT TYPE="submit" VALUE="Send File">
    </FORM>

¿©±â¼­_URL_Àº PHP htmlÆÄÀÏÀ̾î¾ß ÇÕ´Ï´Ù. hidden ÇʵåÀÎ MAX_FILE_SIZE´Â File input Çʵåµéº¸´Ù ¼±ÇàµÇ¾î¾ß ÇÕ´Ï´Ù. ÀÌ °ªÀº PHP htmlÀÌ ¹Þ¾ÆµéÀÌ´Â ÃÖ´ë ÆÄÀÏ Å©±â¸¦ Byte´ÜÀ§·Î ³ªÅ¸³À´Ï´Ù. ¾÷·Îµå°¡ ¼º°øÀûÀ¸·Î µÇ¸é ÁöÁ¤µÈ ÆÄÀÏ¿¡´Â ´ÙÀ½°ú °°Àº º¯¼öµéÀÌ Á¤ÀǵǾî Áø´Ù. :

À§ º¯¼öÀÇ "$userfile"ºÎºÐÀº upload form¿¡¼­ TYPE=filedÀ» °¡Áø INPUT ÇʵåÀÇ À̸§ÀÌ µÈ´Ù. À§ÀÇ ¿¹Á¦¿¡¼­ ¿ì¸®´Â ±× À̸§Àº "userfile"À̶ó°í Á¤Çß´Ù.

FileÀº ±âº»ÀûÀ¸·Î ¿ì¼± ¼­¹öÀÇ default temporary directory¿¡ ÀúÀåµÈ´Ù. ÀÌ µðÆúÆ® µð·ºÅ丮´Â PHP°¡ µ¹¾Æ°¡´Â ÄÄÇ»ÅÍÀÇ È¯°æº¯¼ö "TMPDIR"À» ¼³Á¤ÇÏ¿© º¯°æÇÒ ¼ö ÀÖ´Ù. À̸¦ PHP ½ºÅ©¸³Æ® ¾È¿¡¼­ PutEnv() ÇÔ¼ö¸¦ »ç¿ëÇÏ¿© º¯°æÇÏ´Â °ÍÀº µ¿ÀÛÇÏÁö ¾Ê´Â´Ù.

¾÷·ÎµåµÈ ÆÄÀÏÀ» ´Ù·ç´Â PHP ½ºÅ©¸³Æ®´Â ÇØ´ç ÆÄÀÏÀ» °¡Áö°í ÇÏ´Â ÀÛ¾÷À» ¼³Á¤ÇØ ÁÙ Çʿ䰡 ÀÖ´Ù. ¿¹¸¦µé¾î, ¿©·¯ºÐÀº $file_sizeº¯¼ö¸¦ »ç¿ëÇÏ¿© ³Ê¹« À۰ųª Å« ÆÄÀÏÀ» ¹ö¸± ¼öµµ ÀÖ´Ù. ¶ÇÇÑ ¿©·¯ºÐÀº $file_typeº¯¼ö¸¦ °¡Áö°í ƯÁ¤ÇÑ Å¸ÀÔ¿¡ ¸ÂÁö ¾Ê´Â ÆÄÀÏÀ» ¹ö¸± ¼ö ÀÖ´Ù. ¾î¶² ·ÎÁ÷ÀÌ´ø, ¿©·¯ºÐÀº Àӽà µð·ºÅ丮¿¡ ÀÖ´Â ÆÄÀÏÀ» Áö¿ì°Å³ª ³ªÁß¿¡ ÇÊ¿äÇÒ °æ¿ì¿¡´Â ´Ù¸¥ °÷¿¡ À̵¿½ÃÄÑ¾ß ÇÑ´Ù.

¸¸¾à Àӽà µð·ºÅ丮¿¡ ÀÖ´Â ÆÄÀÏÀ» ÇØ´ç request°¡ ³¡³¯ ¶§ ±îÁöµµ Áö¿ì°Å³ª À̵¿½ÃŰÁö ¾Ê¾Ò´Ù¸é, ÀÌ ÆÄÀÏÀº ÇØ´ç request°¡ Á¾·áµÇ´Â ½ÃÁ¡¿¡¼­ ÀÚµ¿À¸·Î Áö¿öÁø´Ù.


ÀϹÝÀûÀÎ ÁÖÀÇ»çÇ× (Common Pitfalls)

MAX_FILE_SIZE ¾ÆÀÌÅÛÀÇ °ªÀº PHP3.ini¿¡ ¼³Á¤µÈ upload_max_filesizeÀÇ °ªÀ̳ª Apache .conf¿¡ ¼³Á¤ÇÑ php3_upload_max_filesizeÀÇ °ªº¸´Ù Å©°Ô ¼³Á¤ÇÒ ¼ö ¾ø´Ù. ±âº»°ªÀº 2¸Þ°¡ ¹ÙÀÌÆ®ÀÌ´Ù.

CERN httpd ¼­¹ö´Â client·ÎºÎÅÍ ÀԷ¹ÞÀº mime headerÀÇ ¾ÕÂÊ ¿©¹éÀ» ¸ðµÎ strip off ½ÃÄѹö¸®¹Ç·Î, CERN httpd ¼­¹ö¿¡¼­´Â File Upload ±â´ÉÀÌ µ¿ÀÛÇÏÁö ¾Ê´Â´Ù.


¿©·¯ ÆÄÀÏÀ» UploadÇϱâ (Uploading multiple files)

Çѹø¿¡ ¿©·¯°³ÀÇ ÆÄÀÏÀ» µ¿½Ã¿¡ Àü¼ÛÇÏ´Â °Íµµ °¡´ÉÇÏ´Ù. À̶§ PHP´Â ÀÌ ÆÄÀϵ鿡 ´ëÇÑ Á¤º¸¸¦ ¹è¿­·Î Àü´ÞÇÑ´Ù. µû¶ó¼­ ÀÌ·± °æ¿ì¿¡´Â ¿©·¯°³¸¦ ¼±ÅÃÇÏ´Â select³ª checkbox ¶§Ã³·³ HTMLÀÇ formÀÇ ¾ÆÀÌÅÛ¿¡ µ¿ÀÏÇÑ array¸íÀ» Àû¾îÁÖ¾î¾ß ÇÑ´Ù.

Note: ¿©·¯ ÆÄÀÏ Àü¼Û ±â´ÉÀº 3.0.10ºÎÅÍ Ãß°¡µÈ ±â´ÉÀÌ´Ù.

Example 18-2. Uploading multiple forms

<form action="file-upload.html" method="post" enctype="multipart/form-data">
  Send these files:<br>
  <input name="userfile[]" type="file"><br>
  <input name="userfile[]" type="file"><br>
  <input type="submit" value="Send files">
</form>
     

À§ÀÇ ÆûÀÌ Àü¼ÛµÉ ¶§ $userfile, $userfile_name, $userfile_sizeÀÇ ¹è¿­ÀÌ Àü¿ª º¯¼ö·Î ¸¸µé¾îÁø´Ù. ($HTTP_POST_VARS¿¡µµ ¸¸µé¾îÁø´Ù.) ÀÌ ¹è¿­µéÀº Àü¼ÛµÈ ÆÄÀÏÀÇ Á¤º¸¸¦ °¡Áö°í ÀÖ°í, °¢ ¹è¿­µéÀº ¹øÈ£·Î À妽ºµÇ¾î ÀÖ´Ù.

¿¹¸¦ µé¾î, À§ÀÇ ¿¹¿¡¼­ /home/test/review.html °ú /home/test/xwp.out ÀÇ µÎ °³ÀÇ ÆÄÀÏÀ» Àü¼ÛÇß´Ù¸é $userfile_name[0]¿¡´Â review.htmlÀ̶ó´Â °ªÀÌ, $userfile_name[1]¿¡´Â xwp.outÀ̶ó´Â °ªÀÌ ÀúÀåµÇ°Ô µÈ´Ù. µ¿½Ã¿¡, $userfile_size[0] ¿¡´Â review.htmlÀÇ ÆÄÀÏ Å©±â°¡ ÀúÀåµÇ´Â ½ÄÀÌ µÈ´Ù.


PUT Method Support

PHP´Â Netscape Composer³ª W3C Amaya°°Àº Ŭ¸®ÀÌ¾ðÆ®¿¡ ´ëÇØ HTTP PUT ¹æ½Ä(method)À» Áö¿øÇÑ´Ù. PUT ¿ä±¸(request)´Â file uploadº¸´Ù ÈξÀ ½±´Ù. ´ÜÁö ´ÙÀ½°ú °°ÀÌ ÇÏ¸é µÈ´Ù. :

PUT /path/filename.html HTTP/1.1

À̰ÍÀº º¸Åë ¿ø°Ý Ŭ¶óÀÌ¾ðÆ®°¡ º¸³½ ³»¿ëÀ» À¥ Æ®¸® ¹ØÀÇ /path/filename.html·Î ÀúÀåÇ϶ó´Â ÀǹÌÀÌ´Ù. ±×·±µ¥ ¿©·¯ºÐÀÇ À¥ Æ®¸®¹Ø¿¡ ÀÖ´Â ÆÄÀϵéÀ» ¾Æ¹«³ª µ¤¾î ¾µ ¼ö ÀÖ´Ù´Â °ÍÀº Apache³ª PHP¿¡ À־ È®½ÇÈ÷ ÁÁÁö ¾ÊÀº »ý°¢ÀÌ´Ù. µû¶ó¼­ ÀÌ¿Í °°Àº ¿ä±¸¸¦ ´Ù·ç±â Àü¿¡, ¿ì¼± À¥ ¼­¹ö¿¡°Ô ÀÌ·± ¿ä±¸¸¦ ´Ù·ç´Â PHP ½ºÅ©¸³Æ®¸¦ ¹Ì¸® ÁöÁ¤ÇØ ÁÖ¾î¾ß ÇÑ´Ù. ¾ÆÆÄÄ¡¿¡¼­´Â Script Áö½ÃÀÚ·Î ±× ³»¿ëÀ» ÁöÁ¤ÇÑ´Ù. ÀÌ Áö½ÃÀÚ´Â Apache ¼³Á¤ ÆÄÀÏÁßÀÇ ¾î´À À§Ä¡¿¡ À־ ±¦ÂúÀ¸³ª, º¸Åë <Directory> ºí·Ï ¾ÈÀ̳ª <Virtualhost> ºí·Ï ¾È¿¡ À§Ä¡ÇÏ´Â °ÍÀÌ ÀϹÝÀûÀÌ´Ù. º¸Åë ´ÙÀ½°ú °°ÀÌ ¾²¿©Áø´Ù. :

Script PUT /put.php3

À̰ÍÀº ÀÌ ¶óÀÎÀ» À§Ä¡½ÃŲ ºí·ÏÀÇ URI¿¡ ÇØ´çµÇ´Â ¸ðµç PUT ¿ä±¸¸¦ put.php3 ½ºÅ©¸³Æ®¿¡°Ô Àü´ÞÇ϶ó°í Apache¿¡°Ô ¾Ë·Á ÁØ´Ù. ¹°·Ð ÀÌ °æ¿ì .php3 È®ÀåÀÚ¿¡ ´ëÇÏ¿© PHP¼³Á¤ÀÌ ¿Ï·áµÇ¾î ÀÖ°í, PHP°¡ ÀÛµ¿ÁßÀ̾î¾ß ÇÑ´Ù.

put.php3 ÆÄÀϳ»¿¡¼­´Â º¸Åë ´ÙÀ½°ú °°ÀÌ »ç¿ëÇÒ ¼ö ÀÖ´Ù. :

<? copy($PHP_UPLOADED_FILE_NAME,$DOCUMENT_ROOT.$REQUEST_URI); ?>

À§ÀÇ ¸í·ÉÀº ÇØ´ç ÆÄÀÏÀ» ¿ø°Ý Ŭ¶óÀÌ¾ðÆ®°¡ ¿äûÇÑ À§Ä¡¿¡ º¹»çÇÏ´Â °ÍÀÌ´Ù. ¾Æ¸¶ ¿©·¯ºÐÀº º¹»çÇϱâ Àü¿¡ »ç¿ëÀÚ¸¦ È®ÀÎÇϰųª ÆÄÀÏÀ» °Ë»çÇÏ´Â µîÀÇ ±â´ÉÀ» ¿øÇÒ °ÍÀÌ´Ù. ¿©±â¼­ ¾Ë ¼ö ÀÖ´Â °ÍÀº PHP°¡ PUT-methodÀÇ ¿ä±¸¸¦ ¹Þ¾ÒÀ» ¶§ POST-method±â´É°ú ¸¶Âù°¡Áö·Î Àӽà ÆÄÀÏ¿¡ ÇØ´ç ³»¿ëÀ» ÀúÀåÇÑ´Ù´Â °ÍÀÌ´Ù. Áï, ¿ä±¸°¡ ³¡³ª°Ô µÇ¸é ÀÓ½ÃÆÄÀÏÀº Áö¿öÁø´Ù. µû¶ó¼­ PUTÀ» ´Ù·ç´Â PHP ½ºÅ©¸³Æ®´Â ÇØ´ç ÆÄÀÏÀ» ¾îµð ´Ù¸¥ °÷¿¡ º¹»çÇØ µÎ¾î¾ß ÇÑ´Ù. ÀÓ½ÃÆÄÀÏÀÇ À̸§Àº $PHP_PUT_FILENAME À̶ó´Â º¯¼ö¿¡ ÀúÀåµÇ°í, $REQUEST_URI º¯¼ö¿¡ Ŭ¶óÀÌ¾ðÆ®¿¡¼­ º¸³»¿Â ÀúÀåÇÒ ÆÄÀÏÀÇ °æ·Î¿Í À̸§ÀÌ ÀúÀåµÈ´Ù.(Apache°¡ ¾Æ´Ñ À¥¼­¹ö¿¡¼­´Â ¸ð¾çÀÌ Á¶±Ý ´Þ¶óÁø´Ù.) ¹°·Ð ¿©·¯ºÐÀº ÀÌ °æ·Î¸í°ú ÆÄÀϸíÀÌ ¾Æ´Ñ ÀüÇô ´Ù¸¥ À§Ä¡¿¡ ´Ù¸¥ ÆÄÀϸíÀ» »ç¿ëÇÒ ¼öµµ ÀÖ´Ù.


Chapter 19. Using remote files

¿©·¯ºÐÀÌ PHP¸¦ ¼³Á¤ÇÒ ¶§ "URL fopen wrapper"¸¦ enable·Î ¼³Á¤ÇÏ¿´´Ù¸é(ÀÌ ¼³Á¤Àº --disable-url-fopen-wrapper·Î ¸í½ÃÇÏÁö ¾ÊÀ¸¸é ¼³Á¤µÈ´Ù.), ¿©·¯ºÐÀº ´ëºÎºÐ ÇÔ¼öÀÇ ÆÄ¶ó¸ÞŸ·Î ÀÖ´Â ÆÄÀÏÀ̸§(filename)¿¡ HTTP³ª FTP URLÀ» »ç¿ëÇÒ ¼ö ÀÖ´Ù. ½ÉÁö¾î require()³ª include() ÇÔ¼ö¿¡µµ »ç¿ëÀÌ °¡´ÉÇÏ´Ù.

Note: ´Ü, Windowsȯ°æÀÇ include()¿Í require() ÇÔ¼ö¿¡¼­´Â »ç¿ëÇÒ ¼ö ¾ø´Ù.

¿¹¸¦ µé¾î, ¿©·¯ºÐÀº ÀÌ ±â´ÉÀ» »ç¿ëÇÏ¿© ¿ø°Ý À¥ ¼­¹ö°¡ Ãâ·ÂÇÏ´Â ³»¿ëÀ» ÆÄÀÏ·Î ¿­°í, ±× Ãâ·Â ³»¿ë¿¡¼­ ¿©·¯ºÐÀÌ ¿øÇÏ´Â µ¥ÀÌŸ¸¦ ºÐ¼®ÇÏ¿©, ÀÌ ¿øÇÏ´Â µ¥ÀÌŸ·Î µ¥ÀÌŸº£À̽º ÁúÀÇ¿¡ »ç¿ëÇϰųª, ¿©·¯ºÐÀÇ À¥ »çÀÌÆ®¿¡ ¸Â´Â ¸ð¾çÀ¸·Î º¯Çü ½ÃÄÑ Ãâ·ÂÇÒ ¼ö ÀÖ´Ù.

Example 19-1. Getting the title of a remote page

<?php
$file = fopen("http://www.php.net/", "r");
if (!$file) {
echo "<p>Unable to open remote file.\n";
exit;
}
while (!feof($file)) {
$line = fgets($file, 1024);
/* This only works if the title and its tags are on one line. */
if (eregi("<title>(.*)</title>", $line, $out)) {
$title = $out[1];
break;
}
}
fclose($file);
?>

 

¿©·¯ºÐÀº ÇØ´ç ¼­¹ö¿¡ ±ÇÇÑÀÌ ÀÖ´Â »ç¿ëÀÚ·Î Á¢¼ÓÇϰí, ÇØ´ç ÆÄÀÏÀÌ Á¸ÀçÇÏÁö ¾Ê´Â´Ù¸é, FTP¸¦ ÀÌ¿ëÇÑ ÆÄÀÏ·Î ¾µ ¼öµµ ÀÖ´Ù. 'anonymous'°¡ ¾Æ´Ñ »ç¿ëÀÚ·Î Á¢¼ÓÇÏ·Á¸é, URL³»¿¡ usernameÀ» (ÇÊ¿äÇÏ´Ù¸é passwordµµ) ´ÙÀ½°ú °°ÀÌ ¸í½ÃÇØ¾ß ÇÑ´Ù : 'ftp://user:password@ftp.example.com/path/to/file'. (¶ÇÇÑ HTTP¿¡¼­ Basic authenticationÀ» »ç¿ëÇÑ ÀÎÁõÀ» ¿ä±¸ÇÏ´Â °æ¿ì¿¡µµ ÀÌ¿Í °°Àº ¹®¹ýÀ» »ç¿ëÇÒ ¼ö ÀÖ´Ù.)

Example 19-2. Storing data on a remote server

<?php
$file = fopen("ftp://ftp.php.net/incoming/outputfile", "w");
if (!$file) {
echo "<p>Unable to open remote file for writing.\n";
exit;
}
/* Write the data here. */
fputs($file, "$HTTP_USER_AGENT\n");
fclose($file);
?>

Note: Y¿©·¯ºÐÀº À§ÀÇ ¿¹Á¦¸¦ º¸°í, ÀÌ Å×Å©´ÐÀ» »ç¿ëÇÏ¿© remote log¸¦ ÀÛ¼ºÇÒ ¼ö ÀÖ°Ú´Ù°í »ý°¢ÇÒ ¼öµµ ÀÖ´Ù. ±×·¯³ª À§¿¡ ¾ð±ÞÇÑ´ë·Î URL fopen() wrapper´Â »õ ÆÄÀÏ¿¡¸¸ ¾µ ¼ö ÀÖ´Ù. ¿©·¯ºÐÀÌ ¿øÇÏ´Â ´ë·Î ºÐ»êµÈ log¸¦ ÇÏ°í ½Í´Ù¸é syslog()ÀÇ ³»¿ëÀ» »ìÆìº¸¶ó.


Chapter 20. Connection handling

Note: ÀÌ ±â´ÉÀº PHP version 3.0.7 ÀÌÈĺÎÅÍ Àû¿ëµÈ °ÍµéÀÌ´Ù.

³»ºÎÀûÀ¸·Î PHP´Â ¿¬°áÀÇ »óŸ¦ ´ÙÀ½ 3°¡ÁöÁß Çϳª·Î ¼³Á¤ÇÑ´Ù. :

PHP ½ºÅ©¸³Æ®°¡ ÀϹÝÀûÀ¸·Î ½ÇÇàµÇ°í ÀÖÀ» ¶§´Â NORMAL »óŰ¡ activeµÈ´Ù. ¸¸¾à ¿ø°Ý Ŭ¶óÀÌ¾ðÆ®°¡ ¿¬°áÀ» ²÷°ÔµÇ¸é ABORTED »óÅ flag°¡ ÄÑÁö°Ô µÈ´Ù. º¸Åë Ŭ¶óÀÌ¾ðÆ®°¡ ¿¬°áÀ» ²÷´Â °ÍÀº »ç¿ëÀÚ°¡ STOP ¹öưÀ» ´­·¶À» ¶§ ÀϾ´Ù. ¸¸¾à PHP°¡ ¼³Á¤ÇÑ ½Ã°£ Á¦ÇÑ¿¡ (set_time_limit()À» º¸¶ó) °É¸®°Ô µÇ¸é TIMEOUT »óÅ flag°¡ ÄÑÁö°Ô µÈ´Ù.

¿©·¯ºÐÀº Ŭ¶óÀÌ¾ðÆ®°¡ ¿¬°áÀ» ²÷¾úÀ» ¶§ ½ºÅ©¸³Æ®°¡ ¼öÇàÀ» Áß´ÜÇÒ °ÍÀΰ¡ ¾Æ´Ñ°¡¸¦ °áÁ¤ÇÏ¿©¾ß ÇÑ´Ù. ¶§¶§·Î ¿ø°Ý ºê¶ó¿ìÀú°¡ ¾î¶² °á°úµµ ¹Þ¾ÆµéÀÌÁö ¾Ê´õ¶óµµ ½ºÅ©¸³Æ®¸¦ ³¡±îÁö ½ÇÇàÇÏ´Â °ÍÀÌ Æí¸®ÇÒ ¶§°¡ ¸¹´Ù. ±âº» µ¿ÀÛÀº Ŭ¶óÀÌ¾ðÆ®°¡ ¿¬°áÀ» ²÷À¸¸é ½ºÅ©¸³Æ®µµ ÁߴܵǴ °ÍÀÌ´Ù. ÀÌ µ¿ÀÛÀº ignore_user_abort¶ó´Â php3.ini Áö½ÃÀÚ(directive)³ª, php3_ignore_user_abort¶ó´Â Apache .confÀÇ Áö½ÃÀÚ·Î ¼³Á¤ÀÌ °¡´ÉÇϰí, ignore_user_abort() ÇÔ¼ö¸¦ »ç¿ëÇÏ¿© ¼³Á¤ÇÒ ¼öµµ ÀÖ´Ù. ¸¸¾à ¿©·¯ºÐÀÌ PHP¿¡°Ô »ç¿ëÀÚ°¡ ³»¸° ÁßÁö ¸í·ÉÀ» ¹«½ÃÇ϶ó°í ¸»ÇØÁÖÁö ¾Ê¾Ò´Ù¸é, »ç¿ëÀÚÀÇ ÁßÁö ½ÅÈ£´Â ¿©·¯ºÐÀÇ ½ºÅ©¸³Æ®¸¦ Á¾·á½ÃŲ´Ù. ´Ü, register_shutdown_function()À» »ç¿ëÇÏ¿© shutdown ÇÔ¼ö¸¦ µî·ÏÇØ³õÀº °æ¿ì´Â ¿¹¿Ü°¡ µÈ´Ù. shutdown ÇÔ¼ö¸¦ »ç¿ëÇϸé, »ç¿ëÀÚ°¡ STOP¹öưÀ» ´­·¶À» ¶§, ¿©·¯ºÐÀÇ ½ºÅ©¸³Æ®´Â ³²Àº Ãâ·ÂÀ» ÇÏ·Á°í Çϰí, PHP´Â ¿¬°áÀÌ ÁߴܵǾúÀ½À» ÀÎÁöÇÏ¿© shutdown ÇÔ¼ö¸¦ È£ÃâÇÏ°Ô µÈ´Ù. shutdown ÇÔ¼ö´Â ¿©·¯ºÐÀÇ ½ºÅ©¸³Æ®°¡ Á¤»óÀûÀ¸·Î Á¾·áµÇ¾úÀ» ¶§µµ È£Ã⠵ȴÙ. µû¶ó¼­ Ŭ¶óÀ̾ðÆ®ÀÇ ¿¬°á Áß´Ü ¶§¿Í ÀϹÝÀûÀÎ Á¾·á½Ã¿¡ ´Ù¸¥ µ¿ÀÛÀ» ¿øÇÑ´Ù¸é connection_aborted() ÇÔ¼ö¸¦ »ç¿ëÇÏ¸é µÈ´Ù. ÀÌ ÇÔ¼ö´Â ¿¬°áÀÌ ÁߴܵǾú´Ù¸é true¸¦ ¹ÝȯÇÑ´Ù.

¿©·¯ºÐÀÇ ½ºÅ©¸³Æ®´Â ³»ÀåµÈ ŸÀ̸ӿ¡ ÀÇÇØ Á¾·áµÉ ¼ö ÀÖ´Ù. ±âº» timeout ½Ã°£Àº 30ÃÊ·Î µÇ¾î ÀÖ´Ù. À̰ÍÀº max_execution_timeÀ̶ó´Â php3.ini Áö½ÃÀÚ(directive)³ª µ¿ÀÏÇÑ ³»¿ëÀÇ php3_max_execution_timeÀ̶ó´Â Apache .conf Áö½ÃÀÚ¿¡ ÀÇÇØ ´Ù¸£°Ô ¼³Á¤ÀÌ °¡´ÉÇϰí set_time_limit() ÇÔ¼ö¸¦ »ç¿ëÇÏ¿© ¼³Á¤ÇÒ ¼öµµ ÀÖ´Ù. ½Ã°£ÀÌ ´Ù µÇ¸é ½ºÅ©¸³Æ®´Â Áߴܵǰí, ÀÌ ½ºÅ©´Â À§¿¡¼­ ¼³¸íÇÑ Å¬¶óÀÌ¾ðÆ®¿ÍÀÇ ¿¬°áÀÌ Á¾·áµÈ °Íó·³ µ¿ÀÛÇÑ´Ù. µû¶ó¼­ shutdown ÇÔ¼ö°¡ µî·ÏµÇ¾î ÀÖ´Ù¸é ÀÌ ÇÔ¼ö°¡ ½ÇÇàµÈ´Ù. shutdown ÇÔ¼ö³»¿¡¼­ ÀÌ ÇÔ¼ö°¡ timeout¿¡ ÀÇÇØ È£ÃâµÈ °ÍÀΰ¡¸¦ ÆÇ´ÜÇÏ·Á¸é connection_timeout() ÇÔ¼ö¸¦ »ç¿ëÇÏ¸é µÈ´Ù. ÀÌ ÇÔ¼ö´Â timeout¿¡ ÀÇÇØ shutdown ÇÔ¼ö°¡ È£ÃâµÇ¾ú´Ù¸é true¸¦ ¹ÝȯÇÑ´Ù.

ÇѰ¡Áö À¯ÀÇÇÒ »çÇ×Àº ABORTED¿Í TIMEOUT »óÅ´ µÎ °³°¡ µ¿½Ã¿¡ activeµÉ ¼ö ÀÖ´Ù´Â °ÍÀÌ´Ù. À̰ÍÀº PHP°¡ »ç¿ëÀÚ Áß´ÜÀ» ¹«½ÃÇϵµ·Ï ¼³Á¤ÇØ ³õ¾ÒÀ» ¶§ °¡´ÉÇÏ´Ù. ¶Ç ´Ù¸¥ °æ¿ì´Â »ç¿ëÀÚ°¡ ¿¬°áÀ» ²÷Áö´Â ¾Ê¾ÒÁö¸¸ ¿¬°á¿¡ ¾î¶² ¹®Á¦°¡ »ý°Ü ¿¬°áÀÌ ¸Á°¡Áø °æ¿ì·Î, ÀÌ ¶§µµ ½ºÅ©¸³Æ®´Â °è¼Ó ½ÇÇàµÈ´Ù. ÀÌ·± °æ¿ì¿¡ ½ºÅ©¸³Æ®´Â °è¼Ó½ÇÇàµÇ°í, ½Ã°£ Á¦ÇÑ¿¡ °É·Á ½ºÅ©¸³Æ®ÀÇ ¼öÇàÀÌ Áߴܵǰí shutdown ÇÔ¼ö°¡ È£ÃâµÇ¸é, connection_timeout()°ú connection_aborted() ÇÔ¼ö ¸ðµÎ true¸¦ ¹ÝȯÇÏ°Ô µÈ´Ù. ¿©·¯ºÐÀº connection_status() ¶ó´Â ÇÔ¼ö¸¦ »ç¿ëÇÏ¿© µÎ°¡Áö »óÅ ¸ðµÎ¸¦ °Ë»çÇÒ ¼ö ÀÖ´Ù. ÀÌ ÇÔ¼ö´Â °¢ »óÅ¿¡ ´ëÇÑ Á¤º¸¸¦ bit´ÜÀ§·Î °¡Áö°í ÀÖ´Ù. ¿¹¸¦µé¾î À§¿Í°°ÀÌ ABORT¿Í TIMEOUT µÎ °³ÀÇ »óŰ¡ ¸ðµÎ activeµÇ¾î ÀÖ´Ù¸é ÀÌ ÇÔ¼ö´Â 3À» ¹ÝȯÇÑ´Ù.


Chapter 21. ¿µ±¸ÀûÀÎ µ¥ÀÌÅͺ£À̽º Á¢¼Ó (Persistent database connections)

¿µ±¸ÀûÀÎ Á¢¼Ó(Persistent connection)Àº ¿©·¯ºÐÀÇ ½ºÅ©¸³Æ®°¡ Á¾·áµÇ¾îµµ SQL link¸¦ ´ÝÁö ¾Ê´Â Á¢¼ÓÀ» ¸»ÇÑ´Ù. ¿µ±¸ÀûÀÎ Á¢¼ÓÀÌ ¿äûµÇ¸é, PHP´Â ±âÁ¸ÀÇ (ÀÌÀü¿¡ ¿­¾î µÎ¾ú´ø) µ¿ÀÏÇÑ(identical) ¿µ±¸ÀûÀÎ Á¢¼ÓÀÌ Àִ°¡¸¦ °Ë»çÇÑ´Ù. ¸¸¾à ÀÖ´Ù¸é ±âÁ¸ÀÇ °ÍÀ» »ç¿ëÇϰí, ¾ø´Ù¸é »õ·Î¿î link¸¦ ¸¸µç´Ù. 'µ¿ÀÏÇÑ(identical)' Á¢¼ÓÀ̶õ °°Àº È£½ºÆ®¿¡ °°Àº »ç¿ëÀÚ¸í(username)°ú °°Àº ¾ÏÈ£(password)¸¦ »ç¿ëÇÑ Á¢¼ÓÀ» ¸»ÇÑ´Ù.

°¡²û À¥¼­¹öÀÇ ÀÛµ¿°ú ÀÛ¾÷ÀÇ ÇÒ´ç¿¡ ´ëÇØ Àß ¾Ë°í ÀÖÁö ¸øÇÑ »ç¶÷µéÀº ¿µ±¸ÀûÀÎ Á¢¼ÓÀÌ »ç½ÇÀº º° °Í ¾Æ´Ï¶ó°í ¿ÀÇØÇϱ⵵ ÇÑ´Ù. ƯÈ÷, ¿µ±¸ÀûÀÎ Á¢¼ÓÀÌ µ¿ÀÏÇÑ SQL link¿¡¼­ 'user sessions'¸¦ ¿©´Âµ¥ º° ³ªÀ» °Íµµ ¾ø´Ù´ø°¡, transactionÀ» È¿À²ÀûÀ¸·Î ó¸®ÇÏ´Â °Íµµ ¾Æ´Ï¶ó´Ù´ø°¡, ȤÀº ´Ù¸¥ ¾î¶² ÀÛ¾÷À» ÇÏÁö ¸øÇÑ´Ù°íµµ ÇÑ´Ù. »ç½Ç, ÀÌ·± ¸»µé¿¡ ´ëÇØ ¸í¹éÈ÷ ¸»ÇÏÀÚ¸é, ¿µ±¸ÀûÀÎ Á¢¼ÓÀº ºñ¿µ±¸ÀûÀÎ Á¢¼Ó¿¡ ºñÇØ ¾î¶°ÇÑ ±â´ÉÀûÀÎ Çâ»óµµ ÁÖÁö ¸øÇÑ´Ù.

¿Ö?

À̰ÍÀº À¥¼­¹öÀÇ µ¿ÀÛ ¹æ¹ý´ë·Î µ¿ÀÛÇÑ´Ù. ¿©·¯ºÐÀÇ À¥¼­¹ö°¡ À¥ ÆäÀÌÁö¸¦ ¸¸µé±âÀ§ÇØ PHP¸¦ ÀÌ¿ëÇϴµ¥´Â 3°¡Áö ¹æ¹ýÀÌ ÀÖ´Ù.

ù ¹øÂ° ¹æ¹ýÀº PHP¸¦ CGI "wrapper"ÀÌ ÇüÅ·Π»ç¿ëÇÏ´Â °ÍÀÌ´Ù. ÀÌ ¹æ¹ýÀÇ °æ¿ì, À¥¼­¹ö¿¡ ¸Å PHP ÆäÀÌÁö°¡ ¿ä±¸µÉ ¶§ ¸¶´Ù, PHP ÀÎÅÍÇÁ¸®ÅÍÀÇ ½ÇÇàÀÌ ¸¸µé¾îÁö°í Á¾·áµÈ´Ù. µû¶ó¼­ ¸Å ¿ä±¸°¡ Á¾·áµÉ ¶§¸¶´Ù ÀÎÅÍÇÁ¸®ÅÍÀÇ ½ÇÇàÀÌ Á¾·áµÇ¹Ç·Î, ½ÇÇà Áß ¸¸µé¾ú´ø (SQL link¸¦ Æ÷ÇÔÇÑ) ¸ðµç ÀÚ¿øÀº ½ÇÇà Á¾·á¿Í ´õºÒ¾î ÇØÁ¦µÈ´Ù. ÀÌ °æ¿ì ¿©·¯ºÐÀº ¿µ±¸ÀûÀÔ Á¢¼ÓÀ» »ç¿ëÇÏ¿© ¾î¶² À̵浵 ¾òÀ» ¼ö ¾ø´Ù. ´Ù¸£°Ô ¸»Çϸé ÀÌ °æ¿ì´Â ¿µ±¸ÀûÀÎ Á¢¼ÓÀ» ÇØµµ ¿µ±¸ÀûÀÌ ¾Æ´Ï´Ù.

µÎ ¹øÂ° ¹æ¹ýÀº °¡Àå ´ëÁßÀûÀÎ ¹æ¹ýÀε¥, PHP¸¦ ´ÙÁßÇÁ·Î¼¼½º(multiprocess) À¥¼­¹öÀÇ ¸ðµâ·Î »ç¿ëÇÏ´Â °ÍÀÌ´Ù. (ÇöÀç´Â Apache°¡ À¯ÀÏÇÏ´Ù.) ´ÙÁßÇÁ·Î¼¼½º ¼­¹ö´Â º¸Åë ÇÑ °³ÀÇ ºÎ¸ð(parent) ÇÁ·Î¼¼½º¿Í, ÀÌ¿Í À¯±âÀûÀ¸·Î ¿¬°áµÇ¾î À¥ ÆäÀÌÁö¸¦ ½ÇÁ¦·Î ¸¸µå´Â ÀÛ¾÷À» ÇÏ´Â ¿©·¯°³ÀÇ ÀÚ½Ä(child) ÇÁ·Î¼¼½ºµéÀ» °¡Áö°í ÀÖ´Ù. Ŭ¶óÀÌ¾ðÆ®·ÎºÎÅÍ µé¾î¿À´Â °³º° ¿ä±¸´Â ´Ù¸¥ Ŭ¶óÀ̾ðÆ®ÀÇ ·á±¸¸¦ ó¸®Çϰí ÀÖÁö ¾ÊÀº ³²´Â ÀÚ½Ä ÇÁ·Î¼¼½º·Î ³Ñ°ÜÁø´Ù. À̰ÍÀº µ¿ÀÏÇÑ Å¬¶óÀÌ¾ðÆ®°¡ ¼­¹ö¿¡ µÎ ¹øÂ° ¿ä±¸¸¦ º¸³¾ ¶§, º¸Åë óÀ½°ú ´Ù¸¥ ÀÚ½Ä ÇÁ·Î¼¼½º¿¡¼­ 󸮵ȴٴ °ÍÀ» ÀǹÌÇÑ´Ù. ÀÌ °æ¿ì ¿µ±¸ÀûÀÎ Á¢¼ÓÀ» »ç¿ëÇÏ¸é °¢°¢ÀÇ ÀÚ½Ä ÇÁ·Î¼¼½ºµéÀº óÀ½ ¿ä±¸¿¡¼­¸¸ SQL ¼­¹ö¿¡ Á¢¼ÓÇÏ°Ô µÈ´Ù. ´Ù¸¥ ÆäÀÌÁö¿¡¼­ SQL ¼­¹ö¿¡ÀÇ Á¢¼Ó ¿ä±¸½Ã´Â ±âÁ¸¿¡ ¸¸µé¾îÁø Á¢¼ÓÀ» ´Ù½Ã »ç¿ëÇÏ°Ô µÈ´Ù.

¸¶Áö¸· ¹æ¹ýÀº PHP¸¦ ¸ÖƼ¾²·¹µå(multithreaded) À¥¼­¹öÀÇ Ç÷¯±×-ÀÎÀÇ ÇüÅ·ΠÀÛµ¿½ÃŰ´Â °ÍÀε¥, ÇöÀç À̹æ¹ýÀº ÀÌ·ÐÀûÀ¸·Î¸¸ Á¸ÀçÇϰí, ½ÇÁ¦·Î ¸¸µé¾î Áø °ÍÀº ¾ø´Ù. ISAPI, WSAPI, NSAPI (Windows¿¡¼­) µîÀÇ ¹æ¹ýÀ» »ç¿ëÇÏ¿© Netscape FastTrack, Microsoft's Internet Information Server (IIS), O'Reilly's WebSite Pro µîÀÇ ¸ÖƼ¾²·¹µå À¥¼­¹ö¿¡¼­ PHP¸¦ Ç÷¯±×-ÀÎÀ¸·Î µ¿ÀÛ½ÃŰ·Á´Â ÀÛ¾÷ÀÌ ÇöÀç ÁøÇàÁßÀÌ´Ù. ÀÌ °æ¿ì ±âº» µ¿ÀÛÀº À§¿¡¼­ ¾ð±ÞÇÑ ´ÙÁßÇÁ·Î¼¼½º ¸ðµ¨°ú µ¿ÀÏÇÏ°Ô µ¿ÀÛÇÑ´Ù.

¿µ±¸ÀûÀÎ Á¢¼ÓÀÌ ½ÇÁ¦·Î ¾Æ¹«·± ±â´ÉÀÇ Çâ»óµµ ÁÖÁö ¸øÇÑ´Ù¸é, À̰ÍÀ» »ç¿ëÇØ ¾î¶² ÀÌÁ¡ÀÌ ÀÖ³ª¿ä?

À̰Ϳ¡ ´ëÇÑ °£´ÜÇÑ ´äÀº È¿À²¼ºÀÌ´Ù. ¿µ±¸ÀûÀÎ Á¢¼ÓÀº SQL ¼­¹ö¿ÍÀÇ link¸¦ ¸¸µå´Â °Í¿¡ µû¸¥ overhead°¡ Ŭ °æ¿ì¿¡ À¯¿ëÇÏ´Ù. ÀÌ  overhead´Â ¸¹Àº ¿äÀο¡ µû¶ó Ä¿Áö±âµµ Çϰí ÀÛ¾ÆÁö±âµµ ÇÑ´Ù. ¾î¶² Á¾·ùÀÇ µ¥ÀÌÅͺ£À̽ºÀΰ¡? À¥¼­¹ö¿Í °°Àº ÄÄÇ»ÅÍ¿¡ µ¥ÀÌÅͺ£À̽º ¼­¹ö°¡ Àִ°¡? SQL ¼­¹ö°¡ ¾î¶»°Ô »ç¿ëµÇ°í Àִ°¡? µî¿¡ µû¶ó Å©°Ô ´Þ¶óÁø´Ù. Á¢¼Ó¿¡ µû¸¥ overhead°¡ Ŭ °æ¿ì¿¡ ¿µ±¸ÀûÀÎ Á¢¼ÓÀº ¿©·¯ºÐ¿¡°Ô ÀûÁö ¾ÊÀº µµ¿òÀ» ÁÙ °ÍÀÌ´Ù. À̰ÍÀº ÀÚ½Ä process¿¡¼­ SQL ¼­¹ö¿¡ Á¢¼ÓÀ» ¿äûÇÒ ¶§ ¸¶´Ù Á¢¼ÓÀ» ¸¸µå´Â ´ë½Å, ÀÌ ÇÁ·Î¼¼½º°¡ Á¾·áµÉ ¶§ ±îÁö »ì¾ÆÀÖ´Â ÇÑ °³ÀÇ Á¢¼Ó ¸¸À» »ç¿ëÇÑ´Ù. À̰ÍÀº ¸ðµç ¿µ±¸ÀûÀÎ Á¢¼ÓÀ» »ç¿ëÇÑ ÇÁ·Î¼¼½º´Â, ±×¿¡ ÇØ´çÇÏ´Â ÇÑ ´ëÀÇ ¿µ±¸ÀûÀÎ Á¢¼ÓÀ» °¡Áö°í ÀÖ´Ù´Â °ÍÀ» ÀǹÌÇÑ´Ù. ¿¹¸¦ µé¾î SQL ¼­¹ö¿¡ ´ëÇÏ¿© ¿µ±¸ÀûÀÎ Á¢¼ÓÀ» »ç¿ëÇÏ´Â ½ºÅ©¸³Æ®¸¦ ½ÇÇàÇÏ¿´´ø 20°³ÀÇ ´Ù¸¥ ÀÚ½Ä ÇÁ·Î¼¼½º°¡ ÀÖ´Ù¸é, ¾Æ¸¶µµ °¢°¢ÀÇ ÀÚ½Ä ÇÁ·Î¼¼½º¿¡´ëÇØ 1°³¾¿, 20°³ÀÇ SQL Á¢¼ÓÀÌ ÀÖÀ» °ÍÀÌ´Ù.

Áß¿äÇÑ ¿ä¾à ÇѰ¡Áö. ¿µ±¸ÀûÀÎ Á¢¼ÓÀº ÀϹÝÀûÀÎ Á¢¼Ó¿¡ 1´ë1·Î ´ëÀÀµÇµµ·Ï ¼³°èµÇ¾ú´Ù. À̰ÍÀº ½ºÅ©¸³Æ®ÀÇ ±â´ÉÀº ±×´ë·Î µÎ°í, ¾ðÁ¦¶óµµ ºñ¿µ±¸ÀûÀÎ ¿¬°áÀ» ¿µ±¸ÀûÀÎ ¿¬°á·Î ´ëÄ¡ÇÒ ¼ö ÀÖ´Ù´Â °ÍÀ» ÀǹÌÇÑ´Ù. À̰ÍÀ¸·Î ¿©·¯ºÐÀº ¾Æ¸¶µµ ½ºÅ©¸³Æ®ÀÇ È¿À²À» Çâ»ó½Ãų ¼ö ÀÖÀ» °ÍÀÌ´Ù.


[End Of Page]