Home
home
🏡 홈
home

[php] $_REQUEST 사용시 주의사항

분류
개발지식
태그
PHP
작성자
작성일
2024/07/26 00:09
백앤드 개발자가 php 사용시 클라 요청 파라미터를 처리할 때, $_REQUEST 변수를 많이 쓰는데, 사용시 몇가지 특이사항이 있어서 정리해봅니다.

$_REQUEST 변수란 ?

$_GET , $_POST , $_COOKIE 의 내용을 포함하는 연관 배열 입니다.
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 설정에 따라 결과가 다른 것을 알 수 있다.