백앤드 개발자가 php 사용시 클라 요청 파라미터를 처리할 때, $_REQUEST 변수를 많이 쓰는데,
사용시 몇가지 특이사항이 있어서 정리해봅니다.
$_REQUEST 변수란 ?
•
PHP 슈퍼 글로벌 변수중 하나입니다. (global $variable;을 할 필요가 없습니다 .)
•
5.3.0 이후 버전부터는 $_COOKIE 포함하지 않음 (request_order 로 설정가능)
PHP 5.3.0의 시스템에 있는 기본 PHP.ini는 $_REQUEST에서 쿠키를 제외할 수 있습니다.
request_order ini 지침은 $_REQUEST 배열에 포함되는 내용을 지정합니다.
없으면 변수_order 지침이 지정합니다.
배포판의 PHP.ini는 기본적으로 쿠키를 제외할 수 있으므로 주의하십시오.
Plain Text
복사
php.ini 옵션설명 :
•
variables_order:
◦
PHP가 전역 변수($_ENV, $_GET, $_POST, $_COOKIE, $_SERVER)를 설정하는 순서를 지정합니다.
◦
$_REQUEST 배열의 순서에는 직접적인 영향을 미치지 않습니다.
◦
예시:
// php.ini 설정
// variables_order = "GPS"
<?php
// PHP 코드
echo isset($_ENV) ? '$_ENV exists' : '$_ENV does not exist'; // 결과: '$_ENV does not exist'
echo isset($_GET) ? '$_GET exists' : '$_GET does not exist'; // 결과: '$_GET exists'
echo isset($_POST) ? '$_POST exists' : '$_POST does not exist'; // 결과: '$_POST exists'
echo isset($_COOKIE) ? '$_COOKIE exists' : '$_COOKIE does not exist'; // 결과: '$_COOKIE does not exist'
echo isset($_SERVER) ? '$_SERVER exists' : '$_SERVER does not exist'; // 결과: '$_SERVER exists'
PHP
복사
•
request_order:
◦
$_REQUEST 배열에 포함되는 변수를 어떤 순서로 처리할지를 지정합니다.
◦
설정되지 않은 경우, variables_order 설정에 따라 기본 순서(G, P, C)를 따릅니다.
◦
예시:
// php.ini 설정
// request_order = "GP" // GET, POST 순서
<?php
// 요청시 GET id : A, POST id : B로 준경우
echo $_REQUEST['id']; // B로 출력
PHP
복사
이슈 : 파싱되는 순서에 대하여
•
상황 : GET, POST 로 동일한 파라미터를 보내는 경우
•
문제점 : $_REQUEST 변수는 어떤걸 우선순위로 보여줄까 ?
•
테스트예시 :
// 요청시 GET id : A, POST id : B로 준경우
echo "request_order:".ini_get('request_order')."\n";
echo "GET id : ".$_GET['id']. "\n";
echo "POST id : ". $_POST['id']. "\n";
echo "REQUEST id : ".$_REQUEST['id']. "\n";
PHP
복사
// 결과1 : request_order : GP 인경우 (GET -> POST 순으로 파싱)
request_order:GP
GET id : A
POST id : B
REQUEST id : B // POST id
// 결과2 : request_order : PG 인경우 (POST -> GET 순으로 파싱)
request_order:PG
GET id : A
POST id : B
REQUEST id : A // GET id
Plain Text
복사
◦
request_order 설정에 따라 결과가 다른 것을 알 수 있다.