NOTICE

$_GET, $_POST, $_REQUEST 파싱 순서

Date : 2008. 7. 8. 13:07 Category : Programming/PHP
<form method="post" action="test.php?id=test">
   <input type="hidden name="id" value="test01" />
   <input type="submit" value="submit" />
</form>

알다시피 get 방식으로 넘긴 변수는 $_GET으로 받으면 되고 post는 $_POST로 받으면 된다.
이 두 가지 상관 않고 받을 땐 $_REQUEST로 받고.
그런데 만약 위와 같이 저런 식으로 되었을 땐 어떻게 될꼬?

<?
echo $_GET['id'];
echo $_POST['id'];
echo $_REQUEST['id'];
?>

받는 페이지에서 이런 식으로 받았더니 결과값은?

test
test01
test01

이렇게 나왔다.

php 파서는 동일한 이름의 변수가 하나 이상 존재하고 서로 다른 값을 가지고 있을 때 variables_order에 있는 순서대로 파싱한다.

디폴트가 variables_order = "EGPCS"다.
EGPCS는 $_ENV, $_GET, $_POST, $_COOKIE, $_SERVER

그래서 위의 경우는 $_GET['id']를 먼저 파싱하고 그 다음에 $_POST['id']를 파싱했기 때문에 결국 먼저 파싱된 get이 뒤에 파싱된 post에 의해 덮어진 것이다.
해서 출력은 test01이 출력된다.