PHP 밖에서 온 변수들 (Variables from outside PHP)

HTML Forms (GET and POST)

폼이 PHP 스크립트로 submit되면 폼에 있는 모든 내용들이 자동적으로 만들어진 PHP 변수로 들어온다. 만약 track_vars 옵션이 on으로 설정되어 있으면, 이 변수들 모두는 그것이 어디서 만들어진 것이냐에 따라서 $HTTP_POST_VARS, $HTTP_GET_VARS, $HTTP_POST_FILES의 associative 배열에 위치하게 된다.

이 변수에대한 자세한 설명은 미리 정의된 변수 (Predefined variables)을 읽어보기 바란다.

예 8-1. Simple form variable

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

위의 폼이 전송될 때, text input의 내용은 $HTTP_POST_VARS['username']에 있다. 만약 register_globals 지시자가 켜져 있으면, 스크립트의 전역 영역에서 $username이라는 변수에도 이 값이 저장된다.

PHP는 폼 변수에 배열을 사용할 수도 있다. 예를들어, 내용적으로 묶을 수 있는 변수들을 하나의 배열로 묶을 수 있고, 이 기능을 select 문에 사용하여 다중 선택을 구현할 수 있다.

예 8-2. More complex form variables

<form action="array.php" 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
        <option value="stuttgarter">Stuttgarter Schwabenbräu
        </select>
    <input type="submit">
</form>

PHP3에서 폼 배열에 사용되는 배열은 일차원 배열로 제한되었지만, PHP4에서는 이 제한이 없어졌다.

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를 사용하는 것이 좋다. 예 :

예 8-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, Cookie 메카니즘을 통해서 들어 온 정보로부터도 PHP 변수가 생기므로, 때때로 환경변수로부터 받은것이 확실한가를 확인할 필요가 있을 때도 있다. 이를 위해 getenv() 함수를 사용한다. 환경 변수를 설정하기 위해서는 putenv() 함수를 사용한다.

외부 변수명에 있는 '.' (Dots in incoming variable names)

일반적으로 PHP는 변수를 스크립트로 가져올 때 변수명을 바꾸지 않는다. 그러나, PHP의 변수명에는 '.' (점)을 사용할 수 없다. 다음과 같은 경우를 보자. :
$varname.ext;  /* invalid variable name */
위의 경우 PHP 파서는 $varname이라는 변수와, 연결 연산자, 'ext'(따옴표가 없는 경우 그것이 어떤 알려진 키나 예약어가 아니면 문자열로 취급된다.)로 해석한다. 이것은 우리가 원하는 결과가 아니다.

위와 같은 이유로 PHP는 외부에서 불러들인 변수의 이름에 '.'이 있으면 '_'(밑줄)로 바꾸어 읽어들인다.

변수의 Type 판단 (Determining variable types)

PHP는 변수의 type을 알아서 정하고 (일반적으로) 필요한 경우에는 그 type을 바꾸므로, 특정 시점에 그 변수 어떤 type인지는 쉽게 알 수 없다. PHP는 변수의 type을 알아보기 위해 여러개의 함수를 가지고 있다. gettype(), is_long(), is_double(), is_string(), is_array(), is_object() 가 그것들이다.