외부변수는 외부로부터 들어온 변수, 다시 말해 POST 나 GET방식을 통해 전달된 값을 말하며, 각각 $HTTP_POST_VARS 와 $HTTP_GET_VARS 변수에 자동으로 저장됩니다.
지금은 $_GET과 $_POST라는 짧은 변수에 동시에 저장됩니다.
이 변수는 사용자가 입력한 폼의 속성 이름이나 전달하고자 하는 변수의 이름을 키로 갖고, 그 변수의 값을 갖는 value 인 연관배열로 전달받습니다. POST의 값은 다음 예제를 보면 이해되리라 봅니다.
<form method="POST" action="">
이 름: <input type="text" name="myname" value="내 이름">
닉네임: <input type="text" name="nickname" value="하보니">
<inpt type="submit" value="값 전송">
</form>
<?php
if(is_array($_POST)){
while (list($key, $value) = each($_POST)){
echo "변수 키 : ${key}, 변수 값: ${value}<br />\n\t";
}
echo $_POST['myname'] . "<br />\r\n";
echo $_POST['nickname'] . "<br />\r\n";
}
?>
<form method="POST" action="?myname=내 이름&nickname=하보니">
<inpt type="submit" value="값 전송">
</form>
<?php
if(is_array($_POST)){
echo $_POST['myname'] . "<br />\r\n";
echo $_POST['nickname'] . "<br />\r\n";
}
?>
$_POST 변수는 method 속성을 POST로 정의하여 전달된 값이 저장되는 것으로 "myname"이 변수 이름인 key를 갖고, 그 변수의 값을 "내 이름"이 배열원소가 됩니다.
여기서 method 속성을 GET으로 정의하면 당연히 GET변수가 되겠지요.
<form method="GET" action="">
이 름: <input type="text" name="myname" value="내 이름">
닉네임: <input type="text" name="nickname" value="하보니">
<inpt type="submit" value="값 전송">
</form>
<?php
if(is_array($_GET)){
while (list($key, $value) = each($_GET)){
echo "변수 키 : ${key}, 변수 값: ${value}<br />\n\t";
}
echo $_GET['myname'] . "<br />\r\n";
echo $_GET['nickname'] . "<br />\r\n";
}
?>
이 두 변수의 차이는 GET은 URL 뒤에 붙어 전달되는 방식으로 데이터의 노출위험과 전송크기에 제한 받지만, 반대로 POST는 데이터의 노출은 최소, 데이터전송에 제한이 없는 강점이 있습니다.